Родительские темы

Примечание

Большая часть информации в этой статье относится только к CS-Cart 4.4.1 и более новым версиям.

Общая информация

Если у темы X в файле manifest.json в поле parent_theme указана тема Y, то тема X является зависимой темой (или дочерней темой), а тема Yродительской.

Зависимая тема содержит только те файлы, которые отличаются от файлов родительской темы, и использует содержимое (шаблоны, лого и т.д.) родительской темы, когда это необходимо.

  • Объединение папок css, media и templates родительской и зависимой тем происходит в реальном времени.
    • Если в зависимой теме не хватает определённого файла, будет использован соответствующий файл из родительской темы.
    • Если в зависимой теме присутствуют файлы, которых нет в родительской теме (например, шаблоны детальной страницы товаров и списка товаров, оболочки блоков или статичные шаблоны), то при слиянии в дочерней теме будут и эти файлы, и файлы родительской темы.
    • Если один и тот же файл присутствует в обеих темах, предпочтение отдаётся файлу зависимой темы.
  • Папки layouts и styles из разных тем не объединяются.
    • Если у зависимой темы есть собственные макеты, то используются только они. В противном случае будут использоваться макеты родительской темы.
    • Стили используются только от зависимой темы.
  • Изображения могут быть загружены из родительской темы с помощью переменной $images_dir.
    • Если у темы есть родительская тема, то $images_dir в Smarty-шаблонах будет указывать на папку media/images, расположенную в родительской теме.
    • Если у темы нет родительской темы, то переменная будет указывать на папку media/images, расположенную в самой теме.

Примечание

Чтобы указывать на папку media/images, расположенную в самой теме, используйте в Smarty-шаблонах переменную $self_images_dir.

Клонирование темы

  • Если у исходной темы нет родительской темы, то файлы исходной темы не будут скопированы в директорию темы-клона.

    Тема-клон будет состоять только из файла manifest.json и папки /media/images/ с логотипами темы. Название исходной темы будет указано в поле parent_theme файла manifest.json темы-клона.

  • Если у исходной темы есть родительская тема, содержимое исходной темы будет целиком скопировано в тему-клон.

Установка тем

При установке зависимой темы файлы родительской темы не объединяются с файлами зависимой темы. Из папки var/themes_repository в папку design/themes копируются только файлы зависимой темы.

Обновление файлов темы

Центр обновлений не обновляет файлы пользовательских тем. При обновлении изменяются только темы Responsive и Basic.

Установка файлов модулей

При установке модулей файлы, относящиеся к темам (такие как стили, шаблоны и т.д.), добавляются только к тем темам, для которых они созданы, но не копируются в зависимые темы.

Например, содержимое var/themes_repository/responsive/templates/addons/[addon] будет скопировано только в папку design/themes/responsive/templates/addons/[addon].

Модули, добавляющие файлы шаблонов в тему Basic, будут корректно работать только в теме Basic и темах, зависимых от неё. Если необходимые шаблоны отсутствуют в текущей теме, CS-Cart не будет использовать шаблоны темы Basic.

Использование TPL-хуков от темы Responsive

Любая тема, независимо от того, является она зависимой от Responsive или нет, может использовать обработчики SMARTY-хуков из темы Responsive. Так модули, предоставляющие шаблоны только для стандартной темы Responsive, в той или иной мере могут работать в других темах.

Предположим, у нас есть такая структура файлов:

design
└── themes
    ├── child
    │   └── templates
    │       └── addons
    │           └── styles_fixer
    │               └── hooks
    │                   └── index
    │                       └── styles.post.tpl
    ├── parent
    │   └── templates
    │       └── addons
    │           └── styles_fixer
    │               └── hooks
    │                   └── index
    │                       └── styles.post.tpl
    └── responsive
        └── templates
            └── addons
                └── styles_fixer
                    └── hooks
                        └── index
                            └── styles.post.tpl

Активная тема — child, её родитель — parent. Тогда обработчик хука index:styles ищется в темах следующем порядке: child → parent → responsive. Используется первый из найденных обработчиков.

Примечание

Если тема Responsive не установлена в магазине, то поиск обработчиков хуков в ней не выполняется.