Komponenty – vykreslení s různými šablonamy
- bluray
- Člen | 178
Dobrý den, chci se zeptat, jestli je možné měnit šablonu komponenty.
Například budu mít třeba ArticleControl který bude vracet články, jednou
budu chtít třeba jenom seznam nadpisů článků, potom třeba články
v tabulce…
Mám na to udělat více komponent například ArticleListControl nebo
ArticleTableControl nebo to může být v jedné?
mám metodu
public function render(){
$this->template->setFile();
}
Tak jak bych měnil tu šablonu?
Potom se chci zeptat co to vlastně komponenta je. může obsahovat
i nějakou logiku? například nějaký model?
Mám třeba takovouhle strukturu:
app/NejakyModul/controls/Article a tam soubory ArticleControl.php a
article.latte
Je komponenta jenom nějaká obsluha formuláře nebo může být ve složce
controls/Article i třeba model který by ukládal do db? Já si představuji
komponenty jako samostatně funkční miniaplikace…
Děkuji za rady :)
- Pavel Macháň
- Člen | 282
bluray napsal(a):
Dobrý den, chci se zeptat, jestli je možné měnit šablonu komponenty. Například budu mít třeba ArticleControl který bude vracet články, jednou budu chtít třeba jenom seznam nadpisů článků, potom třeba články v tabulce…
Mám na to udělat více komponent například ArticleListControl nebo ArticleTableControl nebo to může být v jedné?
mám metodupublic function render(){ $this->template->setFile(); }
Tak jak bych měnil tu šablonu?
Potom se chci zeptat co to vlastně komponenta je. může obsahovat i nějakou logiku? například nějaký model?
Mám třeba takovouhle strukturu:
app/NejakyModul/controls/Article a tam soubory ArticleControl.php a article.latte
Je komponenta jenom nějaká obsluha formuláře nebo může být ve složce controls/Article i třeba model který by ukládal do db? Já si představuji komponenty jako samostatně funkční miniaplikace…
Děkuji za rady :)
Prostě uděláš víc render metod
public function render(){
$this->template->setFile('default.latte');
}
public function renderOne(){
$this->template->setFile('one.latte');
}
public function renderTwo(){
$this->template->setFile('two.latte');
}
// latte
{control myComponent}
{control myComponent:one}
{control myComponent:two}
Editoval Pavel Macháň (8. 7. 2014 21:55)
- Jiří Nápravník
- Člen | 710
Komponenta může být (a i často je) jak píšeš funkční miniaplikace. Ale nějaká logika, jak píšeš z modelu, by měla být v modelu. Konkrétní příklad, co mě napadá – guestbook. Budeš tam chtít mít například formulář pro přidání, hlasování. Když přidáš nějaký komentář, tak formulář v komponentě sice zpracuješ, ale samotné přidání obstará model. To samé hlasování, v té komponentě budeš mít jen něco takového:
public function handleVote($id){
$this->facade->voteComment($id);//zavolá v podstatě jen model a samotné uložení bude tam
$this->redirect('this');
}
- Tomáš Votruba
- Moderator | 1114
@bluray Ano, tak jak píšeš. Model stačí uvést v konstruktoru a DI ji při kompilaci předá závislosti sám.
public function __construct(Facade $facade)
{
$this->facade = $facade;
}