Dosazení options value do select v latte

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

Ahoj, potřebuju dosadit v latte hodnoty options do select.

Do addText dosadím hodnoutu v latte:

{input id value=>$value}

Ale jak na AddSelect?

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Mnohem lepší je využít metodu setDefaultValue(). Tedy v definici formuláře:

$form->addSelect('name', 'Label:', array( ... ))
	->setDefaultValue($value);

Stejně tak u addText:

$form->addText('id', 'ID:')
	->setDefaultValue($value);

V šabloně pak stačí {input id}. Lze použít i setValue, která hodnotu vynutí (setDefaultValue jen nastaví výchozí hodnotu, která je přepsána třeba při znovuvykreslení formuláře kvůli nějaké chybě).

breeta
Člen | 68
+
0
-

Dobře ale na to sem se neptal jak dosadit hodnotu v definici.
Mám cyklus v latte a v něm komponentu s formulářem do které chci ukládat některé data.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Chápu, že jsem neodpověděl přímo na dotaz, protože se domnívám, že v naprosté většině případů je lepší použít API formulářů. Prvku <select> vykreslenému formulářovým makrem hodnotu předat nejde – makro umožňuje přidávat pouze další HTML atributy danému prvku, nefunguje jako obálka nad formulářovým API.

Úplně nerozumím druhé větě – o co se přesně snažíš? Věřím, že existuje cesta bez potřeby nastavovat hodnotu selectu v šabloně :)

breeta
Člen | 68
+
0
-

No je to na e-shop, zobrazují se data produktů a chci tam dosadit na výběr při nákupu kolik balení např.: 1 balení = 5ks nebo L (u každého produktu je jiné balení) a hodit do košíku tam se převezme kolik balení a id produktu.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Rozumím, a jak to máš zatím řešené? Jeden velký formulář? Spousta malých formulářů jeden pro každý produkt? Předpokládám nějaký {foreach} produktů v šabloně, v presenteru předaný do $this->template->products?

Co mě k tomu napadá:

  • Potřebuješ to na zadání výchozí hodnoty? Opravdu správné místo je to řešit v definici formuláře.
  • Potřebuješ to de-facto jako placeholder? V definici formuláře je metoda setPrompt(). Např.: ->setPrompt('zvol počet balení').
  • Teď jsem si ještě přečetl jednou tvůj první příspěvek, a: options, tedy chápu jako $items jde skutečně nastavit jen jako 3. parametr ->addSelect nebo pomocí metody setItems(). V šabloně by šlo `{? $form[‚name‘]->setItems($items)} (nebo klidně cokoliv jiného), ale to je prasárna.

Vpodstatě všechny 3 usecase by se měly řešit v definici formuláře.