Zend引导程序,仅包括某些页面的javascript文件

时间:2011-06-02 06:20:37

标签: php zend-framework

我像往常一样在引导程序中加载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文件?

4 个答案:

答案 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');
        [...]
    }
}