主题资产在CakePHP 2.2.4中不起作用

时间:2013-08-13 20:39:13

标签: cakephp themes assets cakephp-2.2

我已经看到很多关于链接到CakePHP中的主题资产的问题,但没有一个问题可以解决我的问题,最近的帖子也是在2012年,所以我想我会把我的问题浮出去。

我在CakePHP 2.2.4应用程序中实现了主题。我的主题名为“默认”(以前称为“默认”,直到1分钟前)位于app/View/Themed/default(之前主题名称也有相应的资本D用于文件夹名称)。

我的css文件位于app/View/Themed/default/webroot/css/style.css,我在app/View/Themed/default/Layouts/default.ctp中使用以下代码调用

Default.ctp布局

echo $this->Html->css('style');

(我已尝试将大写字母W用于webroot“以防万一”,但毫无意外的是没有用)

我已在AppController中包含此链接以确定我正在使用的主题。所有视图文件都指向正确的主题,但现在的问题是样式表(我还没有搞乱其他资产,如js或图像文件)。

AppController的

class AppController extends Controller {

    public $theme = 'default'; // previously 'Default'
    // also, have used both 'public $theme' and 'var $theme', no difference

我已经阅读了以下问题,但没有一个“解决方案”有效。大多数解决方案是检查拼写/大小写,检查文件夹的权限,检查我的.htaccess文件等。仍然没有。还有新想法?

的.htaccess

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]
</IfModule>

主题webroot和css文件夹的文件夹权限为755。

以下是我使用过的一些没有运气的资源。

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

CakePHP theme resources return error

Unable to get css and image files in Themes webroot folder of cakephp

https://groups.google.com/forum/#!topic/cake-php/xaRAugMoNSc

CakePHP 2.x theme not working

https://groups.google.com/forum/#!topic/cake-php/siYVWchUb1g

更新:使用$this->Html->image('image.jpg')正确显示位于View/Themed/Default/webroot/img/image.jpg的已定义图片。但是,使用$this->Html->css('style')尝试从app/webroot/css/style.css而不是app/View/Themed/Default/webroot/css/style.css提取样式表。我还必须将我的主题的主题名称和文件夹名称更改为“默认”,并使用大写的D以使图像正确链接。样式表仍然无法正确链接。如果我在浏览器中直接导航到我的主题样式表,则会出现一个空白页面。如果我导航到我的主题文件夹中不存在的样式表,那么我会收到正确的错误消息。但是,查看我的主题样式表(确实存在的样式表)的来源会显示一个空白页面。

4 个答案:

答案 0 :(得分:4)

CakePHP使用CamelCase约定。尝试从例如更改主题的名称。 defaultDefault。它也发生在我身上。

我的主题是命名为megaecia,没有错误消息,没有任何日志(因为我是Windows,在unix中没有发生)然后我改为Megaecia并且一切正常。

希望我帮助过。

答案 1 :(得分:1)

好吧也许这很明显......但我的样式表使用了我在自定义Helper中创建的函数。当样式表位于app/webroot/css时,没有问题,但当样式表位于app/View/Themed/Default/webroot/css时,它无法正确显示,因此Cake链接到应存在的不存在的样式表app/webroot/css。我已从主题样式表中删除了帮助程序,现在一切正常。

我还将主题名称从“默认”恢复为“默认”,以便使用$this->Html->image(也可能是样式表和JS文件)正确显示图像,即使视图文件已链接正确无论大写。

答案 2 :(得分:0)

主题的资产文件必须以这种方式放在app/webroot/theme文件夹中:

app/webroot/theme/default/css
app/webroot/theme/default/js
app/webroot/theme/default/img
. . .

其中default是以小写字母开头的主题名称。文件夹名称theme是硬编码的。请注意,后缀没有-ed

主题布局应放在app/View/Themed/Default/Layouts文件夹中。主题名称应该尊重CamelCase规则,因为Gabriel Oak回答。实际上我在linux机器上遇到问题CakePhp无法找到我的布局,因为我将我的主题文件夹命名为app/View/Themed/default/Layouts这样的小写。

还有一件事:在控制器主题中也应该用小写指定:$this->theme = 'default';。它会影响资产查找,因为我们将资产放在小写文件夹app/webroot/theme/default中。

答案 3 :(得分:0)

如果您尝试从主题的webroot的子目录访问CSS资源,请务必在开头添加/

$this->Html->css('/plugins/bespoke.css'); 

这将从主题目录中调用CSS。

如果你没有在开头添加/,蛋糕将不会查找主题文件夹,而是尝试从应用程序的默认webroot目录中加载CSS