Helper aplikovaný na control?
- smi
- Člen | 75
Chtěl jsem udělat vlastní helper, který bych aplikoval na control v šabloně.
{control seznam|Helper}
Ale nějak mi to nefunguje. Lze vůbec na control aplikovat vlastní helper?
(Samozřejmě to lze obejít – místo továrničky vytvořím control v renderu a předám si ho do šablony jako proměnnou a na tu helpery fungují. Jen by to bylo elegantnější přímo. Chci mít jen jednu třídu a drobné rozdíly dohánět při vykreslování a ne mít několik tříd odvozených od základní)
Jak se znám, tak určitě dělám někde chybu :o(
- uestla
- Backer | 799
Třeba jsem-li puntičkář a v @layoutu chci dodržet odsazení, přijde mi lepší mít
{control ahoj|indent:5}
než
{control ahoj}
a v template.latte komponenty
{block |indent:5}
obsah šablony
{/block}
Nemám teď ale na mysli úsporu místa, to ne, jen logiku. Když vkládám block, taky mohu ovlivnit výstup za pomoci helperu. Tak proč ne při vkládání komponenty?
- Filip Procházka
- Moderator | 4668
Já bych naopak chápal, kdybys zbytečné mezery chtěl odstranit :) Podívej se na takovej Google, ten si z validátorů ani úchylů na tabulátory těžkou hlavu nedělá :)
Já bych řekl, že to každopádně svoji logiku má. Srovnej povahu prvků „blok html kódu šablony“ a „komponenta“ u které nevíš, co ti z ní vyleze. Si představ takový formulář a v něm textarea s několikařádkovým obsahem. Odsazením naplácáš mezery i do toho formulářového prvku. Tfuj :)
Editoval HosipLan (26. 8. 2011 22:24)
- smi
- Člen | 75
uestla napsal(a):
Třeba jsem-li puntičkář a v @layoutu chci dodržet odsazení, přijde mi lepší mít
{control ahoj|indent:5}
než
{control ahoj}
a v template.latte komponenty
{block |indent:5} obsah šablony {/block}
Nemám teď ale na mysli úsporu místa, to ne, jen logiku. Když vkládám block, taky mohu ovlivnit výstup za pomoci helperu. Tak proč ne při vkládání komponenty?
Já tedy často říkám manželce ten Grundl je geniální,
ale teď jsem děsně ohromený.
Prolézal jsem zase dokumentaci k latte (ten helper se mi moc komplikuje) a
objevil jsem TOTO:
{control cartControl} pro celý košík na stránce
{control cartControl:small} pro malý náhledový košík
{control cartControl:small, $maxItems}
se přeloží jako
$control->getComponent('cartControl')->render();
$control->getComponent('cartControl')->renderSmall();
$control->getComponent('cartControl')->renderSmall($maxItems);
Což si myslím, že je zcela přijatelný kompromis hodný mistra. (Čímž si myslím, že končím Vaši diskusi smírem a zvoláním Grundl na Hrad!)
No fakt super.
- uestla
- Backer | 799
@smi:
Já lidem kolem také leccos říkám, jenže málokdy mě někdo pochopí – jak souvisí pan Helper s různými vykreslovacími metodami komponenty, hm? Toť otázka, možná ale pro jiné vlákénko :-'(
Nechci rozdmýchávat vášně, šlo mi vážně o to zvážit, zda by nebylo něco takového vhodné do Latte přidat (defaultně).
- smi
- Člen | 75
uestla napsal(a):
@smi:
Já lidem kolem také leccos říkám, jenže málokdy mě někdo pochopí – jak souvisí pan Helper s různými vykreslovacími metodami komponenty, hm? Toť otázka, možná ale pro jiné vlákénko :-'(
Nechci rozdmýchávat vášně, šlo mi vážně o to zvážit, zda by nebylo něco takového vhodné do Latte přidat (defaultně).
To mám ze ZendFramework – máš jeden datový model a pomocí dekorátorů se zobrazuje pokaždé jinak (jiné údaje, jiné barvy, jiný formulář, …) – zde jsem to chtěl pro vyhledávání v rúzných částech admin sekce – jednou bude tlačítko ‚Vyřadit‘, jednou ‚Detail‘, … a nechce se mi pokaždé dědit novou třídu kvůli prkotině.
Taky se omlouvám za zkomolení jména ⇒ oprava Grudl na Hrad :o)
- smi
- Člen | 75
22 napsal(a):
@smi: to se dělá ale jinak:
$form = $this->getComponent('form'); $form['mySubmit']->getControlPrototype()->caption('NewCaption');
Tuhle konkrétní věc samozřejmě dělám také takhle, ale ten helper se hodi na složitější věci.
Závěr: nepíše se to jak jsem očekával, tedy takhle:
{control test|helper}
Píše se to takhle:
{control test:jinyRenderer}
a to mi docela stačí (už mi admin „morfuje“, až se z něj kouří) :o)
Editoval smi (29. 8. 2011 17:52)
- smi
- Člen | 75
uestla napsal(a):
Opakuji: helper a jiná render metoda není totéž. Vraťme se k tématu, děkuji.
Tak s tím se samozřejmě nedá než souhlasit.
Jestli chceš hlasovat pro zavedení helperů i pro control, tak máš můj hlas :o).
Na druhé straně než se to stane, tak jsem spokojen s řešením přes jiný render.
Já si totiž myslím, že je blbost používat další
šablonovací systém, když jde všechno dohnat helpery (filtry a
dekorátory).
Taky už nemusím tvořit nějakou novou strukturu pro složitější
formuláře (něco ve smyslu TemplateRenderer) – prostě si jen udělám
nový render.
Samozřejmě se na mě po tomhle prohlášení sesype spousta opačných názorů, ale své aplikace si programuji sám :o)
Editoval smi (30. 8. 2011 12:05)
- Filip Procházka
- Moderator | 4668
Ještěže tady nefunguje demokracie a David si dělá co chce. Takovéhle věci bych tam opravdu nerad viděl jenom kvůli tomu, že několik lidí napsalo „+1“ :)
Helper z pravidla upravuje malý řetězec. HTML kód komponenty není malý řetězec. Tfujtajksl :P