我有一些视图助手可以在需要时添加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
我想做什么:
project/project/issueadd
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 /
显然,如果我的视图帮助程序位于调用它们的模块/控制器的帮助程序目录中,两者都可以工作,但由于它们用于多个模块,我希望将它们放在默认模块中查看助手目录。
所以,我的问题是:
答案 0 :(得分:3)
关于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>
然后进入,例如indexAction你可以按如下方式附加一些JS文件:
$this->view->headScript()->appendFile($this->view->baseUrl('/js/someJS.js'));
答案 1 :(得分:3)
尽管我讨厌回答我自己的问题,但根据Marcin在答案中提出的建议,我提出了另外一个解决方案。它也可以在application.ini中完成:
resources.view[] =
resources.view.helperPath.My_View_Helper = APPLICATION_PATH "/modules/default/views/helpers"
需要注意的是,线条需要按此顺序出现。如果它被颠倒,resources.view[] =
之前的任何内容都将被忽略。
答案 2 :(得分:0)
我宁愿摆脱你的JQueryUI.php并使用ZendX。这样的事情:
在控制器中:
ZendX_JQuery::enableView ($this->view);
$this->view->jQuery ()->enable ()->setRenderMode (ZendX_JQuery::RENDER_ALL);
布局:
<?php echo $this->jQuery () ?>