Komponenta flashMessage / {control flashMessage}

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

Diskuse ke komponentě FlashMessageControl


V rámci lenosti jsem se pokusil o nahrazení šablonovitého kódu pro flashMessage komponentou:

{control flashMessage}
<!-- <div n:foreach="$flashes as $flash" n:class="flash, $flash->type">{$flash->message}</div> -->

Nette by to mohlo obsahovat defaultně, když jde neustále o ten samý kód (jako je např. řešeno makro {form}).

Myšlenky, připomínky, kritiky? Ideálně od ještě větších lenochů :).

Editoval Schmutzka (10. 3. 2012 19:57)

uestla
Backer | 796
+
0
-

Fujky mujky, proč je HTML v kódu presenteru? Myslels na XSS?

Filip Procházka
Moderator | 4668
+
0
-

Evidentně nemyslel :)

Tomáš Votruba
Moderator | 1114
+
0
-

Co takto?

Elijen
Člen | 171
+
0
-

A nestaci na tohle obycejny include sablony? :-)

Filip Procházka
Moderator | 4668
+
0
-

Lepší. @**Elijen** měl dobrý nápad, ale takto se to bude trošku lépe invalidovat :)

Ještě bys tam mohl dát, aby si to flashky z rodiče vytáhlo samo. (ten kod je v UI\Control)

Editoval HosipLan (8. 3. 2012 7:49)

Tomáš Votruba
Moderator | 1114
+
0
-

@Elijen: Tam vidím problém v přemýšlení, v jaké složce se právě nacházím.

@HosipLan: Husté, díky. Příjemné zjednodušení.

Trochu jsem předělal možnost změnit typ elemetnu, viz úvodní příspěvek.

Editoval Schmutzka (8. 3. 2012 13:40)

Jan Jakeš
Člen | 177
+
0
-

Pokud chceš universální řešení, tak je otázka, jestli místo přidávání „ul“ a podobně neni lepší prostě komponentě přidat vlastní šablonu. Tu si pak snadno změníš. Jinak ten __construct už tam není potřeba, ne ;)

Honza Marek
Člen | 1664
+
0
-

Nechápu jak někdo může tvrdit, že si šetří práci tím, že místo zkopírování/napsání/nesmazání jedné řádky šablony udělá toto:

  1. sežene si komponentu
  2. prostuduje si, jak se s komponentou zachází
  3. napíše v presenteru továrničku
  4. napíše do šablony opět jednu (byť kratší než původně) řádku kódu
radas
Člen | 221
+
0
-

Taky mi to přijde zbytečné vzhledem k tomu, že flash messages renderuju jedním stylem v @layout.latte, tudíž na jednom místě v celé webové aplikaci.

Tomáš Votruba
Moderator | 1114
+
0
-

Juan napsal(a):

Pokud chceš universální řešení, tak je otázka, jestli místo přidávání „ul“ a podobně neni lepší prostě komponentě přidat vlastní šablonu. Tu si pak snadno změníš. Jinak ten __construct už tam není potřeba, ne ;)

Vidiš to, už je pryč. Díky. Mně stačí div, nevím jak to používáte vy (otázka), jen počítám s tím, že jsme různí.

Ke komponentě vlastní šablonu je imho zbytečné, pokud mi stačí změnit 2 znaky přímo v šabloně aplikace. Navíc na jedné stránce to mohu chtít tak a na druhé takto a už bych si musel vytvářet x speciálních šablon.

Honza Marek napsal(a):

Tak holt vypadá stavění frameworku :). Osobně odteď aplikuji pouze bod 4, továrnička bude v defaultním presenteru mého frameworku. I v BasePresenteru bych si s tím práci dal, jelikož fm často používám a čím méně kódu v šabloně, tím přehledněji.

radas napsal(a):

Taky mi to přijde zbytečné vzhledem k tomu, že flash messages renderuju jedním stylem v @layout.latte, tudíž na jednom místě v celé webové aplikaci.

Pro to bych řešení také nehledal, takový úchyl nejsem :). Jak třeba řešíš, když na jedné stránce nadpis máš, na druhé ne (a není tam univerzální proměnná), a flash message chceš renderovat pod nadpisem? (můj problém)

Editoval Schmutzka (8. 3. 2012 14:31)

awsickness
Člen | 98
+
0
-

radas napsal(a):

Taky mi to přijde zbytečné vzhledem k tomu, že flash messages renderuju jedním stylem v @layout.latte, tudíž na jednom místě v celé webové aplikaci.

takto to resim taky.

to stim ze nekde je nadpis nebo neni to nevadi pokud na to mas upravenou stranku.
tohle o tom spis ze vypisovat hlaseni je dobre na jedno misto jelikoz uzivatel vi kde hledat. pokud mu to das pokazde na jine misto prehledne chybu a myslis si ze neco nefunguje.

radas
Člen | 221
+
0
-

radas napsal(a):

Taky mi to přijde zbytečné vzhledem k tomu, že flash messages renderuju jedním stylem v @layout.latte, tudíž na jednom místě v celé webové aplikaci.

Schmutzka napsal(a):

Pro to bych řešení také nehledal, takový úchyl nejsem :). Jak třeba řešíš, když na jedné stránce nadpis máš, na druhé ne (a není tam univerzální proměnná), a flash message chceš renderovat pod nadpisem? (můj problém)

V tom případě bych asi includoval šablonu, pak už je to jedno zda napsat

{include 'flashMessages.latte'}

nebo

{control flashMessages}

navíc bych nepotřeboval v BasePresenteru tvořit továrnu na komponentu.

