0

我有一些视图助手可以在需要时添加 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. 在视图中包含 CKEditorproject/project/issueadd
  2. 将 jQuery UI 包含在project/project/version

当我在视图脚本中时,调用<?php $this->jQueryUI(); ?>就像一个魅力,即使助手位于默认模块的助手目录中。但是,对于控制器和表单而言,情况并非如此。

在控制器ProjectController.phpversionAction(),我尝试调用:

$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();

又出现了一个例外:

消息:在注册表中找不到名为“所见即所得”的插件;使用的路径: Project_View_Helper_: C:/xampp/htdocs/bugraid/application/modules/project/views\helpers/ Zend_View_Helper_: Zend/View/Helper/

显然,如果我的视图助手位于调用它们的模块/控制器的助手目录中,两者都可以工作,但是由于它们在许多模块中使用,我希望将它们放在默认模块的视图助手目录中.

所以,我的问题是:

  1. 如何从控制器和表单中访问这些视图助手?
  2. 有没有更简单的方法来解决这个问题(除了简单地在布局中包含所有 javascript 文件)?喜欢创建插件或动作助手?(我以前没有做过这些事情,所以我真的不知道,我只是从 ZF 开始我的冒险)。
4

3 回答 3

3

关于第一季度(基于评论)。您应该能够以通常的方式访问帮助程序。但是,由于它不起作用,我认为您引导视图资源的方式和/或如何执行帮助程序的具体注册或如何向其添加帮助程序路径的方式存在问题。我在 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:您可以使用headScripthead视图助手来管理您在布局标签中加载哪些脚本。使用这个助手,你可以从你的行动中做到这一点。

例如。如果在 layout.php 中,您有:

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

然后在例如 indexAction 中,您可以附加一些 JS 文件,如下所示:

$this->view->headScript()->appendFile($this->view->baseUrl('/js/someJS.js'));
于 2011-02-13T02:14:58.490 回答
3

尽管我讨厌回答自己的问题,但根据 Marcin 在他的回答中提出的建议,我又想出了一个解决方案。也可以在 application.ini 中完成:

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

需要注意的是,这些行需要按此顺序出现。如果将其反转,则之前的任何内容都resources.view[] =将被忽略。

于 2011-02-13T11:05:49.873 回答
0

我宁愿摆脱您的 JQueryUI.php 并使用 ZendX。像这样的东西:

在控制器中:

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

在布局中:

<?php echo $this->jQuery () ?>
于 2011-02-13T02:23:17.373 回答