2013-03-22 7 views
1

Кажется, я помню, что в Zend Framework мы могли добавлять стили/скрипты через headScript в действие страницы. В Zend2 это не похоже на выбор.Zend Framework 2 headscript

В документации по этому поводу я не вижу многого. В основном, мой вопрос; правильно ли добавлять эти стили/сценарии в представление? Или есть ли новый способ добавить их в действие контроллера?

Благодаря

+0

Просмотреть помощник вида headScript() -> http://framework.zend.com/manual/2.1/en/modules/zend.view.helpers.html#headscript-helper – Crisp

+0

Да, я видел это ... и я понимаю, как это работает в макете, но как насчет добавления скриптов или стилей в определенные виды? Есть ли способ, доступный в действии? Должен ли я просто повторить это в представлении? Документация не очень ясна. – aserwin

+0

Да, помощник доступен в представлениях и макетах, я думаю, что единственным предостережением может быть то, что вам нужно использовать preend в представлениях, но ymmv. – Crisp

ответ

9

В вашем действии контроллера:

$this 
    ->getServiceLocator() 
    ->get('viewhelpermanager') 
    ->get('HeadScript') 
    ->appendFile('/js/custom.js') 
; 

Вы могли бы сделать это проще, создав «invokable», «служба поиска осведомленный» контроллер плагин.

Вы можете сделать это в вашем модули конфигурационном файле:

... 
'controller_plugins' => array(
    'invokables' => array(
     'Head' => 'Application\Controller\Plugin\Head', 
    ) 
), 
... 

Создание класса «Head» в module/Application/src/Application/Controller/Plugin/Head.php, который реализует ServiceLocatorAwareInterface и построить некоторые методы, такие как javaScript() или styleSheet, например, что просто захватить помощник вида и возврата это:

return $this 
    ->getServiceLocator() 
    ->getServiceLocator() // Main service Locator 
    ->get('viewhelpermanager') 
    ->get('HeadScript') 
; 

Тогда в контроллере это больше похоже:

$this->Head()->javaScript()->appendFile('/js/custom.js'); 

Вы могли бы получить такую ​​же фантазию, сколько хотите. Возможно, даже стиль Magento с XML, управляющим макетом для каждого действия.

UPDATE

Выход в буфер, если вы используете ZF2 MVC. Таким образом, я нашел, что добавление скриптов и таблиц стилей на странице лучше всего сделать из файла шаблона, прикрепленного к вашей модели представления:

$this->headScript()->appendFile('/js/custom.js', 'text/javascript');

$this->headLink()->appendStylesheet('/css/custom.css');

Держите его из контроллера, так как это мнение Связанный.

0

Я не понимаю, о чем говорит Маршалл Хаус.

Плагин необходимо реализовать PluginInterface. Почему реализует ServiceLocatorAwareInterface?

Где этот код?

return $this 
->getServiceLocator() 
->getServiceLocator() // Main service Locator 
->get('viewhelpermanager') 
->get('HeadScript'); 

Также AbstractPlugin (если простираться от него) не имеет getServiceLocator() Митос. Что это значит? Главный сервисный локатор? Пожалуйста, напишите несколько примеров.

+0

Это будет содержимое метода, подобного 'javascript()' в плагине контроллера. –

+0

Теперь я понимаю, что больше опыта с Zend). –