Da sa klasicky drop down zoznam pouzit v prikaze addselect?
- niktos
- Člen | 13
Ahojte,
neviem, ci to popisem terminologicky spravne, ale mam problem dosiahnut pomocou
prikazu {control testForm} rovnaky vystup aky dosiahnem, ak prikaz control
vynecham a miesto toho pouzijem priamo v latte prikaz select. Konkretne: ak
v latte pouzijem kod
<select name="country" ... > {include "state.html"} </select>
tak si mozno vybrat z drop down zoznamu lubovolnu z viacerych polozku obsiahnutu v subore state.html, pricom kazdy riadok tohto suboru ma standardny tvar v podobe
<option value=CZE>Czech Republic</option>
Pokusil som sa vsak tomuto sposobu vyhnut a zverit vsetko spominanemu {control testForm}, pricom vo formulari mam vzorovy kod z dokumentacie, cize
public $countries = ['CZ' => 'Česká Republika', 'SK' => 'Slovensko','GB' => 'Velká Británie'];
....
protected function createTestForm(): Form
{ ....
$form->addSelect('country', 'country', $this->countries)->setDefaultValue('SK');
...
}
To samozrejme funguje, ale ja by som rad vyuzil spominany subor state.html a to podla moznosti bez jeho (zasadnych) uprav a zaroven bez jeho zahrnutia do presentera, len s nejakou referenciou. V dokumentacii sa spomina v suvislosti s tretim parametrom este metoda setItems, ale nic konstruktivne ma nenapadlo rovnako ako o tzv. zmene HTML atributov.
Je moja predstava nejako realizovatelna? Dakujem vopred za odpoved.
- Pepino
- Člen | 257
Nevím jestli uplně rozumím čeho chceš dosáhnout, ale jestli ti jde o ten výsledný HTML kód tak můžeš namísto {control …} použít manuální vykreslování formuláře viz. https://doc.nette.org/…ms/rendering nebo upravit samotný renderer.
- dakur
- Člen | 493
@niktos Pokud to potřebuješ mít takto staticky,
nedefinuj dané pole pomocí $form->addSelect()
(tj. nette o něm nebude vědět), ale vytáhni si ho pak po odeslání přímo
z POST dat:
class SomePresenter extends Presenter
{
protected function createComponentSomeForm(): Form
{
$form = new Form();
// ...
$form->onSuccess[] = function (Form $form): void {
$country = $this->request->getPost('country');
// validace
if ($country === null || $country === '') {
$form->addError('Vyberte zemi');
return;
}
// zpracování
};
return $form;
}
}
Editoval dakur (8. 6. 2022 7:48)