Nastavení option jako disabled u SelectBox
- ibru
- Člen | 9
Vyskytla se mi potreba nastavit nektere polozky select boxu jako disabled, tyto polozky znam az v dobe renderovani sablony. A neobjevil jsem pro toto zadnou podporu ve tride SelectBox. Proto jsem si tridu trosku rozsiril. Myslim, ze je to uzitecna ficurka, tak se to klidne muze zaradit nekam do hlavni vetve.
Co jsem teda udelal?
Pridal jsem do tridy SelectBox
privatni promennou a metodu
<?php
private $disabledKeys = array();
public function setDisabledForItemWithKey($key) {
$this->disabledKeys[] = $key;
}
?>
a v metode getControl
nekde okolo radku 220 zamenil
<?php
} elseif ($this->useKeys) {
$dest->add((string) $option->value($key2)->selected(isset($selected[$key2]))->setText($this->translate($value2)));
} else {
$dest->add((string) $option->selected(isset($selected[$value2]))->setText($this->translate($value2)));
}
?>
za
<?php
} elseif ($this->useKeys) {
if (in_array($key, $this->disabledKeys)) {
$option = Html::el('option', array('disabled' => 'disabled'));
} else {
$option = Html::el('option');
}
$dest->add((string) $option->value($key2)->selected(isset($selected[$key2]))->setText($this->translate($value2)));
} else {
$dest->add((string) $option->selected(isset($selected[$value2]))->setText($this->translate($value2)));
}
?>
Nyni muzu v presenteru pouzit
<?php
function renderWhatever($id) {
$this['myForm']->values = $this->model->find($id)->fetch();
$this['myForm']['select_name']->setDisabledForItemWithKey($id);
}
?>
Moc jsem nepochytil, k cemu je $this->useKeys
, takze pro
uplnou funkcnost by se asi muselo poresit pripad, kdy to bude mit hodnotu
false
.
Editoval ibru (31. 3. 2010 17:02)
- ibru
- Člen | 9
22 napsal(a):
a nestačí?:
$form ->addCheckbox('box', 'box') ->setValue(true)->setDisabled(true);
ne, v tomhle nevidim zadnou pouzitelnost.
Mam treba hierarchii kategorii a k nim clanky. A pri vytvareni clanku chci povolit zarazeni jen do nejspodnejsi kategorie (ktera uz nema podkategorie) Ale zobrazit v select boxu chci vsechny kategorie, kvuli prehledu o celkove strukture.
- mbskot
- Člen | 42
cafte,
chcem sa spytat ci sa da nastavit hodnota disabled u options v selectboxe.
Velmi by som to potreboval.
Da sa nejako dostat k options a nastavovat im atributy?
skusil som dumpnut selectbox:
Nette\Forms\SelectBox(18) {
"items" private => array(2) {
33 => "Gula gulata" (11)
16 => "Fotogaleria" (11)
}
"allowed" protected => array(2) {
33 => "Gula gulata" (11)
16 => "Fotogaleria" (11)
}
"skipFirst" private => FALSE
"useKeys" private => TRUE
Ked su tam ‚allowed items‘ nedalo by sa nejako nastavit ‚deny items‘?
Inak ako to je so setItems? ked som to skusil, tak sice options mi to pridalo, ale formular ich akoby nemal zaregistrovane a teda ani jednu z pridanych option nechcel zobrat(pripadne ak som odobral pravidlo FILLED, tak vracal NULL)
Editoval mbskot (15. 7. 2011 8:46)
- Aurielle
- Člen | 1281
Používám úspěšně následující řešení:
$arr = array(
'item' => Nette\Utils\Html::el('option')->value('item')->setHtml('popisek'),
'item2' => Nette\Utils\Html::el('option')->value('item2')->setHtml('popisek')->disabled(TRUE),
);
$form->addSelect('select', 'select', $arr)
// případně
$form['select']->setItems($arr);
Jen pozor, i disabled položku bude Nette akceptovat jako validní, tohle je třeba si v submit metodě ohlídat. (Testováno včera na Nette 2.0 beta)
- Matúš Matula
- Člen | 257
tak ako vravi @norbe, tak podpora pre IE do verzie 8beta1 neexistuje, http://www.gtalbot.org/…Support.html . Ale ak ta tieto prehliadace nepalia.. :)