在 CakePHP 中,现在 View->addScript() 已被弃用,我如何向我的布局添加脚本*一次*

In CakePHP, how do I add a script *once only* to my layout now that View->addScript() is deprecated?

本文关键字:布局 一次 脚本 添加 我的 View- 现在 CakePHP addScript      更新时间:2023-09-26

In CakePHP 2.1:
现在只向我的布局(即一个块)添加一段 Javascript 的最佳方法是什么
View->addScript()被弃用了?

编辑:
$this->Html->script()(链接到JS文件)似乎可以跟踪重复的脚本,
$this->Html->scriptBlock()(内联JS)没有。

$this->Html->script('scriptname');

并确保您的脚本位于 webroot 的 js 文件夹中

你可以做的几件事:

1.寻找声明的变量(肮脏的解决方法)

如果你真的希望代码在$this->Html->scriptBlock(),你可以定义/检查一个全局变量,看看代码是否已经被定义。例如:

if (!DEFINED('someVarName')) {
    // define the variable from now on
    DEFINE('someVarName', true);
    // add your block
    $this->Html->scriptBlock(...);
}

2. 创建自定义 JS 路由和文件(蛋糕方式)

最好的办法是为您的视图创建一个实际的JS文件,该文件可以包含在$this->Html->script()中,但是如果您想将PHP代码集成到JS中,那就很烦人了。Cake 有一种很棒的方法来创建特定于视图的 JS 脚本,他们似乎很少谈论(我不知道为什么)。

只需将其添加到您的Config/routes.php文件中:

Router::parseExtensions('js');

这使得 Cake 会自动为您的控制器操作查找 JS 视图,如果您只是在 URL 末尾添加".js"。 例如:

$this->Html->script('/users/profile.js')寻找View/Users/js/profile.ctp

然后,它与JS布局一起提供它。 这太棒了,因为您仍然可以访问控制器中设置的所有变量和数据。

现在。。。只有一个问题。 默认 JS 布局将内容包装在标记中。如果我们尝试在外部包含我们的脚本,这是不好的,例如:<script type="text/javascript" src="/users/profile.js"></script> .

我以

这种方式对JS布局没有太多用处,但是我可能会在某个时候,所以我只是编辑了布局文件以使其具有适应性:

// app/View/Layouts/js/default.ctp
<? 
if (isset($this->request->params['ext']) && $this->request->params['ext']=='js') {
    echo $this->fetch('content'); 
} else {
?>
    <? echo $scripts_for_layout; ?>
    <script type="text/javascript"><?php echo $this->fetch('content'); ?></script>
<? } ?>

更多信息(虽然没有更多)在: http://book.cakephp.org/2.0/en/development/routing.html#file-extensions