-
31.08.2010
Zend Framework mit Smarty verbinden
Der Entwickler Moo hat in seinem Blog einen interessanten Artikel über den Einsatz der weit verbreiteten und sehr beliebten Template-Engine Smarty in Projekten mit dem Zend Framework verfasst.
Im Unterschied zu vielen anderen Artikeln die es dazu schon gibt, ist dieser brandaktuell und berücksichtigt insbesondere die Neuerungen rund um das Zend_Layouts ab der Version 1.10 des PHP Frameworks. Der Artikel ist ein sehr guter Einstiegspunkt wenn man plant beide Welten in eigenen Projekten miteinander zu vereinen.
Aus meiner Sicht gibt es leider noch zwei Punkte die nicht so schön sind und einer 100% Verschmelzung noch im Wege stehen. Dazu gehört, dass die Templates weiterhin *.phtml als Suffix haben, statt den von Smarty üblichen *.tpl. Das ließe sich zwar einfach mit der Zeile
$viewRender->setViewSuffix('tpl');in der Init-Funktion des Views in der Bootstrap-Klasse ändern, aber wenn man das Zend_Tool “zf” verwendet um Controller und Actions automatisch anzulegen, werden die dazugehörigen View-Skripte automatisch als *.phtml erzeugt. Die könnte man zwar danach umbenennen oder auch den Provider der Funktion von Zend_Tool anpassen, aber das ist viel Aufwand für so einen “Schönheitsfehler”. Ich bevorzuge daher meiner IDE mitzuteilen, dass *.phtml Smarty-Templates sind, damit das Syntax-Highlighting funktioniert. Mehr brauche ich nicht.
Der andere Schönheitsfehler ist der von Moo vorgeschlagene Workaround für die gleichen Scopes von Smarty und Zend_View bzw. Zend_Layout:
$this->assign('_view', $this); $this->assign('_layout', $this->layout());Dieser Workaround ist leider unumgänglich, denn sowohl Smarty als auch Zend_View beanspruchen das $this in den Templates für sich. Das ist echt gewöhnungsbedürftig.
Wenn man statt der noch aktuellen Version 2.6.x die neue Version 3.0 (immer noch RC) von Smarty einsetzen möchte, dann sollte man den Hinweis in den Kommentaren berücksichtigen, dass die Funktion get_template_vars($key) deprecated ist und durch die Funktion getTemplateVars($key) in der View-Klasse für Smarty ersetzt werden muss.
Tweet
blog comments powered by Disqus
