Nastavení title do selectu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
wise
Člen | 161
+
0
-

Zdravím,

do formu přidávám select $form->addSelect($name, NULL, (array)$items);, ale potřeboval bych
ještě přidat atribut title, který by byl u každé položky selectu jiný.

Jak na to?

westrem
Člen | 398
+
0
-

No, len tak zo zvedavosti, k comu to potrebujes? U <option> tagu som dosial nikdy nemal potrebu nastavovat title atribut.

Riesenie je vsak jednoduche, maj $items v tejto podobe:

$items = array(
	'value_1' => Html::el('option')->setText('your text')->title('your desired title'),
	'value_2' => Html::el('option')->setText('your text')->title('your desired title'),
	..
);
wise
Člen | 161
+
0
-

Jedná se o JS select s obrázky a cesta k němu se nastavuje pomocí atr title u option.

Nicméně $items načítám z db pomocí ->fetchPairs();

To mi nejspíš problém trochu komplikuje, předpokládám správně? :)

westrem
Člen | 398
+
0
-

Nuz, vytiahni si to kludne pomocou fetchPairs a potom jednou iteraciou cez foreach si vytvor pole toho formatu. Inak to nevidim :)

wise
Člen | 161
+
0
-

Jj, tak jsem to udělal, jen jsem se ptal, jestli není „hezčí“ řešení :)

Btw. děkuju :)

Editoval wise (7. 11. 2010 9:36)

wise
Člen | 161
+
0
-

Zdravím,

ještě mě napadlo, jak k tomu přidám atribut value?

Jelikož
Html::el(‚option‘)->setText($value)->value($value)

nejede.

Děkuji.

westrem
Člen | 398
+
0
-

Hmm to je zvlastne, to s tym setValue($value) by malo fungovat, postni sem ako to teda mas.

redhead
Člen | 1313
+
0
-

value se snad ale definuje přes index toho pole ne?

wise
Člen | 161
+
0
-

Přes setValue to funguje, netbeans mi to nenabídl. Děkuju. Kde bych našel přehled těchto metod?

Napsal jsem to přímo do el(…), takže jsem ani setValue nepoužil.

Definoval jsem to v klíči pole, ale evidentně nefungovalo.

westrem
Člen | 398
+
0
-

redhead napsal

Ono ked tomu podstrcis uz priamo Html object tak nie, vid API, preto je nutne aby si value nastavil rucne.

wise napsal

Tam nie je ziadny zoznam metod, trieda Html ma napisane intuitivne pretazovanie, takze mozes pouzivat metody ako addAttr alebo setAttr, kde Attr nahrad za original nazov atributu. Malo by vsak fungovat aj normalne napr ->value('value'), neviem preco ti to nefungovalo.

wise
Člen | 161
+
0
-

To já taky ne, ale hlavně, že to jede :)

Podbor
Člen | 19
+
0
-

Řeším podobný problém. Potřebuji si při vytváření selectu u některých „option“ nastavit třídu na „deleted“, abych věděl, že se jedná o smazané prvky a následně pak dle toho přes JS změnil text tlačítka a následné zpracování.
Zkoušel jsem návod, který tu napsal westrem, ale po odeslání formuláře má daný Select hodnotu NULL. Tuší někdo, proč by to tak mohlo být ? Už se s tím peru přes 2 hodiny, ale stále se mi nepodařilo zjistit, kde je chyba.

Edit:
Chyba byla (opět) na mojí straně, nenastavoval jsem jednotlivým prvkům option hodnotu „value“, to se to pak těžko dělá… Jen pro případ, že by byl někdo ve stejné situaci.

Editoval Podbor (1. 5. 2011 16:09)

ony2
Člen | 9
+
0
-

Neviete mi poradit preco ked si vytvorim select v tovarnicke formularu tymto sposobom:

$items = array(
  Html::el('option')->setText('enabled.gif')->title('/images/ddicons/enabled.gif')->value('enabled.gif'),
  Html::el('option')->setText('icon_faq.gif')->title('/images/ddicons/icon_faq.gif')->value('icon_faq.gif'),
  Html::el('option')->setText('icon_music.gif')->title('/images/ddicons/icon_music.gif')->value('icon_music.gif')
);
$el = $form->addSelect('image', 'Obrázok odkazu', $items);

tak po naplneni formulara cez $form->setDefaults nemam oznaceny ako selected ziadny select. Uz som skusal uplne vsetko, do formSubmitted som si dal aby rucne tomu elementu nastavil value, skusal som selected pridat priamo do toho pola $items k jednotlivym elementom a nechapem preco nie je mozne ziadny nastavit na selected. Ma niekto nejaky napad?

uestla
Backer | 799
+
0
-

Tak se pochlub, jak to $form->setDefaults voláš… Klíče těch jednotlivých <option>ů jsou čísla, takže by mohlo fungovat

$form->addSelect('image', 'Obrázok odkazu', $items)
	->setDefaultValue(0); // pro první položku

resp.

$form->addSelect('image', 'Obrázok odkazu', $items);
$form->setDefaults(array(
	'image' => 0,
));
_Martin_
Generous Backer | 679
+
0
-

@ony2: Jakou hodnotu předáváš do setDefaults? Položky v select boxu fungují jako páry „hodnota“ ⇒ „popis“. Pravděpodobně bys měl ve svém příkladě nastavovat výchozí hodnoty [0,1,2] a nebo změnit definici na:

$items = array(
	'enabled.gif' => Html::el('option')->setText('enabled.gif')->title('/images/ddicons/enabled.gif')->value('enabled.gif'),
	'icon_faq.gif' => Html::el('option')->setText('icon_faq.gif')->title('/images/ddicons/icon_faq.gif')->value('icon_faq.gif'),
	'icon_music.gif' => Html::el('option')->setText('icon_music.gif')->title('/images/ddicons/icon_music.gif')->value('icon_music.gif'),
);
$el = $form->addSelect('image', 'Obrázok odkazu', $items);
Filip Procházka
Moderator | 4668
+
0
-

setDefaults a setDefaultValue se používá na označení jedné z položek, které jsi selectu již nastavil.

$form->addSelect('image', 'Obrázok odkazu', array(
        'enabled.gif' => Html::el('option')->setText('enabled.gif')->title('/images/ddicons/enabled.gif')->value('enabled.gif'),
        'icon_faq.gif' => Html::el('option')->setText('icon_faq.gif')->title('/images/ddicons/icon_faq.gif')->value('icon_faq.gif'),
        'icon_music.gif' => Html::el('option')->setText('icon_music.gif')->title('/images/ddicons/icon_music.gif')->value('icon_music.gif'),
))
	->setDefaultValue('enabled.gif');
ony2
Člen | 9
+
0
-

Vdaka za pomoc uz mi to funguje, bolo potrebne do toho pola items pouzit kluce ktore som ja pouzival ako hodnoty tak ako napisal _Martin_