Render metoda pro vloženy latte subor
- Baski
- Člen | 12
Č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
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
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
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.