在PHP PHP的默认视图中包含JS

时间:2011-11-25 13:08:41

标签: cakephp cakephp-2.0

我可以在Cake PHP中的任何View文件中执行此操作:

<?php echo $this->Html->script('myjs.js', false); ?>

但如果我在默认视图(default.ctp)中执行相同操作,则JS文件不会加载,即它们不会被回显。我已尝试在默认视图中移动<?php echo $scripts_for_layout ?>上方和下方的内容,但它们仍然无法打印:

<?php echo $scripts_for_layout ?>  
<?php echo $this->Html->script('myjs.js'); ?>

<?php echo $this->Html->script('myjs.js'); ?>
<?php echo $scripts_for_layout ?>  

有什么想法吗?

谢谢:)。

4 个答案:

答案 0 :(得分:3)

有或没有扩展名 - 这不是脚本无法回显的原因,

作为 mensch 之前提到它没有因为:

html helper cakephp 2的来源

if (strpos($url, '?') === false && substr($url, -3) !== '.js') {
  $url .= '.js';
}

原因是:  您已在视图中插入此脚本,

cake检查脚本是否已插入页面

  

选项 - “一次” - 是否应检查脚本的唯一性。如果真实脚本只包含一次,请使用false来允许   每个请求多次包含相同的脚本。

默认情况下,一次的值设置为TRUE

首先从您的视图中删除该脚本,然后使用或不使用“.js”

进行尝试

P.S。:为什么 petervaz 答案对您有用: 因为这个检查:

if ($options['once'] && isset($this->__includedScripts[$url])) {
    return null;
}
检查文件扩展名之前

所以isset(__includedScripts['myjs']) == false // because first key was __includedScripts['myjs.js']

你已经包含了你的脚本

答案 1 :(得分:1)

我有一个项目,在$ scripts_for_layout之前添加了脚本,它们显示正常。唯一的区别是我没有将扩展名.js添加到调用中,如下所示:

default.thtml中:

<head>
    <?php echo $this->Html->charset(); ?>
    <title>
        <?php echo "Site > $title_for_layout"; ?>
    </title>
<?php    
  echo $this->Html->script('jquery-1.6.4');
  echo $this->Html->script('jquery-ui-1.8.16.custom.min');
  echo $this->Html->script('mercado');
  echo $scripts_for_layout;
?>
</head>

答案 2 :(得分:1)

我绝对推荐的另一件事是检查在视图中加载你的JS是否100%正确。

如果您不确定,请不要使用$ this-&gt; Html-&gt;脚本:

---脚本之间的依赖性

---某些插件对其他脚本的依赖性

---您希望将来使用多少种不同的布局和/或视图。

例如,一些插件使用jQuery但是它们需要在插件本身之前加载jQuery。

因此,如果您将jQuery放在视图或布局中,那么插件的JS在jQuery和插件之前加载可能无效。如果您想确保首先加载一些脚本,可以试试这个:

在您的app / View / Helper / AppHelper.php中:

class AppHelper extends Helper {
    public $helpers = array('Html', 'Session');

    public function beforeRender($viewFile){
            echo $this->Html->script('jquery', array('inline'=>false));
        }
}

因此,您不必在多个视图中包含jQuery,而是首先加载它。

答案 3 :(得分:0)

布局中的

$scripts_for_layout是视图中包含的所有脚本的占位符,因此如果您包含它,或者如果直接在default.ctp中加载脚本则不会产生任何影响。

话虽如此,添加扩展程序或将其从$this->Html->script()调用中删除不应该有所作为。可能的情况是HtmlHelper未正确调用(默认情况下在Cake 2.0中调用),但您应该收到错误消息。调试是否在/app/Config/core.php中设置为2?