Editoval radas (8. 3. 2012 15:02)

Tomáš Votruba
Moderator | 1114
+
0
-

awsickness napsal(a):

to stim ze nekde je nadpis nebo neni to nevadi pokud na to mas upravenou stranku.

Jak např.?

22
Člen | 1478
+
0
-

Honza Marek napsal(a):

Nechápu jak někdo může tvrdit, že si šetří práci tím, že místo zkopírování/napsání/nesmazání jedné řádky šablony udělá toto:

+1

Editoval 22 (8. 3. 2012 17:03)

Etch
Člen | 403
+
0
-

Je pravda, že v těchto případech bych radši použil include šablony, jak píše radas , protože mi to přijde prostě jednoduší, než používání podobné komponenty.

Zas na druhou stranu, pokud takováhle komponenta někomu vyhovuje, tak proč ne.

Editoval Etch (8. 3. 2012 17:24)

Ani
Člen | 226
+
0
-

radas napsal(a):

V tom případě bych asi includoval šablonu, pak už je to jedno zda napsat

{include 'flashMessages.latte'}

Z toho můžeš ve větším projektu mít něco jako

{include '../../templates/flashMessages.latte'}

A to už tak skvělé není. Mě tenhle control rozhodně zbytečný nepřijde.

Honza Marek
Člen | 1664
+
0
-

Schmutzka napsal(a):

Tak holt vypadá stavění frameworku :)

Nejsem příznivcem „stavění frameworku“ za každou cenu. Pokud je to jen pro tebe, tak ok. Ale pokud budeš chtít po někom jinym, aby na tom vyvíjel, tak se bude muset seznámit s hromadou věcí, jejichž užitečnost nebude příliš vysoká.

Etch
Člen | 403
+
0
-

Ani napsal(a):

Z toho můžeš ve větším projektu mít něco jako

{include '../../templates/flashMessages.latte'}

A to už tak skvělé není. Mě tenhle control rozhodně zbytečný nepřijde.

I v tomto případě bych radši použil třeba

{include APP_DIR.'/templates/flashMessages.latte'}

ale jak jsem řekl, nejsem proti takovéhle komponentě. Pokud je pro někoho užitečná, tak nevidím jediný důvod, proč by jí neměl používat.

llook
Člen | 407
+
0
-

Já na vkládání opakujících se útržků také používám include. Co také jiného?

Spíš bych se bavil o nějaké best practice pro vkládání útržků, které se opakují napříč aplikací. Přepsat útržek z Latte do Nette\Utils\Html a zabalit ho do controlu mi jako best practice nepřijde.

Patrik Votoček
Člen | 2221
+
0
-

Honza Marek napsal(a):

Nechápu jak někdo může tvrdit, že si šetří práci tím, že místo zkopírování/napsání/nesmazání jedné řádky šablony udělá toto…

Mám taky komponentu na flashMessages a jsem za to rád nedávno jsem aktualizoval z Twitter Bootstrapu 1.x na 2.x a styl pro flashMessage jsem změnil v jendé šabloně. Místo abych musel psát script který by prošel všechny šalbony (>100) který by se postaral o změnu.

Továrničku na komponentu mám ve svém BaseControlu a BasePresenteru (tj přístupnou vždy kdy ji potřebuju.

Vpodstatě nic studovat nemusím:

protected function createComponentFlashMessages()
{
	return new \App\Components\FlashMessages;
}
{control flashMessages}

to je vše.

radas napsal(a):

Taky mi to přijde zbytečné vzhledem k tomu, že flash messages renderuju jedním stylem v @layout.latte, tudíž na jednom místě v celé webové aplikaci.

Protože nevyužíváš kontextově závislé flashMessages (uvnitř v komponentách) ale jenom na presenteru.

Ad {include ...} a {includeBlock ...} pořád mě připadá lepší než pokaždé přemýšlet kolik ../ napsat případně psát {includeBlock ''.APP_DIR.'/templates/blocks.latte'}{include #flashMessages} napsat pouhé a prosté {control flashMessages}

Schmutzka napsal(a):

Nette by to mohlo obsahovat defaultně, když jde neustále o ten samý kód (jako je např. řešeno makro {form}).

Nesoulasím tohle je ideální věc do addons.

Tomáš Votruba
Moderator | 1114
+
0
-

Patrik Votoček napsal(a):

Továrničku na komponentu mám ve svém BaseControlu a BasePresenteru (tj přístupnou vždy kdy ji potřebuju.

Konečně nějaký zastánce, díky :).
Chtěl jsem se kouknout, jak to máš v Nelle, ale na Gitu jsem ji nenašel. Je někde jinde?

Patrik Votoček napsal(a):

Nesoulasím tohle je ideální věc do addons.

EDIT: Tak je to tam

Editoval Schmutzka (10. 3. 2012 19:56)

awsickness
Člen | 98
+
0
-

jen me napadlo male vylepseni. Nevim zda si premyslel nad multijazycnosti zda by stalo a to bud primo do te komponenty dat moznost aby se messages prekladaly. A nebo predpokladas rovnou ze tam chodi jiz lokalizovane zpravy ?

Tomáš Votruba
Moderator | 1114
+
0
-

awsickness napsal(a):

jen me napadlo male vylepseni. Nevim zda si premyslel nad multijazycnosti zda by stalo a to bud primo do te komponenty dat moznost aby se messages prekladaly. A nebo predpokladas rovnou ze tam chodi jiz lokalizovane zpravy ?

Díky za tip. To bych asi spíš řešil obecněji. Co když budu někde chtít vypsat zprávu jinak než touto komponentou.