Механизм наследования шаблонов
Как уже было отмечено во введении, движок подключает файлы шаблонов, css и javascript файлов по цепочке. В самом минимальном случае эта цепочка состоит из «ваша тема» ⇒ «тема default». Таким образом нет необходимости в копировании не изменённых файлов шаблонов из темы «default» в вашу тему.
Предположим, что у вас тема с названием my_best_template
. Движок просит подключить ему файл шаблона по относительному пути (путь от корня темы) controllers/content/category_view.tpl.php
. Этот файл ищется сначала по пути /templates/my_best_template/controllers/content/category_view.tpl.php, если его там нет, то подключается файл /templates/default/controllers/content/category_view.tpl.php. Такое поведение при подключении в самом простом случае.
Теперь предположим, что вы уже создали основную тему my_best_template
и хотите её минимально изменить под другим названием. Для этого создаётся новая тема, например new_my_best_template
. В ней вы, например, изменяете css стили и/или основной макет страницы и указываете, что эта тема должна наследоваться от темы my_best_template
. Для включения механизма наследования необходимо в корневой директории темы создать файл inherit.php в котором должен вернуться массив цепочки шаблонов, исключая основной шаблон (new_my_best_template
) и шаблон default
.
Таким образом, по нашему примеру, мы создадим файл по пути /templates/new_my_best_template/inherit.php
, содержимое файла будет таким:
return array( 'my_best_template' );
Если у вас в цепочке должно быть несколько тем для наследования, то указываются имена в порядке следования от темы default, т.е. от меньшего приоритета к большему. Итого, в этом примере движок будет проверять таким образом:
- Проверяется наличие файла по пути /templates/new_my_best_template/controllers/content/category_view.tpl.php. Если файл обнаружен - он сразу подключается.
- Проверяется наличие файла по пути /templates/my_best_template/controllers/content/category_view.tpl.php. Если файл обнаружен - он сразу подключается.
- И, наконец, если ранее файл не был найден, то подключается /templates/default/controllers/content/category_view.tpl.php.
При этом, если файла нет и в теме default, CMS выдаст ошибку и прервёт работу.
Наследование распространяется и на CSS/JS файлы, при условии, что они были подключены через специальные методы. Если вы хотите впоследствии делать наследуемые темы, то в основном макете шаблона возможные заменяемые файлы стилей и/или javascript файлов необходимо подключать через методы $this→getTplFilePath()
, $this→getStylesFileName()
и $this→getJavascriptFileName()
.
Начиная с InstantCMS 2.14.0 использование файла inherit.php устарело. Используйте вместо него manifest.php, в котором помимо наследования, можно указывать и другие параметры.
Формат файла manifest.php:
return [ // Наследование от шаблона // Здесь нужно указывать цепочку, как указывали в inherit.php 'inherit' => ['my_best_template'], // Название шаблона. Будет использоваться в селектах выбора шаблона 'title' => 'Мой шаблон', // Авторство 'author' => [ 'name' => 'InstantCMS Team', 'url' => 'https://instantcms.ru', 'help' => 'https://docs.instantcms.ru/manual/settings/templates' ], // Свойства шаблона 'properties' => [ // На каком фреймворке построен шаблон 'vendor' => 'bootstrap4', // Если указан CSS препроцессор, то CMS будет пытаться автоматически компилировать // CSS файлы. В комплекте поддержка только SCSS 'style_middleware' => 'scss', // Имеет ли шаблон опции 'has_options' => true, // Имеет ли шаблон поддержку тем для профилей 'has_profile_themes_support' => false, // Имеет ли шаблон опции темы профилей 'has_profile_themes_options' => false, // Шаблон построен на динамической схеме? 'is_dynamic_layout' => true, // Шаблон реализует админку? 'is_backend' => false, // Шаблон реализует frontend? 'is_frontend' => true, // Любые атрибуты тега <htm> лайоута >= 2.17.0 'html_attr' => [ 'class' => 'min-vh-100' // будет <html class="min-vh-100"/> ] ] ];