Block rovnaký pre všetky šablony
- Danndy
- Člen | 35
Zdravím vás!
S nette začínam a mam otázku.
Moj web bude mať nasledovnu kostru:
<header block>
<content block>
<footer block>
Blok content bude v každej šablone iný, takže každá šablona bude mať svoj content blok. Ale blok header a footer bude na každej stránke rovnaky a blok header bude obsahovať aj uživatelské menu ktore potrebuje údaje z DB. Ako teda spraviť to aby tie dva bloky boli na každej stránke rovnaké a nemusel som ich robiť v každom presentery ?
- Vojtěch Dobeš
- Gold Partner | 1316
Použij blok header
a footer
jen v layoutu, a
vůbec je nezmiňuj v šablonách presenterů.
- Danndy
- Člen | 35
duke napsal(a):
Úplně stejně jako v jakémkoli jiném presenteru. Tj. injektneš si tam službu, která připojení k databázi řeší a tuto službu pak používáš v metodách presenteru. Toho lze dosáhnout několika způsoby. Ten nejsnadnější (pomocí anotace @inject) je popsán v dokumentaci zde.
Dik za odpoveď.
Niečo som skúšal, ale bez úspešne. Napr. v HomepagePresenteru sa k db
pojím tak ako to bolo v ukážkovom príklade z dokumentácie:
<?php
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
?>
V BasePresenteri nebolo nič a ja som tam len pridal metóru afterRender(){} a keďže je BasePresenter abstract class predpokladam že sa tam na DB nepripojim ako v HomepagePresenteri.
Mohol by si mi trocha pomocť stým kódom ako to pripojenie injektujem? Diky
- Danndy
- Člen | 35
Mysteria napsal(a):
Normálně do BasePresenteru dej
/** @var \Nette\Database\Context @inject */ public $database;
a budeš mít databázi dostupnou v každým presenteru (který dědí od BP, samozřejmě). To, že to je abstraktní třída nevadí.
Funguje ! A pritom to bolo take jednoduché.. Ďakujem Ti moc krát :)