Postranní sloupec – komponenta neexistuje, BasePresenter
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- obud
- Člen | 15
Dobrý den,
na všech stránkách webu potřebuji postranní sloupec, který bude data načítat z DB.
Vytvořil jsem si tedy komponentu s názvem ‚sidebar‘ v souboru app/components/SidebarControl.php:
<?php
use Nette\Application\UI\Control;
class SidebarControl extends Control
{
public function render()
{
$template = $this->template;
$template->setFile(__DIR__ . '/sidebar.latte');
// ...
$template->render();
}
}
?>
A v souboru app/presenters/BasePresenter.php mám:
<?php
use Nette\Application\UI\Presenter;
abstract class BasePresenter extends Presenter
{
protected function createComponentSidebar()
{
$control = new \SidebarControl;
return $control;
}
}
?>
Do souboru @layout.latte jsem uvedl kód:
{control sidebar}
.
Narazil jsem ale na problém. Tracy mi stále hlásí, že komponenta neexistuje. Component with name ‚sidebar‘ does not exist.
Pročetl jsem všechno možné, z dokumentace, z fóra, jecas.cz… Vůbec ale netuším, co dělám špatně.
Pokud ale obsah BasePresenteru vložím např. do HomepagePresenteru, komponenta funguje (samozřejmě pouze na úvodní stránce).
Ondřej
- obud
- Člen | 15
Takhle vypadá soubor app/presenters/HomepagePresenter.php, pokud do něj vložím obsah BasePresenteru:
<?php
namespace App\Presenters;
use Nette;
class HomepagePresenter extends Nette\Application\UI\Presenter
{
/** @var Nette\Database\Context **/
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function renderDefault()
{
$homePage = $this->database->table('configuration')
->where('name = ?', 'home_page')
->fetch();
$this->template->page = $this->database->table('pages')
->get($homePage->value);
}
protected function createComponentSidebar()
{
$control = new \SidebarControl;
return $control;
}
}
?>