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