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
+
0
-

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

CZechBoY
Člen | 3608
+
+1
-

Nedědíš HomepagePresenter od něčeho jiného než tento BasePresenter?

obud
Člen | 15
+
0
-

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;
	}


}
?>
CZechBoY
Člen | 3608
+
+1
-

jj dedis ho od Nette Presenter, nikoliv od tvyho BasePresenter.
Precti o dedeni a oop celkove.

ps. ted te zajima klicove skovo extends

Zuben45
Člen | 268
+
0
-

přesně tak,

pro úplnost

class HomepagePresenter extends BasePresenter

samozřejmě BasePresenter musí být ve stejném namespace, jinak použij celý název namespace nebo přes use.

obud
Člen | 15
+
0
-

Děkuji!