我可以在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 ?>
有什么想法吗?
谢谢:)。
答案 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?