【问题标题】:CakePHP: $this->Html->script doesn't work inside element when applied to layoutCakePHP:$this->Html->script 在应用于布局时在元素内部不起作用
【发布时间】:2014-12-31 21:16:45
【问题描述】:

我正在使用 CakePHP 2.x

我有几个需要 javascript 文件的元素,因此在元素 ctp 文件 (whatever.ctp) 中我执行以下操作:$this->Html->script('whatever.js', array('inline'=>false)); 这通常效果很好...

但我注意到,当我尝试直接在布局(而不是视图)上使用这个完全相同的元素时,它不起作用:

//在default.ctp布局内 echo $this->element('whatever');

元素正常显示,但脚本未添加到脚本块中。如果我将相同的元素移动到视图中,则会添加脚本 do。或者,如果我将脚本从元素中取出,然后将 $this->Html->script('whatever.js', array('inline'=>false)); 添加到默认值。这有效。

那么为什么元素不能添加到视图之外的脚本块中呢?

如果不清楚的话……

//this works
layout -> view -> element -> $this->Html->script()

//this works
layout -> $this->Html->script()            

//this DOESN'T work
layout -> element -> $this->Html->script()

【问题讨论】:

  • 使用 inline=>true 时echo 在哪里?
  • @mark 我更正了问题中的代码。应该是'inline'=>false。无论我将其设置为 true 还是 false,都不会出现脚本标记(当 $this->Html->script() 在布局中使用的元素内时)。

标签: php cakephp cakephp-2.0


【解决方案1】:

只要您还没有输出脚本,它就可以正常工作。您需要了解执行顺序。 先浏览,后布局。 一旦布局呈现并输出缓冲内容,就不能再使用缓冲输出(使用 inline false)。那么你需要 inline true 并直接回显它。

【讨论】:

  • 你所说的执行顺序是有道理的。但是为什么 inline=true 也不做任何事情呢?是否有一种解决方法可以让我的元素在布局和视图中正常工作?因为脚本是在 中渲染的,所以布局中使用的任何元素都会出现在后面。
  • 您是否按照我上面推荐的内容使用了带有 inline=>true 的“echo”?
  • 啊……我误解了这个问题!我以为你在问
  • 您是否建议将内联脚本作为直接在布局中使用元素的解决方法?出于性能原因,我通常尽量不这样做,但这不是世界末日。但我很确定如果 inline=true,默认的 $option['once']=true 也会被忽略,这为重复脚本打开了大门……这是不行的。
  • 然后确保在输出之前将所有脚本写入缓冲区。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多