Render metoda pro vloženy latte subor

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

Čaute mám vytvoreny sidebar.latte. Tento latte subor includujem vo viacerých iných templatoch.
Zatial je tam všetko písané staticky.
našiel som že

<?php
{include sidebar.latte, foo => $params['foo'], bar => $params['bar']}
?>

To by som musel vždy v konkretnej metode vytahovat veci z db. Skúšal som vytvoriť
HomepagePresenter.php

<?php
 public function renderSidebar(){
        $this->template->city = $this->database->query('SELECT users.city,count(trade.id) as num FROM trade JOIN users ON(trade.username=users.id) GROUP BY users.city');
    }
?>

so sidebar.latte nachádza sa v zložke Homepage

<?php
<div class="sidebar">
    <p>Mestá</p>
    <div>
        <div n:foreach="$city as $c">
            <p>{$c->city} ({$c->num})</p>
        </div>
    </div>
    <p></p>
    <div></div>
</div>
?>

Avšak to mi vyhodilo Undefined variable: city
Je nejaký spôsob ako renderovať túto čast templatu samostatne ?

Tomáš Votruba
Moderator | 1114
+
+2
-

Vytvoř si komponentu sidebar a přesuň logiku tam.

Pak ji můžeš kdekoliv vypsat pomocí:

{control sidebar}

Editoval Tomáš Votruba (5. 7. 2014 0:34)

Baski
Člen | 12
+
0
-

Chápem dobre, teda že si vytvorím funkciu public function createComponentSidebar()
s telom niečo ako <?php
$template = $this->template;
$template->setFile( ‚../templates/Homepage/sidebar.latte‘);
// vložíme do šablony nějaké parametry
$template->param = $this->database->query(‚SELECT users.city,count(trade.id) as num FROM trade JOIN users ON(trade.username=users.id) GROUP BY users.city‘);
// a vykreslíme ji
$template->render(); ?>

Tomáš Votruba
Moderator | 1114
+
0
-

Přesně tak. Zkus ji vytvořit včetně šablony. Pokud ti něco nepůjde, ptej se.
Inspirovat se můžeš na příkladu minisite

Kód v komentářích zkus obarvovat, lépe se to čte.

Baski
Člen | 12
+
0
-

Okey vykresluje mi komponentu na hlavnej stránke (HomepagePresenter). Avšak ako spravím s tej componenty sidebar globálnu komponentu ?
Edit: Vyriešene vložim som vytvorenie componenty do BasePresenter

Editoval Baski (5. 7. 2014 17:31)

Tomáš Votruba
Moderator | 1114
+
0
-

Skvele, tak to ma byt.