我已经看到很多关于链接到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
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以使图像正确链接。样式表仍然无法正确链接。如果我在浏览器中直接导航到我的主题样式表,则会出现一个空白页面。如果我导航到我的主题文件夹中不存在的样式表,那么我会收到正确的错误消息。但是,查看我的主题样式表(确实存在的样式表)的来源会显示一个空白页面。
答案 0 :(得分:4)
CakePHP使用CamelCase约定。尝试从例如更改主题的名称。 default
到Default
。它也发生在我身上。
我的主题是命名为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