Menu v @layout.latte pomocí MySQL
- lamer94
- Člen | 4
Dobrý den,
v Nette jsem začal dělat teprve nedávno a tak s ním ještě nemám tolik
zkušeností. Mým úkolem je nyní vytvořit menu (navigaci) na stránce,
které se bude zobrazovat na každé stránce. Pro menu chci dále udělat
i UI, kde budu moci jednoduše editovat položky v menu a tak jsem byl nucen
využít sql databáze.
Vytvořil jsem si jednoduchý MenuPresenter:
<?php
namespace App\Presenters;
use Nette,
App\Model;
/**
* Menu presenter.
*/
class MenuPresenter extends BasePresenter
{
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function renderMenu()
{
$this->template->menuItems = $this->database->table('menu');
}
}
K presenteru jsem samozřejmě vytvořil i menu.latte
{block #menuTop}
{foreach $menuItems as $menuItem}
<li><a n:href="{$menuItem->link}">{$menuItem->title}</a></li>
{/foreach}
{/block}
Nyní však potřebuji aby se toto menu zobrazovalo na všech stránkách a tak pokud správně chápu, bych ho měl přidat do @layout.latte. V tom je ale ta chyba, že mi to nejde, ať už jsem zkoušel jakýkoliv způsob.
Za každou radu budu rád.
Děkuji
- Matey
- Člen | 142
na menu použi komponentu nie presenter a potom ju načítaj
v BasePresenter
asi takto + uprav namespace
MenuControl.php
<?php
use Nette\Application\UI\Control;
class MenuControl extends Control
{
/** @var Nette\Database\Context */
private $database;
public function __construct(Nette\Database\Context $database)
{
parent::__construct();
$this->database = $database;
}
public function render()
{
$template = $this->template;
$template->setFile(__DIR__ . '/MenuControl.latte');
$template->menuItems = $this->database->table('menu');
$template->render();
}
}
?>
MenuControl.latte
{foreach $menuItems as $menuItem}
<li><a href="{plink $menuItem->link}">{$menuItem->title}</a></li>
{/foreach}
BasePresenter.php
<?php
/** @var Nette\Database\Context */
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
protected function createComponentMenu()
{
$menu = new App\MenuControl($this->database);
return $menu;
}
?>
nakoniec v layoute vykreslíš:
{control menu}
snáď som sa nikde nesekol
edit: myslím že n:href v komponente nepôjde, nato je makro {link} alebo {plink}, to už nvm čo máš za odkaz v tej db, či na prezenter alebo linky.. viac si prečítaj v dokumentácii
Editoval Matey (27. 4. 2014 21:52)