Как уже было отмечено во введении, движок подключает файлы шаблонов, 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, т.е. от меньшего приоритета к большему. Итого, в этом примере движок будет проверять таким образом:
При этом, если файла нет и в теме default, CMS выдаст ошибку и прервёт работу.
Наследование распространяется и на CSS/JS файлы, при условии, что они были подключены через специальные методы. Если вы хотите впоследствии делать наследуемые темы, то в основном макете шаблона возможные заменяемые файлы стилей и/или javascript файлов необходимо подключать через методы $this→getTplFilePath()
, $this→getStylesFileName()
и $this→getJavascriptFileName()
.