Темы в CakePHP - это просто плагины, предоставляющие файлы шаблонов оформления. См. раздел Создание собственных плагинов. Вы можете исползовать преимущества тем, делая простой и быстрой смену внешнего вида ваших страниц. В дополнение к файлам шаблонов, они также могут предоставлять хелперы и ячейки, если они требуются вашей теме оформления. При использовании ячеек и хелперов из вашей темы, вам также придется использовать plugin syntax.
Чтобы использовать темы, установите название темы в экшене вашего контроллера,
либо в коллбэк-методе beforeRender()
:
class ExamplesController extends AppController
{
// Для CakePHP ниже версии 3.1
public $theme = 'Modern';
public function beforeRender(\Cake\Event\Event $event)
{
$this->viewBuilder()->setTheme('Modern');
// Для CakePHP ниже версии 3.5
$this->viewBuilder()->theme('Modern');
}
}
Файлы шаблона темы должны находиться в паке плагина с соответствующим названием. К примеру, использованная выше тема может быть найдена в plugins/Modern/src/Template. Важно помнить, что CakePHP ожидает имена плагинов/тем в стиле PascalCase. В остальном, структура папки plugins/Modern/src/Template аналогична используемой в src/Template/.
Например, файл представления для экшена edit
контроллера Posts
будет
расположен в файле plugins/Modern/src/Template/Posts/edit.ctp. Файлы макетов
будут находиться в plugins/Modern/src/Template/Layout/. Вы также можете
создавать кастомизированные шаблоны для плагинов с помощью тем. Если бы у вас
был бы плагин под названием „Cms“, который бы содержал контроллер
TagsController
, тема Modern
могла бы предоставить шаблон
plugins/Modern/src/Template/Plugin/Cms/Tags/edit.ctp, заменяющий шаблон
edit
плагина.
Если файл представления не может быть найден внутри темы, CakePHP попытается обнаружить файл представления в папке src/Template/. Таким образом, вы можете создать файлы главного шаблона, и просто переопределять их в папке с вашей темой.
Если ваша тема также действует еще и в качестве плагина, не забудьте проверить, что она прописана в файле config/bootstrap.php. Например:
/**
* Загружаем наш плагин с темой в папке /plugins/Modern
*/
Plugin::load('Modern');
Так как темы - это стандартные плагины CakePHP, они могут включать в себя все
необходимые ресурсы в своей папке webroot
. Это позволяет с легкостью комплектовать
и распространять темы. Во время разработки запросы к ресурсам темы бутдут
обабатываться Cake\Routing\Dispatcher
. Для повышения производительности
на стадии продакшена рекомендуется использовать symlink-assets.
Все встроенные хелперы CakePHP отлично работают с темами, и будут всегда создавать для
них корректные пути автоматически. Подобно файлам шаблонов, если нужный файл будет
отсутствовать в папке темы, будет использована главная папка webroot
:
// В теме под названием 'purple_cupcake'
$this->Html->css('main.css');
// создается путь
/purple_cupcake/css/main.css
// и ссылается на
plugins/PurpleCupcake/webroot/css/main.css