Как управлять js-файлами, которые загружаются в макет, из контроллера (Zend Framework) - PullRequest
0 голосов
/ 02 августа 2011

Прежде всего, я новичок в Zend Framework и, возможно, есть простой способ сделать это, но я этого не знаю.

Чего я пытаюсь добиться, так это загружать разные jsфайлы (в макете) в зависимости от того, какой контроллер используется.Я не могу добавить js-файлы в качестве переменных к объекту Layout, потому что макет отключен в этих контроллерах.

Как правильно это сделать?Спасибо.

Редактировать (код)

В CalendarController (используя метод Subdigger):

    public function init()
    {
      $this->_helper->layout->disableLayout();

      $js = new Application_View_Helper_Javascript();
      //get an array with the basename of the js files          
      $jsFiles = $js->addFiles('calendar');

      foreach ($jsFiles as $k=>$file){
           $this->view->headScript()->appendFile('/js/' . $file.'.js');
      }


    }

И в layout.phtml:

<?php
 echo $this->doctype()."\n";
 ?>
 <html>
    <head>
       <?php
         echo $this->headMeta()."\n";
         echo $this->headLink()."\n";
         echo $this->headTitle()."\n";
         echo $this->headScript()."\n";

Ответы [ 2 ]

2 голосов
/ 02 августа 2011

Вы можете пойти по этому пути: в контроллере

class IndexController extends Zend_Controller_Action
{

    public function init()
    {
        $this->view->headScript()->appendFile(
          '/js/prototype.js',
          'text/javascript',
          array('conditional' => 'lt IE 7')
        );
    }
......
}

тогда в поле зрения:

.....
  <head>
    <?php echo $this->headScript() ?>
  </head>
.....

читать это

1 голос
/ 02 августа 2011

Я правильно понимаю вашу проблему, но не ваши намерения.В комментарии вы говорите, что макет включен в indexController, но в других макет отключен.Если вы отправляете на другой контроллер и отключаете макет, layout.phtml не должен использоваться.Итак, как вы используете это?У вас есть где-нибудь включить?

Я думаю, что решение здесь не в том, чтобы отключить макет, а загрузить другую компоновку в эти "другие" контроллеры.

$this->_helper->layout->setLayout('foobaz');

Вы можете загрузитьразличное расположение для каждого контроллера или даже действие в контроллере.Еще я заметил, что вы загружаете его в методе init ().Я делаю всю эту логику в методах действий или pre / postDispatch.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...