Документация InstantCMS

для администраторов и разработчиков

Инструменты пользователя

Инструменты сайта


dev:templates:inherits

Механизм наследования шаблонов

Как уже было отмечено во введении, движок подключает файлы шаблонов, 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, т.е. от меньшего приоритета к большему. Итого, в этом примере движок будет проверять таким образом:

  1. Проверяется наличие файла по пути /templates/new_my_best_template/controllers/content/category_view.tpl.php. Если файл обнаружен - он сразу подключается.
  2. Проверяется наличие файла по пути /templates/my_best_template/controllers/content/category_view.tpl.php. Если файл обнаружен - он сразу подключается.
  3. И, наконец, если ранее файл не был найден, то подключается /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
    ]
];

К оглавлению раздела

dev/templates/inherits.txt · Последнее изменение: 24.11.2020 20:41 — fuze