Zend Framework: вставляем viewHelper куда душе угодно
Здравствуйте, уважаемые коллеги-разработчики, в сегодняшней заметке я поделюсь с вами своим костылем-решением. Пишу в свободное время свою модульную CMS (ведь каждый разработчик должен написать в своей жизни хотя бы одну) на базе Zend Framework’а и возникла необходимость вставлять в контент форму обратной связи и еще что-нибудь в произвольное место. Для создания стратичных страниц я использую свой модуль Static, который ничего не умеет, кроме создания стратичных страниц WYSIWYG’ом и прикрепления к уже имеющимся.
Первое, что пришло в голову это заменять какой-нибудь placeholder аля {placeholder_feedback_form(0)} на содержимое. Сказано-сделано, приведу кусок view Helper’а, который отображает нестандартную форму и валидирут посредстом отправления AJAX запросов на сервер.
<?phpclassFeedback_View_Helper_FormextendsZend_View_Helper_Abstract{// form with ajax validationpublicfunctionform($form=null){$html=<<<karamba<formaction="#"method="post"><divclass="fancyform"><labelfor="username"><span>Вашеимя</span></label><divclass="it"><div><inputtype="text"name="username"id="username"></div></div><labelfor="email"><span>ВашE-mail</span></label><divclass="it"><div><inputtype="text"name="email"id="email"></div></div><labelfor="phone"><span>Ваштелефон</span></label><divclass="it"><div><inputtype="text"name="phone"id="phone"></div></div><divclass="ta"><div><textareaname="message"></textarea></div></div><divclass="is"><div><inputtype="submit"name="submit"id="submit"value="Отправить"></div></div><pclass="spasibo"><span></span></p></div><!--/fancyform--></form>karamba;$view=Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer')->view;$view->headScript()->captureStart()?> $().ready(function() { $('form').submit(function() { $.get('/feedback', $(this).serialize(), function(response) { if ('ok' == response.code) { // transmission completed $(':input', 'form') .not(':button, :submit, :reset, :hidden') .val('') $('p.spasibo span').text('Спасибо! Обязательно отвечу!'); } else { // print error message $('p.spasibo span').text('Ошибка при заполнении'); } }, 'json'); return false; }); });<?php$view->headScript()->captureEnd();return$html;}}
данный view Helper у меня располагается в папке application/modules/feedback/view/helpers/Form.php
Action_Helper: замена placeholder’ов
Более или менее универсальное решение по замене placeholder’ов вида {placeholder%moduleName%%viewHelper(%param%)} реализовал в виде Action Helper’а, вот его код
Данное решение не претендует на абсолютную правильность, но меня оно пока устраиивает и всем спасибо за внимание, надеюсь, что данное решение вам когда-нибудь пригодится :)