关于视图:CakePHP 2.0 css 和元素中的脚本未添加到 css/script 块中

CakePHP 2.0 css and scripts in element not being added to css/script blocks

我刚刚开始了一个使用 cakePHP 2.0 的项目。我正在使用一个元素来呈现侧边栏菜单。我想在菜单元素中为菜单指定 css 和 JS 文件,而不是在我的 head 标签中添加它们(以防我想有条件地呈现不同的侧边栏)。
出于某种原因,我的脚本和 CSS 没有被输出.. 有什么想法吗?

布局/Default.ctp

1
2
3
4
5
6
7
8
9
<head>
<?php
echo $this->fetch('css');
echo $this->fetch('script');
?>
</head>
....

<?php  echo $this->element('sidebar/menu'); ?>

元素/侧边栏/menu.ctp

1
2
3
4
5
6
7
8
9
10
$this->Html->script('menu', array('inline' => false));
$this->Html->css('menu', null, array('inline' => false));

<ul>

<li>
Menu Item
</li>

</ul>

CSS 和 javascript 分别在 webroot/css/menu.css 和 webroot/js/menu.js 中。

如果我将 Html->script 和 Html->css 声明放在视图文件或 home.ctp 或 default.ctp 中,它们将被添加到 css 和脚本块中并且输出正常。当它们在元素文件 menu.ctp 中声明时,它们不起作用。有什么我遗漏的吗?


1
2
3
4
5
6
7
8
9
10
// css
$this->start('css');
echo $this->Html->css('additionalstyle');
echo $this->Html->css('anotherstyle');
echo $this->end()

// javascript
$this->start('script')
echo $this->Html->script('jquery');
$this->end()

将此代码添加到您的 view.ctp

http://book.cakephp.org/2.0/en/views.html


1
2
echo $this->Html->script('menu', array('inline' => false));
echo $this->Html->css('menu', null, array('inline' => false));

我想我遇到了问题。主要问题是css和js调用的顺序。

1
2
echo $this->fetch('css');
echo $this->fetch('script');

这两行在 head 内呼应,即在调用你元素之前。所以这个问题有两种可能的解决方案:

  • 从头部切入 fetch() 并将其附加到正文标记的末尾,以便在所有可用的 DOM 之后加载脚本和 css。即

    ...
    ...
    echo $this->fetch(\\'css\\');
    echo $this->fetch(\\'script\\');

  • 制作 "inline" => true

    1
    2
    echo $this->Html->script('myel', array('inline' => true));
    echo $this->Html->css('mycss', null, array('inline' => true));
  • 我想这会解决你的问题....