Komponenta flashMessage / {control flashMessage}
- Tomáš Votruba
- Moderator | 1114
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)
- Filip Procházka
- Moderator | 4668
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
@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)
- Honza Marek
- Člen | 1664
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:
- sežene si komponentu
- prostuduje si, jak se s komponentou zachází
- napíše v presenteru továrničku
- napíše do šablony opět jednu (byť kratší než původně) řádku kódu
- Tomáš Votruba
- Moderator | 1114
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
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 | 224
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
awsickness napsal(a):
to stim ze nekde je nadpis nebo neni to nevadi pokud na to mas upravenou stranku.
Jak např.?
- Ani
- Člen | 226
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
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
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.
- Patrik Votoček
- Člen | 2221
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
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
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
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.