我像往常一样在引导程序中加载javascript文件,但是只有当它是一个具有表单的页面时才会包含一个文件
->appendFile('http://myurl.com/js/formscript.js');
有没有办法从引导程序中检测正在加载的页面,以便我可以决定是否包含此文件?
我考虑过将一个变量从Form传递给视图,然后在bootstrap中检查该变量,但它不起作用。
这将是我的形式
$layout = new Zend_Layout();
$view = $layout->getView();
$view->formscript = true;
这将在我的引导程序中
if ($view->formscript)
但var_dump($view->formscript)
给我null,所以任何其他想法只在特定条件下激活js文件?
答案 0 :(得分:4)
要仅在特定页面中包含javascript文件,请在这些页面中添加以下代码(我的意思是查看脚本 - * .phtml)。
<?php
$this->headScript()->appendFile('http://myurl.com/js/formscript.js');
?>
同样,要将CSS文件添加到特定页面,请执行以下操作。
<?php
$this->headLink()->appendStylesheet('http://myurl.com/styles.css');
?>
答案 1 :(得分:3)
有可能,但你不需要你的引导程序。您只需从布局中访问变量即可:
//form
$view = Zend_Layout::getMvcInstance()->getView();
$view->formscript = TRUE;
//layout
if($this->formscript)
{
$this->headScript()->appendFile('http://myurl.com/js/formscript.js');
}
echo $this->headScript();
不要在表单中使用getView(),因为它将返回表单的视图对象,而不是您的应用程序。这让我绊倒了几次&gt;。&gt;
答案 2 :(得分:1)
在您的视图中设置标记(例如$view->hasForm
)的想法似乎是一种非常合理的方法。但正如其他人所指出的那样,它不应该是尝试设置标志的表单本身,因为它在渲染时间之前不能真正访问视图对象。
相反,无论您将表单放在视图中 - 可能在控制器中,甚至可能在前端控制器插件中 - 只需在那里设置标记即可。
如果已设置标记,则您的视图脚本或布局可以调用$this->headScript()->appendFile()
。
答案 3 :(得分:1)
为什么不将appendFile()
移到您的表单类(当然如果您使用Zend_Form),您将确保只在与表单同时创建JS行。这一行的位置在init()
以及render()
class Your_Form extends Zend_Form {
public init(){
$this->getView()->appendFile('http://myurl.com/js/formscript.js');
[...]
}
}