Hallo leute,
ich hatte bisher immer vermieden in meinen Projekten eine Template Engine zu Benutzen. Aus vielen Beiträgen aus dem Forum sah ich dass viele es doch einsetzen. Nun dachte ich mir, es kann ja nicht schlecht sein, wenn selbst nikosch auf twig schwört
Jedoch erscheinen mir einige Dinge etwas unklar in verbindung von (H)MVC und Templates.
Ich habe mir 3 Templates engines angeschaut, Smarty,Twig,Mustache.
Alle haben eine Gemeinsamkeit in der doku:
soweit so gut.
Soweit ich es verstanden habe, sieht das MVC konzept vor dass Controller Daten aus dem Model liest, diese an das View übergibt und das View macht dann irgendwas damit, zb rendern.
Also wäre es doch die Aufgabe des Views ein Renderer zu instanzieren und die erhaltenen Daten vom Controller an den Renderer zu übergeben.
Soweit auch alles kein Problem. Der Controller bzw Action, bestimmt welches View/Model verwendet werden soll , tauscht daten zwischen Model und View aus und View tauscht daten mit renderer aus und der Renderer zeigt diese an.
Nun gibt es aber besonderheiten in den Template engines, sowas wie Block inheritance oder Partials.
d.h. also dass der Controller keine Kontrolle mehr über das Template hat. Das Template kann von sich aus bestimmen was noch zusätzlich angezeigt werden soll.
Also qausi das was ich vorher mit "Subviews" im Controller erledigt habe, übernimmt das Template. Nun ist die Frage wie man sowas hand haben sollte.
So wie ich es sehe, dient es dazu, eine komplette ansicht dann zu cachen(header,content,footer).
Der Richtige weg wäre also ein einziges View Objekt im Front Controller zu initialisieren und dieses View Objekt mit daten aus anderen Controllern zu füttern und in nach verarbeitung der Action das View rendern.
Das Problem ist, dass ich dann vom Controller aus nicht wirklich steuern könnte welche blocks gerade angezeigt werden sollten bzw ausgeblendet werden sollen. Auch müsste ich jedes mal das View mit weiteren daten füttern wenn der Designer mehr dinge agezeigt haben will.
Vielleicht kann mir ja hier jemand ein denkanstoß geben wie man am besten MVC mit Template Engine kombinieren kann. Vielleicht kann ja jemand aus seinen erfahrungen berichten.
Ich hatte es bisher immer so gemacht, dass ich im Front Controller ein template View erzeugt habe(header,footer,content) und statt partials, habe ich einfach ein Layout view erzeugt, das Layout konnte im Controller verändert werden. Angenommen für die Startseite brauchte ich einspalten layout, nach dem einloggen zweispalten Layout, bei errorpages wieder einspalten layout.
Wenn ich ein Ajax Controller aufgerufen habe, habe ich das template View deaktiviert damit beim Response header und footer nicht mitgesendet werden. bei JSON response habe ich dann ohne Layout gearbeitet.
Ich konnte halt alles direkt über Actions steuern.
Hoffe jemand hier kann mir ein paar nette links dazu posten
Viele Grüße,
BlackScorp
ich hatte bisher immer vermieden in meinen Projekten eine Template Engine zu Benutzen. Aus vielen Beiträgen aus dem Forum sah ich dass viele es doch einsetzen. Nun dachte ich mir, es kann ja nicht schlecht sein, wenn selbst nikosch auf twig schwört
Jedoch erscheinen mir einige Dinge etwas unklar in verbindung von (H)MVC und Templates.
Ich habe mir 3 Templates engines angeschaut, Smarty,Twig,Mustache.
Alle haben eine Gemeinsamkeit in der doku:
PHP-Code:
//Smarty
$smarty = new Smarty();
$smarty->assign('foo','bar');
$smarty->display('foobar.tpl');
//twig
$twig = new Twig_Environment($loader);
$twig->render('foobar.html',array('foo'=>'bar'));
//mustache
$mustache = new Mustache_Engine();
$mustage->render('foobar.mustache',array('foo'=>'bar'));
Soweit ich es verstanden habe, sieht das MVC konzept vor dass Controller Daten aus dem Model liest, diese an das View übergibt und das View macht dann irgendwas damit, zb rendern.
Also wäre es doch die Aufgabe des Views ein Renderer zu instanzieren und die erhaltenen Daten vom Controller an den Renderer zu übergeben.
Soweit auch alles kein Problem. Der Controller bzw Action, bestimmt welches View/Model verwendet werden soll , tauscht daten zwischen Model und View aus und View tauscht daten mit renderer aus und der Renderer zeigt diese an.
Nun gibt es aber besonderheiten in den Template engines, sowas wie Block inheritance oder Partials.
d.h. also dass der Controller keine Kontrolle mehr über das Template hat. Das Template kann von sich aus bestimmen was noch zusätzlich angezeigt werden soll.
Also qausi das was ich vorher mit "Subviews" im Controller erledigt habe, übernimmt das Template. Nun ist die Frage wie man sowas hand haben sollte.
So wie ich es sehe, dient es dazu, eine komplette ansicht dann zu cachen(header,content,footer).
Der Richtige weg wäre also ein einziges View Objekt im Front Controller zu initialisieren und dieses View Objekt mit daten aus anderen Controllern zu füttern und in nach verarbeitung der Action das View rendern.
Das Problem ist, dass ich dann vom Controller aus nicht wirklich steuern könnte welche blocks gerade angezeigt werden sollten bzw ausgeblendet werden sollen. Auch müsste ich jedes mal das View mit weiteren daten füttern wenn der Designer mehr dinge agezeigt haben will.
Vielleicht kann mir ja hier jemand ein denkanstoß geben wie man am besten MVC mit Template Engine kombinieren kann. Vielleicht kann ja jemand aus seinen erfahrungen berichten.
Ich hatte es bisher immer so gemacht, dass ich im Front Controller ein template View erzeugt habe(header,footer,content) und statt partials, habe ich einfach ein Layout view erzeugt, das Layout konnte im Controller verändert werden. Angenommen für die Startseite brauchte ich einspalten layout, nach dem einloggen zweispalten Layout, bei errorpages wieder einspalten layout.
Wenn ich ein Ajax Controller aufgerufen habe, habe ich das template View deaktiviert damit beim Response header und footer nicht mitgesendet werden. bei JSON response habe ich dann ohne Layout gearbeitet.
Ich konnte halt alles direkt über Actions steuern.
Hoffe jemand hier kann mir ein paar nette links dazu posten
Viele Grüße,
BlackScorp
Kommentar