Jak nejlépe vytvořit proměnnou v routeru a zobrazit ji až v šabloně?

- Robin Martinez
 - Člen | 89
 
Zdravím, zkouším to ještě v české verzi fóra.
Stavím si vlastní router, ve kterém z databáze tahám metatagy, které potřebuji až zobrazit v šabloně, tedy nepotřebuji je prohánět žádným presenterem.
Zajímalo by mě, jestli je to nějak rozumně možné a zda-li by mě někdo postrčil. V nette dělám chvíli a nebudu lhát – i v PHP jsem již nějakou dobu nedělal
Velice děkuji za radu :)

- Robin Martinez
 - Člen | 89
 
hmm, hmm, toho jsem se bál.
A je možné to dělat přes nějaký děděný basepresenter, nebo musím u každého zvlášť?

- Robin Martinez
 - Člen | 89
 
Jde o to, že mám rotuer založený na tabulce, kde jsou informace:
url, alias a seokraviny jako (h1, title, description, keywords)
takže řádek tabulky vypadá třeba takhle:
| url | alias | h1 | title | description | keywords | 
| front.home/default | o-nas | Hlavní titulek | Vítejte na mým úžasným blogýsku | Děláme do webů | web, website, other keywords | 
router tak dynamicky překládá mezi sloupci url a alias a zároveň při požadavku tahá zbylá SEO data, která jen potřebuju zobrazit v layoutu šablony :)

- Jan Endel
 - Člen | 1016
 
tak můžeš mít něco takovéhoto:
class StaticPresenter
{
	private $factory
	public function __construct(PageFactory $factory)
	{
		$this->factory = $factory;
	}
	public function renderDefault($slug)
	{
		$page = $this->templateFinder->getPageData($slug);
		$this–>template->description = $page->description;
		// ....
	}
}
class PageFactory extends Nette\Object
{
	//injectovani naky databaze
	public function getPageData($slug)
	{
		//navrat z db podle slugu
	}
}
				
- Robin Martinez
 - Člen | 89
 
No, jasně, tak to víceméně dělám teď (jestli jsem tvůj příklad dobře pochopil) a to tak, že si presenter ta data tahá sám.
Ale pak když tam bude třeba 5 presenterů, tak budu dělat v každém to samé a zbytečně se opakovat?
Já ta SEO data už teď můžu každému presenteru poslat a v každém presenteru nastavit nějaké
$this->template->seoData = $pole_dat_z_rotuteru;
jen mi to přijde zbytečné a myslel jsem, že to budu nějak moct zjednodušit… Ale třeba jen vymýšlím kolo :D

- japlavaren
 - Člen | 404
 
mozes pouzit spolocny presenter, v nom metodu startup (createTemplate, beforeRender) a v nej si naplnit data z routeru do sablony. prezenter ma metodu $this->getParam(„name“) pomocou ktorej si vytiahnes potrebne z routy