Разрешить расположение помощника вида изнутри контроллера или формы - PullRequest
0 голосов
/ 12 февраля 2011

У меня есть несколько помощников вида, которые добавляют файлы JavaScript, когда они необходимы (например, чтобы только формы использовали CKEditor и тому подобное).Моя структура каталогов (упрощенная для включения только соответствующих файлов) такова:

application
    --forms
        --Project
            AddIssue.php
    --modules
        --default
            --views
                --helpers
                    JQueryUI.php
                    Wysiwyg.php
        --project
            --controllers
                ProjectController.php
            --views
                --scripts
                    --project
                        version.phtml
                        issueadd.phtml

Что я хочу сделать:

  1. включить CKEditor в представление project/project/issueadd
  2. включает пользовательский интерфейс jQuery в project/project/version

Когда я нахожусь внутри скрипта вида, вызов <?php $this->jQueryUI(); ?> работает как чудо, даже если помощник находится в каталоге помощников модуля по умолчанию.Однако это не относится к контроллеру и форме.

В контроллере ProjectController.php, versionAction() я попытался позвонить:

$this->view->jQueryUI();

, и эффект былисключение:

Сообщение: Плагин с именем 'JQueryUI' не найден в реестре;используемые пути: Project_View_Helper_: C: / xampp / htdocs / bugraid / application / modules / project / views \ helpers / Zend_View_Helper_: Zend / View / Helper /

Аналогично, в форме AddIssue.php,Я попробовал это:

$this->getView()->wysiwyg();

и снова возникло исключение:

Сообщение: Плагин по имени 'Wysiwyg' не найден в реестре;используемые пути: Project_View_Helper_: C: / xampp / htdocs / bugraid / application / modules / project / views \ helpers / Zend_View_Helper_: Zend / View / Helper /

Очевидно, что оба сработают, если мои помощники по просмотрунаходились в справочных каталогах модулей / контроллеров, из которых они вызываются, но поскольку они используются во многих модулях, я бы хотел, чтобы они были в каталоге помощников вида модуля по умолчанию.

Итак,мои вопросы:

  1. Как мне получить доступ к этим помощникам вида из контроллера и формы?
  2. Есть ли более простой способ обойти это (кроме простого включения всего javascriptфайлы в макете)?Как создать плагин или помощник действий?(Я не делал этого раньше, поэтому я действительно не знаю, я только начинаю свое приключение с ZF).

Ответы [ 3 ]

3 голосов
/ 13 февраля 2011

Как бы мне не хотелось отвечать на мои собственные вопросы, я нашел еще одно решение, основанное на том, что Марчин предложил в своем ответе.Это также можно сделать в application.ini:

resources.view[] =
resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/modules/default/views/helpers"

Предупреждение: строки должны появляться в этом порядке.В случае обращения все, что до resources.view[] =, будет игнорироваться.

3 голосов
/ 13 февраля 2011

Относительно Q1 (на основе комментариев). Вы должны иметь доступ к помощникам обычным способом. Однако, поскольку это не работает, я думаю, что есть проблема с тем, как вы загружаете свой ресурс просмотра и / или как вы выполняете конкретную регистрацию помощников или как вы добавляете к нему вспомогательный путь. Я вставляю пример добавления вспомогательного пути в Bootsrap.php:

<?php
#file: APPLICATION_PATH/Bootstrapt.php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap {

    public function _initViewHelperPath() {

        $this->bootstrap('view');
        $view = $this->getResource('view');

          $view->addHelperPath(
                APPLICATION_PATH . '/modules/default/views/helpers',
                'My_View_Helper' // <- this should be your helper class prefix.
        );
    }

}
?>

Этот курс, как правило, должен работать для модульной настройки ZF.

Относительно Q2: Вы можете использовать помощник вида headScript , чтобы управлять тем, какие скрипты вы загружаете в тег head вашего макета. С помощью этого помощника вы можете сделать это из ваших действий.

Например. Если в layout.php у вас есть:

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

затем, например, Вы можете добавить JS-файл в indexAction следующим образом:

$this->view->headScript()->appendFile($this->view->baseUrl('/js/someJS.js'));
0 голосов
/ 13 февраля 2011

Я бы лучше избавился от вашего JQueryUI.php и использовал бы ZendX. Примерно так:

В контроллере:

    ZendX_JQuery::enableView ($this->view);
    $this->view->jQuery ()->enable ()->setRenderMode (ZendX_JQuery::RENDER_ALL);

В макете:

<?php echo $this->jQuery () ?>
...