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

Примечание

Большая часть информации в этой статье относится только к 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 темы-клона.

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

Примечание

Например, тема Responsive является родительской для темы Nova. Это означает следующее:

  • Если клонировать тему Reponsive, ее файлы не будут скопированы в папку с клонированной темой. Создастся только файл manifest.json. Вам придется скопировать в клонированную тему нужные файлы и шаблоны самостоятельно.
  • Если клонировать тему Nova, ее файлы будут автоматически скопированы в папку клонированной темы. При изменении какого-либо файла в теме Nova в новой версии CS-Cart соответствующий файл темы-клона не обновляется. Это происходит вследствие принципа работы клонирования.

Клонирование родительских и дочерних тем работает по-разному, т.к. папки с родительской и дочерней темами включают разные наборы файлов. Дочерней теме требуются только те файлы, которые отличают ее от родительской. При клонировании дочерней темы все ее файлы копируются, в результате чего создается эквивалент дочерней темы. Чтобы сделать эквивалент темы, которая не является дочерней, вам не нужны никакие файлы. Добавление любого файла в эту папку должно быть осознанным решением с вашей стороны, т.к. вы несете ответственность за поддержание темы-клона.

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

При установке зависимой темы файлы родительской темы не объединяются с файлами зависимой темы. Из папки 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 не установлена в магазине, то поиск обработчиков хуков в ней не выполняется.