Přenášení bloků v šabloně

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

Dobrý den, udělal jsem si šablonu, která přes rekurzi vypíše strom a kterou includuji na více místech v aplikaci. Zjistil jsem ale, že bych potřeboval přidat tlačítko na smazaní položky, které bude jen v jednom stromu v aplikaci. Je možné přenášet bloky přes makro include, nebo existuje nějaký jiný způsob? Děkuji

Šablona

{var $tree}
{var $actions}

{block #tree}
	{foreach $tree as $item => $parents}
		<li>
			{$item}
			<span align="right">{$actions}</span>
		</li>

		{if $parents != null}
			<ul>
				{include #this, tree => $parents}
			</ul>
		{/if}
	{/foreach}
{/block}

Strom

{block #actions}
	<a href="delete!"><img src="delete.png" /></a>
{/block}

{include '../templates/Tree.latte', tree => $tree, actions => #actions}

Editoval Pan Dobrman (30. 7. 2012 22:02)

Aearsis
Člen | 57
+
0
-

Můžeš udělat tohle:

Šablona

{var $tree}
{var $actions}

{block #tree}
	{foreach $tree as $item => $parents}
		<li>
			{$item}
			{block #actions}{/block}
		</li>

		{if $parents != null}
			<ul>
				{include #this, tree => $parents}
			</ul>
		{/if}
	{/foreach}
{/block}

Strom

{block #actions}
	<span align="right"><a href="delete!"><img src="delete.png" /></a></span>
{/block}

{include '../templates/Tree.latte', tree => $tree}
Pan Dobrman
Člen | 45
+
0
-

Děkuji, ale toto mi bohužel nefunguje. Blok se vykreslí, bohužel jen jednou a mimo strom.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Úplně nechápu, co je která šablona (co je Tree.latte?), každopádně blok lze definovat i pomocí makra {define} (se stejnou syntaxí jako {block}), které ho ale v místě definice nevykreslí.

llook
Člen | 407
+
0
-

Udělej to tak, jak píše Aearsis, akorát místo {include '../templates/Tree.latte', tree => $tree} použij {includeblock '../templates/Tree.latte', tree => $tree}.

Pan Dobrman
Člen | 45
+
0
-

Děkuji, vše už funguje jak má. Měl bych ale ještě jeden dotaz – je možné získat hodnotu proměnné $item z šablony Tree.latte do jiné šablony? Zkoušel jsem použít makro define, ale dostávám chybu „Undefined variable: item“. Jde mi o to, že chci v bloku actions v signálech používat proměnnou $item.

Tree.latte

{var $tree}
{var $actions}

{block #tree}
        {foreach $tree as $item => $parents}
                <li>
                        {$item}
			{define #item}{$item}{/define} //Undefined variable: item
                        {block #actions}{/block}
                </li>

                {if $parents != null}
                        <ul>
                                {include #this, tree => $parents}
                        </ul>
                {/if}
        {/foreach}
{/block}

Menu.latte
{define #actions}
{include #item}
{/define}

{include ‚../templates/Tree.latte‘, tree ⇒ $tree}

Pan Dobrman
Člen | 45
+
0
-

Děkuji, vše už funguje jak má. Měl bych ale ještě jeden dotaz – je možné získat hodnotu proměnné $item z šablony Tree.latte a použít jí v jiné šabloně? Zkoušel jsem použít makro define, ale dostávám chybu „Undefined variable: item“. Jde mi o to, že chci v bloku actions v signálech používat proměnnou $item.

Tree.latte

{var $tree}
{var $actions}

{block #tree}
        {foreach $tree as $item => $parents}
                <li>
                        {$item}
			{define #item}{$item}{/define} //Undefined variable: item
                        {block #actions}{/block}
                </li>

                {if $parents != null}
                        <ul>
                                {include #this, tree => $parents}
                        </ul>
                {/if}
        {/foreach}
{/block}

Menu.latte

{define #actions}
	{include #item}
{/define}

{include '../templates/Tree.latte', tree => $tree}
Šaman
Člen | 2666
+
0
-

Myslím, že to nejde. Proměnnou můžeš předat do includované šablony ($tree), ale interní proměnná té šablony zůstává platná jen pro ni.

V Tree.latte můžeš do bloku #actions předat $item.
Z Menu.latte se ale k žádné $item nedostaneš.