Документация 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().


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

dev/templates/inherits.txt · Последние изменения: 05.12.2016 09:46 — fuze