Komponenta pro drobečkovou navigaci
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- radekBrno
- Člen | 61
Zdravím,
vytvořil jsem si komponentu pro drobečkovou navigaci:
use Nette\Application\UI\Control;
class Breadcrumb extends Control {
public $links = array();
public function render() {
$this->template->setFile(__DIR__ . '/breadcrumb.latte');
$this->template->links = $this->links;
$this->template->render();
}
public function addLink($text, $link, $title = null) {
$this->links[] = array(
'text' => $text,
'link' => $link,
'title' => $title
);
}
}
V presenteru ji pak volám takto:
class HomepagePresenter extends BasePresenter {
protected function createComponentBreadcrumb() {
$control = new Breadcrumb();
$control->addLink(
$this->translator->translate('homepage.breadcrumb.text'),
$this->link("Homepage:default"),
$this->translator->translate('homepage.breadcrumb.title')
);
return $control;
}
}
Občas má presenter dvě render metody → potřebuji dvě drobečkové navigace. Napadlo mě, že bych v rámci presenteru vytvořil pole a to pak předal komponentě, ale moc se mi to nelíbí. Existuje lepší způsob? Díky za radu.
Editoval radekBrno (6. 10. 2014 23:18)
- Tharos
- Člen | 1030
Můžeš to vyřešit snadno třeba tak, že drobečkovou navigaci donastavíš v každé action metodě:
public function actionDefault()
{
$this['breadcrumb']->addLink(...);
}
Mimochodem, proč má ta proměnná $links
v
Breadcrumb
viditelnost public
? :)
A ještě jeden tip, v aktuálním Nette můžeš tu render metodu v komponentě zjednodušit:
public function render() {
$this->template->links = $this->links;
$this->template->render(__DIR__ . '/breadcrumb.latte');
}
Metodě Template::render
lze
předat cestu k souboru s šablonou.
Editoval Tharos (7. 10. 2014 0:10)