Helper aplikovaný na control?

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

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

Co vím, tak tutonc nejde. Co ale jde, je tohle:

{block |helper}{control seznam}{/block}

Každopádně se musím přiznat, že to tvoje už jsem taky několikrát zkoušel a bral za samozřejmé, že to bude fungovat :-P

smi
Člen | 75
+
0
-

uestla napsal(a):

Co vím, tak tutonc nejde. Co ale jde, je tohle:

{block |helper}{control seznam}{/block}

Každopádně se musím přiznat, že to tvoje už jsem taky několikrát zkoušel a bral za samozřejmé, že to bude fungovat :-P

Díky guru, to chodí – jupíí :o)

Filip Procházka
Moderator | 4668
+
0
-

Něco mi říká, že takový helper by neměl být potřeba.

22
Člen | 1478
+
0
-

taky jsem chtěl napsat, proč to neřeší sám control, případně jeho šablona..?

uestla
Backer | 799
+
0
-

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

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)

uestla
Backer | 799
+
0
-

Tak v šabloně můžeš taky vykreslovat komponentu a při vkládání na hulváta aplikovat helper – neříkám, že k tomu dochází denně (ne-li častěji), ale ta možnost tu je…

Když už jsme ale konkrétně u indentu (což nebylo záměrem), tak tam jsou co vím textarea a pre elementy ošetřeny.

smi
Člen | 75
+
0
-

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.

redhead
Člen | 1313
+
0
-

Až na to, že se jmenuje Grudl!

uestla
Backer | 799
+
0
-

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

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)

22
Člen | 1478
+
0
-

@smi: to se dělá ale jinak:

$form = $this->getComponent('form');
$form['mySubmit']->getControlPrototype()->caption('NewCaption');

Editoval 22 (29. 8. 2011 17:24)

smi
Člen | 75
+
0
-

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)

22
Člen | 1478
+
0
-

jednou bude tlačítko ‚Vyřadit‘, jednou ‚Detail‘, … a nechce se mi pokaždé dědit novou třídu kvůli prkotině.

pak jsem si to asi blbě vyložil

uestla
Backer | 799
+
0
-

Opakuji: helper a jiná render metoda není totéž. Vraťme se k tématu, děkuji.

smi
Člen | 75
+
0
-

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

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

uestla
Backer | 799
+
0
-

„Zpravidla“ ne, to znamená výhradně a nikdy jinak. Jenomže jak již bylo psáno, tak legální je i {block |helper}{/block} a to se čas od času aplikovává i na větší HTML struktury. :-(