Da sa klasicky drop down zoznam pouzit v prikaze addselect?

niktos
Člen | 13
+
0
-

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 | 245
+
0
-

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
+
0
-

@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)