【问题标题】:Theme Asset Not working In CakePHP 2.2.4主题资产在 CakePHP 2.2.4 中不起作用
【发布时间】:2013-08-13 20:39:13
【问题描述】:

我看到很多关于在 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 或图像文件)。

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

【问题讨论】:

    标签: cakephp themes assets cakephp-2.2


    【解决方案1】:

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

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

    希望我能帮上忙。

    【讨论】:

    • 我使用“默认”或“默认”作为主题名称没有区别。 更新: 使用$this-&gt;Html-&gt;image('image.jpg') 正确显示位于View/Themed/Default/webroot/img/image.jpg 的定义图像。但是,使用$this-&gt;Html-&gt;css('style') 会尝试从app/webroot/css/style.css 而不是app/View/Themed/Default/webroot/css/style.css 中提取样式表
    • 就是这样! CakePHP 期望文件夹以 CamelCase 命名,而不管控制器中使用小写字母指定的主题名称。
    • 正如 Serge 所说,如果您的主题目录是小写的,只需将其大写即可
    • 注意:此文件夹名称的 CamelCase 约定仅适用于 UNIX。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      主题的资产文件必须这样放在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-&gt;theme = 'default';。它会影响资产查找,因为我们将资产放在小写文件夹 app/webroot/theme/default

      【讨论】:

        【解决方案4】:

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

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

        这将从主题目录调用 CSS。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-12
          • 1970-01-01
          • 1970-01-01
          • 2015-02-06
          • 1970-01-01
          • 2016-02-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多