Šaboly – přepis bloků nefunguje

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

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

Chbox
Člen | 125
+
0
-

nevím, ale mám pocit, že je potřeba dát cestu k extend šabloně do úvozovek, matně si vzpomínam, že jsem s tím někde taky trávil čas:

{extends '@layout.phtml'}

Editoval Chbox (28. 2. 2011 14:42)

OK3
Člen | 91
+
0
-

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

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

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.

Chbox
Člen | 125
+
0
-

@newPope: je to potřeba i v dev, ale posledni 2 revize nemám, protože BC break getValues().

btw: možná by to chtělo opravit titulek :-) Šaboly → Šablony

Editoval Chbox (28. 2. 2011 17:30)

newPOPE
Člen | 648
+
0
-

@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…