Podmienene zobrazenie inputu

vladimir.biro
Člen | 163
+
0
-

Ahojte.

Prosim vas, je nejako mozne podmienit zobrazovanie formularoveho prvku v sablone formularu (v pripade vlastnej sablony formularu) podla toho, ci je v createComponentForm() alebo nie je.

Niektore prvky chcem mat vo formulari len za urcitych podmienok (napriklad ak prihlaseny user je admin) no chcel by som podmienku mat len v PHP. Nie v sablone.

Dufam, ze som to napisal zrozumitelne :)

Dakujem za rady.

Ondřej Kubíček
Člen | 494
+
0
-

pokud generuješ šablonu automaticky, stačí ti v php:

if ($user->isLoggedIn()) {
	$form->addText(...)
}

pokud manuálně vykresluješ šablonu, musíš přidat podmínku i tam:

<div n:if="$user->isLoggedIn()">
    <label>...
	<input ... >
</div>
vladimir.biro
Člen | 163
+
0
-

Ondřej Kubíček napsal(a):

pokud generuješ šablonu automaticky, stačí ti v php:

if ($user->isLoggedIn()) {
	$form->addText(...)
}

pokud manuálně vykresluješ šablonu, musíš přidat podmínku i tam:

<div n:if="$user->isLoggedIn()">
    <label>...
	<input ... >
</div>

To ze musim nejaku podmineku dat aj do sablony je mi viacmenej jasne. Slo mi skor o to, ci sa nada vlozit nejaka podmienka priamo suvisiaca s prvkom. Nieco ako:

<div n:if="$name">
	{label name}
	{input name}
</div>

… viem ze to takto nejde, ale nieco na ten sposob. Aby som do sablony s formularom vkladat dalsie premenne okrem formularu.

Editoval vladimir.biro (10. 12. 2018 18:03)

ali
Člen | 342
+
0
-

Ja v sablonach pouzivam

$form->offsetExists(input)
vladimir.biro
Člen | 163
+
0
-

ali napsal(a):

Ja v sablonach pouzivam

$form->offsetExists(input)

No super, presne toto som potreboval .. este som to sice neodskusal, ale verim tomu, ze by si si to nevymyslel a ze to bude fungovat :D

Dakujem.

CZechBoY
Člen | 3608
+
0
-

Ono se dá i přes $form->getComponent($inputName, false) !== null nebo array access, je víc cest jak se toho dopátrat.

vladimir.biro
Člen | 163
+
0
-

CZechBoY napsal(a):

Ono se dá i přes $form->getComponent($inputName, false) !== null nebo array access, je víc cest jak se toho dopátrat.

Dovolim si drobnu upravu:

$form->getComponent('inputName', false) !== null

Editoval vladimir.biro (11. 12. 2018 14:45)

vladimir.biro
Člen | 163
+
0
-

Otestoval som obe moznosti a obe funguju. SUPER. Dakujem.

Vlastny rozbor:

$form->offsetExists('input')

je vlastne

public function offsetExists($name)
{
	return $this->getComponent($name, false) !== null;
}

v containeri form controls

…čim ušetríme v šablóne jeden parameter, a trochu to pridá na prehladnosti HTML kódu.

Príklad použitia:

<div n:if="$form->offsetExists('name')">
	{label name}
	{input name}
</div>
David Matějka
Moderator | 6445
+
+4
-

offsetExists se vola pri pouziti isset na arrayaccess objekt. takze jeste v kombinaci s ifset makrem jde ten kod zjednodusit na

<div n:ifset="$form[name]">