Header Control jako persistentní komponenta? Jak na to?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
umrlec
Člen | 56
+
0
-

Zdravím,

napsal jsem si vlastní HeaderControl, komponentu pro vytváření hlavičky stránky, mohl jsem použít již hotovou (https://forum.nette.org/…ml-hlavickou), nicméně s Nette začínám a chci si ho trochu osahat sám.

Takže mám komponentu … (zkráceno)

<?php
class HeaderControl extends Nette\Application\Control
{
	// Mám tu nějaké vlastnosti ...
	private $websiteTitle;
	private $author;
	private $copyright;
	private $description;
        // ...

        // A nějaké metody ...
	public function setWebsiteTitle($title)
	{
        	$this->websiteTitle = $title;
	}

        public function setAuthor($author)
	{
		$this->author = $author;
	}
	// ...
?>

Komponentu pak vytvářím v abstraktní třídě BaseFrontendPresenter z níž dědí ostatní presentery v modulu Frontend.

<?php
abstract class BaseFrontendPresenter extends \BasePresenter
{
	public function createComponentHeader()
	{
		$header = new \HeaderControl($this, 'header');
    		$header->setWebsiteTitle('Název stránky');
    		$header->setAuthor('Moje jméno');
    		$header->setCopyright('Copyright (c) 2010, Moje jméno');
    		$header->setFavicon('favicon.ico');
    		$header->setCharset('utf-8');

    		return $header;
	}
}
?>

No a chci, abych mohl ke komponentě přistupovat právě z těch ostatních presenterů, které dědí z BaseFrontendPresenter. Mělo by to fungovat tak, aby vlastnosti HeaderControl, které nastavuji při vytváření komponenty v BaseFrontendPresenter, zůstávaly nezměněny a já bych v každém dědícím presenteru pouze u již vytvořené komponenty měnil titulek stránky, popisek, klíčová slova atd. podle potřeby konkrétního presenteru, nejspíš v metodě beforeRender(). Myslím, nejsem si jist, že by HeaderControl měla být tedy nastavena jako persistentní komponenta, ale vůbec nevím jak na to, v dokumentaci jsem našel jenom krátkou zmínku, ze které jsem to nepochopil…

Poradíte?

Aurielle
Člen | 1281
+
0
-

Nestačilo by volat něco typu $presenter['header']->setXxx('...'); ?

umrlec
Člen | 56
+
0
-

Vypadá to, že ne

Call to a member function setAuthor() on a non-object
umrlec
Člen | 56
+
0
-

Takhle to funguje (Díky!)

<?php
public function  beforeRender() {
    parent::beforeRender();

    $this['header']->setPageTitle('Název stránky');
  }
?>