如何将资源(JS)包含在控制器的布局中 - CakePHP

时间:2013-05-10 07:35:16

标签: php javascript cakephp cakephp-2.0

这可能是重复的,但我很难找到同样的问题,当然也是答案。

我对Cake(2)中的资产处理方式有点不确定和困惑。我想在特定页面上包含一些JS,而不是在应用程序的每个页面上,所以我认为我需要将它添加到我的控制器方法中?我找不到我会怎么做。我接下来的是JsHelper,但这似乎更多的是使用PHP构建JS而不仅仅是加载资产。

我很清楚我可以$this->Html->script('script'),但这在控制器中不起作用,只在视图中。

虽然现在不需要,但是能够将变量传递给包含的JavaScript也很有用。一个很好的例子可能是“编辑”屏幕上的AJAX请求:$.ajax({ url: "/pages/edit_ajax/<?= $page->id ?>" });

很高兴收到任何帮助。

1 个答案:

答案 0 :(得分:2)

为了做到这一点,你需要使用Blocks(假设你在v2.1 +中)。

布局文件中,毫无疑问会有一行$this->fetch('script'),它会找到script块并将其输出到您的布局中。

接下来,在控制器操作的视图中,假设index()您将拥有匹配的视图index.ctp。在此视图中,您可以将脚本附加到script块。

所以在视图中,

<?php $this->append('script'); // we want to append to the script block ?>
<script>
$(function() {
  alert('Hey there, Im only on this page!');
})
</script>
<?php $this->end();?>

当您访问控制器操作时,您会看到这将会输出,希望在您的页面底部以及其他javascript中输出。

当您在视图中添加脚本时,它只会在加载此视图时执行。

关于第二个问题,您可以将变量设置到控制器中的视图,然后将它们回显到您的javascript中。

// Controller
$this->set('jsVar', 'JavascriptInBlocks');

// View
<?php $this->append('script'); // we want to append to the script block ?>
<script>
$(function() {
  alert('Hey there <?php echo $jsVar;?>');
})
</script>
<?php $this->end();?>