Zděděný block nevidí na proměnné původního blocku
- mcmatak
- Člen | 504
Dědění bez proměnných? Má to význam?
mám obecnou šablonu pro manuální vykreslení formuláře, je už hodně chytrá a fungovala v 095, ale teď se snažím portovat do nette 2
<?php
např. vykreslení group
{foreach $groups as $group}
{block #group}
.....hodně věcí
{/block}
{/foreach}
?>
a teď potřebuji něco málo upravit jen třeba pro konkrétní místo v konkrétní šabloně takže podědím
<?php
{extends '../../@edit.latte'}
{block #group}
{if $group->options['label'] == "Bankovní účty"}
... takžře tohle si vykreslím podle svého
{else}
{include #parent}
{/if}
{/block}
?>
ale problém je, že proměnná group není známá! jakto? 095 fungovalo normálně, k čemu je dědění pokud nemůžu použít proměnné co rodič?
asi souvisí s tímto tématem
https://forum.nette.org/…lni-promenne
dodatek:
problém je v
{include #parent}
ale ve většině případů prostě neznám názvy okolních proměnných, jak je předat?
Editoval mcmatak (23. 1. 2012 0:37)
- mcmatak
- Člen | 504
zatím jsem řešil tak, že jsem prošel všechny šablony v mém případě jsou to stovky šablon a přidal k
{include #parent}
všechny proměnné, radost je když jsem zjistil, že originál potřebuje přidat další proměnnou, takže to znamená vše znovu projít a hlavně vůbec si tohle uvědomit to je věc
navíc někde, kde jsou dva řádky nějakého kódu musíte přemýšlet odkud to je a přidávat tam proměnné, které vůbec nepotřebujete a programátor nezná, přijde mi to docela divné
jak se to píše, nechceš se na to d.g. podívat a zamyslet jeslti si to vymyslel dobře? řešit dg
Editoval mcmatak (23. 1. 2012 19:55)
- petr.pavel
- Člen | 535
No já nevím, spíš bych řekl, že to je fíčura, ne chyba. To, že ti stojí v cestě, bude tím, že nepřemýšlíš ve stylu Nette. Řešením tedy bude vymyslet strukturu tvých šablon tak, aby všechny nepotřebovaly znát všechny proměnné, které v nějaké z nich použiješ.
A kdybys potřeboval fakt někam předat hromadu parametrů, můžeš použít pole.
- Filip Procházka
- Moderator | 4668
@**petr.pavel**: uniká ti ovšem fakt, že ve verzi 0.9 to fungovalo. Tato feature byla tedy odstraněna a byla docela drsně porušena zpětná kompatibilita, rozhodně to tedy není „fíčura“.
Pokud to ovšem David udělal záměrně (a to pravděpodobně udělal), tak nemá moc význam se o tom bavit dál.
- mcmatak
- Člen | 504
define sem nepochopil to je asi neco jineho
a co se týče záměru davida, no ok, pokud vezmeš v úvahu odkazovaný příklad se zanořením blocku tak tam to chápu, ale sleduj
{include #parent} je trochu jiná hra
jde o to že každá změna rodiče nutí potomky sledovat co má rodič za parametry a předávat je, takže jedna nevinná změna v rodiči, naprosto nepodstatná pro všechny potomky znamená změnit i všechny potomky, prostě potomek řídí rodiče a to je blbost
- Filip Procházka
- Moderator | 4668
Sice je to asi hack… ale napadá mě
{include #group, (expand)get_defined_vars()}
- David Grudl
- Nette Core | 8228
{include #parent} by mělo přenášet okolní proměnné. Co přesně nefunguje? Pošli sem kdyžtak příklad.