0

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

布局/默认.ctp

<head>
<?php
echo $this->fetch('css');
echo $this->fetch('script');
?>
</head>
....
<div id="leftcolumn">
<?php  echo $this->element('sidebar/menu'); ?>
</div>

元素/侧边栏/menu.ctp

$this->Html->script('menu', array('inline' => false));
$this->Html->css('menu', null, array('inline' => false));
<div class="sidebarmenu"><ul><li>Menu Item</li></ul></div>

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

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

4

2 回答 2

2
// 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

于 2013-02-17T16:10:54.100 回答
1
echo $this->Html->script('menu', array('inline' => false));
echo $this->Html->css('menu', null, array('inline' => false));

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

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

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

  1. 从 head上方剪切fetch()并将其附加到 body 标记的末尾,以便在所有 DOM 可用后加载脚本和 css。IE

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

  2. 使"inline" => true

    echo $this->Html->script('myel', array('inline' => true));
    echo $this->Html->css('mycss', null, array('inline' => true));
    

我想这会解决你的问题......

于 2012-04-15T15:37:41.443 回答