在“底部”的CakePHP布局中加载Javascript文件

时间:2012-12-29 17:24:22

标签: php cakephp cakephp-2.2

目前,我有一个很大的CakePHP应用程序,它有一个布局和很多视图。在布局中,我在头部加载大多数视图所需的Javascript文件。在视图中,我要么加载额外的Javascript文件(例如,加载仅在那里需要的库文件),要么在脚本标记中添加一些仅与此视图相关的Javascript代码,例如,如果我需要单击处理程序。

由于已知的事实是在加载页面的HTML头块中加载Javascript文件,我想在关闭正文标记之前将它们放在底部。但是,如果我这样做,我的视图中加载内容的Javascript会中断,因为它不知道我加载的Javascript文件。我知道加载视图中的Javascript代码是在加载文件之前执行的。但是我怎么能防止这种情况呢?

我目前正在使用布局中的HTML帮助程序(以及其他任何地方)加载我的JS文件,如下所示:

<?php echo $this->Html->script('//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'); ?>

我使用JS Helper在

页面的末尾“输出”JS
<?php echo $this->Js->writeBuffer(); ?>

有没有办法可以在视图中附加我的JS代码,以便在调用writeBuffer时执行它?这可以帮助我吗?

2 个答案:

答案 0 :(得分:19)

从CakePHP 2.1版开始,您可以使用脚本块:

// in your view
$this->Html->script('filename', array('block' => 'scriptBottom'));

// in your layout
echo $this->fetch('scriptBottom');

此方法可让您将echo $this->fetch('script')保留在布局的<head>中,以防您需要顶部的任何脚本。

答案 1 :(得分:12)

这就是我的观点:

echo $this->Html->script('filename', array('inline' => false));

这就是我在布局底部所做的事情:

echo $this->fetch('script');