Šaboly – přepis bloků nefunguje
- OK3
- Člen | 91
Hustone, máme problém :-)
Mám tři (čtyři) soubory, vše v jednom adresáři:
- @layout.phtml (prostě layout)
- index.phtml (vlastní stránka)
- (other.phtml (jiná stránka))
- filter.phtml (zde jsem si chtěl definovat nějaké bloky kódy, které chci zobrazovat ve stránce index.phtml nebo other.phtml
Nette: version 2.0-dev 9f535f9 released on 2011–01–10
@layout.phtml (zde přepisování z index.phtml funguje):
<html>
<head>...</head>
<body>
<div id="left">
{block left_col}default content{/block}
</div>
<div id="main">
{block main_cont}no content{/block}
</div>
</body>
</html>
index.phtml, other.phtml (nevkládá blok filter_a)
{extends @layout.phtml}
{block left_col}
{block filter_a}{/block} - nevloží blok 'filter_a', prostě tam zůstane prázdno, jak definuje tento blok
{*
{include #filter_a} - } - InvalidStateException: Cannot include undefined block 'filter_a'.
*}
{/block}
{block main_cont}
view-specific content
{/block}
filter.phtml:
{extends @layout.phtml} - nemá vliv
{extends index.phtml} - nemá vliv
{block filter_a}
...A
{/block}
{block filter_b}
...B
{/block}
Chtěl bych si v nějaké šabloně (filter.phtml) definovat bloky, které vkládám ne do layoutu, ale do šablon (index.phtml, other.phtml) rozšiřujících @layout.phtml. A nemůžu přijít na způsob, jak mít ty bloky definované v jednom souboru – jejich (pod)množinu – libovolně vkládat do ostatních šablon.
Poradí někdo? Díky
- OK3
- Člen | 91
Používám nejnovější verzi Nette, takže úvozovky (už asi) nejsou potřeba.. a problém tedy neřeší.
Náhodou jsem udělal chybu v souboru filter.phtml {entends '@layout.phtml'} a nic to nehlásilo, takže tento soubor jaksi není brán v potaz a to je jádro mého problému.
Prozatím jsem to vyřešil způsobem, že jsem si původní soubor filter.phtml rozdělil podle bloků na soubory a ty v jednotlivých šablonách vkládám pomocí {include}, ale vzhledem k tomu, že se vlastně jedná o jednu „komponentu“ (html + js), to není ideální řešení. Raději bych na různá místa šablon vkládal bloky z jediného souboru :-(
- newPOPE
- Člen | 648
Ale to normalne funguje ;-).
V poslednej verzii v download (nie dev) su " alebo ' potrebne… (tusim to pri vsetkom ze subor neexistuje resp zla cesta a pod hadze Vynimky)
Pride mi trochu divne dedit od viacerych, rozmyslam v „objektoch“ (asi zvyk ;-)).
pouzivam to napr. v ramci modulu takto
<?php
{extends '../@layout.phtml'}
?>
- OK3
- Člen | 91
newPOPE: Dobře, a jak bys vyřešil požadavek mít několik bloků v jednom souboru a vkládat si je na libovolná místa v šablonách (tedy layout nebo, i zároveň obyčejné views)?
PS: Nejspíš to bude způsobené tím, že používám šablony samostatně a renderuji „tu prostřední“ (index.phtml), která ví jen o layoutu.
- newPOPE
- Člen | 648
@OK3: riesim to tak, ze napr. layout ma „abstraktne bloky“ cize prazdne a tie prepisujem v sablonach nizsich. ty zrejme potrebujes par include`s a chces bloky v nich riadit jednou sablonou. O rieseni niecoho takeho neviem :-D nikdy ma to nenapadlo takto riesit a include sa vyhybat co to len ide kvoli snippetom…