Problém s include

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

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

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

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>&nbsp;</ins>Root node</a>
                        <ul>
                                <li id="li_2" rel="node-type">
                                        <a href="#"><ins>&nbsp;</ins>Child node</a>
                                </li>
                        </ul>
                </li>
                <li id="li_3" rel="node-type">
                        <a href="#"><ins>&nbsp;</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>&nbsp;</ins>{$item->nazevMenu}</a>
                    {if count($item->getComponents())}
                            {include #menu, 'sekce' => $item->getComponents(), 'counter' => $counter}
                    {/if}
            </li>
            {/foreach}
        </ul>
        {/block}
    </div>
?>
Oggy
Člen | 306
+
0
-

asi to trošku zapadlo.. tak se znovu ptám..nějaký nápad? děkuju

Jod
Člen | 701
+
0
-

skús niečo ako {?$presenter->template->counter = 100}

Editoval Jod (11. 1. 2010 13:02)

Oggy
Člen | 306
+
0
-

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)