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

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

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 :)

Jan Endel
Člen | 1016
+
0
-

Přímo z routeru do šablony je bohužel nedostaneš, je zapotřebí to prohnat presenterem.

Robin Martinez
Člen | 89
+
0
-

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ášť?

Jan Endel
Člen | 1016
+
0
-

Ukaž čeho chceš cca dosáhnout a něco vymyslíme :-).

Robin Martinez
Člen | 89
+
0
-

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

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

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

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

Robin Martinez
Člen | 89
+
0
-

hoho, to je přesně ono!

Mockrát děkuji :))