Problém s include
- raketoplan2005
- Člen | 147
Zdravím,
mám problém s „nefungujícím“ include.
Mám kód:
{foreach $menu as $item}
{include "LinksType.phtml"}
a do toho LinksType bych rád dal nějaký IF, který přiřadí parametry pro volání presenteru podle hodnoty.
{if $item['menuTypeId'] == 1}
{assign $pres "Default:textItem"}
{assign $id $item['relationId']}
{elseif $item['menuTypeId'] == 2}
{assign $pres "Topic:default"}
{assign $id $item['id']}
Include bych chtěl proto, aby se změna prováděla vždy jen na jednom místě. Jenže soubor po includu hlásí že nemůže nalézt item, použil jsem tedy zachytávání proměnných, to projde, ale zase se neassignuje ta proměnná :(
Díky za pomoc.
Editoval raketoplan2005 (29. 5. 2009 23:13)
- David Grudl
- Nette Core | 8228
Obecně je lepší se v šablonách vyvarovat složitější logiky, ta by měla být v presenteru,
Do inkludovaného skriptu se dají vložit parametry takto
{include "LinksType.phtml" 'param' => $val, 'param2' => $val2}
.
Inkludovaný skript běží v odděleném prostoru, takže zde přiřazené
parametry se nemohou objevit jako lokální parametry v nadřazeném skriptu.
Ale dají se získat ze šablony {$template->pres}
.
- Oggy
- Člen | 306
mám podobný možná stejný dotaz..ale bohužel jsem nějak nepřišel na to jak z includu přenést proměnou do nadřazeného bloku..
je potřeba aby každý list, aby měl své id…takto:
<?php
<ul>
<li id="li_1" rel="node-type">
<a href="#"><ins> </ins>Root node</a>
<ul>
<li id="li_2" rel="node-type">
<a href="#"><ins> </ins>Child node</a>
</li>
</ul>
</li>
<li id="li_3" rel="node-type">
<a href="#"><ins> </ins>Root node</a>
</li>
</ul>
?>
..můj template .. tam je problém s tím, že do includované šablony se counter přenese.. ale nadřazené šablona již změněnou hodnotu nezná..
<?php
<div class="tree">
{assign $sekce $control->getComponents()}
{assign $counter 0}
{block #menu}
<ul>
{foreach $sekce as $item}
{? $counter += 1}
<li id="li_{$counter}"><a href="#"><ins> </ins>{$item->nazevMenu}</a>
{if count($item->getComponents())}
{include #menu, 'sekce' => $item->getComponents(), 'counter' => $counter}
{/if}
</li>
{/foreach}
</ul>
{/block}
</div>
?>
- Oggy
- Člen | 306
Jod napsal(a):
skús niečo ako
{?$presenter->template->counter = 100}
.. vlastníkem šablony není presenter, ale komponenta .. Teda to jsem si myslel..ale $control->template je prázdný.. asi bude problém zde ..
kód komponenty:
<?php
/**
* Render
*/
public function render() {
$this->createTemplate()
->setFile(dirname(__FILE__) . "/webStructure.phtml")
->render();
}
?>
nebo ne? ..
Editoval Oggy (11. 1. 2010 15:13)