8

我已经看到很多关于在 CakePHP 中链接到主题资产的问题,但没有一个问题能解决我的问题,而且最近的一篇文章是在 2012 年,所以我想我会提出我的问题。

我在我的 CakePHP 2.2.4 应用程序中实现了主题。我的主题名为“default”(在 1 分钟前之前称为“Default”)位于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 或图像文件)。

应用控制器

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 主题资源返回错误

无法在 cakephp 的 Themes webroot 文件夹中获取 css 和图像文件

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

CakePHP 2.x 主题不起作用

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

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

4

4 回答 4

4

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

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

希望我有所帮助。

于 2013-12-01T16:41:58.163 回答
1

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

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

于 2014-01-14T20:53:22.173 回答
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文件夹中。正如 Gabriel Oak 所回答的那样,主题名称应尊重 CamelCase 规则。实际上,当我在 linux 机器上 CakePhp 无法找到我的布局时,我遇到了问题,因为我用小写命名了我的主题文件夹,如app/View/Themed/default/Layouts.

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

于 2014-04-07T19:55:58.857 回答
0

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

IE

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

这将从主题目录调用 CSS。

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

于 2014-12-10T08:35:12.333 回答