Или как да не пишем във всеки шаблон, че ще има header.
Всеки, който започва да използва нов web framework първоначално се запитва за няколко основни неща. Като цяло те и отговарят на MVC практиката.
- Как да направим така че всичките ни състояния в сайта да бъдат описани в различни файлове, така че да можем лесно да си намираме и поддържаме кода.
- Как да се погрижим за правата и ролите на различните потребители на сайта.
- Как да разделим html-а на няколко файла, за да не пишем по един милион пъти includes на header или footer.
Почти всеки, който се е сблъсквал с PHP програмиране е чувал за Smarty и когато някой, по-често псевдо разбирач, ти изреди една плеяда колко е ретроградно да се слага php код измежду html таговете и как трябвало Smarty да се притече на помощ, ето един добър довод за излагане против Smarty.
Хубаво е да се ползва Smarty. Няма проблем. Само че нека си представим следния пример. Имаме сайт с header – content – footer. Като обикновено header-a съдържа разни връзки към css и meta тагове. Със Smarty като искаме да използваме тая структура за 10 файла, 10 пъти ще имаме следния код:
{include file=”header.tpl”}
{include file=”content.tpl”}
{include file=”footer.tpl”}
и ако това се повтаря в 100 файла, ще се наложи, няма как – 100 пъти едно и също за тоя header и footer.
След като и Zend Framework се е измъчил в по-предишни версии, доколкото разбирам, все пак аз отскоро се захванах с него и направо започнах от 1.5.3, сега проблемът се решава от Zend_Layout. A и сблъсквайки се с проблема с header-a и footer-a стигнаь до четене на няколко урока, от които разбрах, че хората преди са се опитвали да решат проблема с plugin към Front Controller-а и явно това е било разпространената практика.
Може би и на създателите на ZF им е станало ясно, че така няма да стане и затова се е погрижил Zend_Layout.
Дори сега се появяват уроци които се стремят да помогнат на решаването на този проблем с помощта на plugin, но аз препоръчвам да не се захваща никой с тях, въпреки че може на някой да му е интересно. Най-добре да се насочи към използването на Zend_Layout. За жалост пък при него поне официалната документация ми се видя недостатъчно, но пък намерих една презентация от webinar на Zend.