Ресурс Темы Не работает В CakePHP 2.2.4
Я видел много вопросов, касающихся ссылок на ресурсы темы в 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
со следующим кодом
Макет по умолчанию.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 возвращают ошибку
Не удалось получить файлы css и изображений в папке webroot тем cakephp
Https://groups.google.com/forum /#!тема/торт-php/xaraugmonsc
Https://groups.google.com/forum /#!тема/торт-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 answers
CakePHP использует соглашение о верблюжьем корпусе. Попробуйте изменить название своей темы, например. default
до Default
. Это случилось и со мной тоже.
Моя тема называлась megaecia
, и ни сообщения об ошибке, ни журнала ничего (потому что я был Windows, в unix этого не происходит), затем я сменил на Megaecia
, и все работает успешно.
Надеюсь, я помог.
Хорошо, возможно, это очевидно...но моя таблица стилей использует функции, которые я создал в пользовательском помощнике. Когда таблица стилей расположена в app/webroot/css
, проблем нет, но когда таблица стилей расположена в app/View/Themed/Default/webroot/css
, она не может отображаться должным образом и, следовательно, содержит ссылки на несуществующую таблицу стилей, которая должна находиться в app/webroot/css
. Я удалил помощников из таблицы стилей моей темы, и теперь все работает.
Я также изменил название темы с "по умолчанию" на "По умолчанию", чтобы изображения для правильного отображения с использованием $this->Html->image
(и, предположительно, также файлов таблиц стилей и JS), даже если файлы представления были правильно связаны независимо от заглавной буквы.
Файлы ресурсов темы должны быть помещены в папку 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, как ответил Габриэль Оук. На самом деле у меня была проблема, когда на linux-машине CakePHP не смог найти мой макет, потому что я назвал свою папку темы в нижнем регистре, как app/View/Themed/default/Layouts
.
И еще одно: в теме контроллера также следует указывать строчные буквы: $this->theme = 'default';
. Это влияет на поиск активов, так как мы разместили наши активы в папке со строчными буквами app/webroot/theme/default
.
Если вы пытаетесь получить доступ к ресурсу CSS из подкаталога веб-корня вашей темы, обязательно добавьте /
в начале.
Т.е.
$this->Html->css('/plugins/bespoke.css');
Это вызовет CSS из каталога тем.
Если вы не добавили /
в начале, cake не будет искать папку темы, вместо этого он попытается загрузить CSS из каталога webroot вашего приложения по умолчанию