Типы тем в Magento 2

В Magento существует несколько типов тем. В этой статье мы расскажем, какие существуют темы в Magento 2 и рассмотрим их функционал. Статья будет интересна разработчикам и владельцам интернет-магазинов.

В Magento 2 существует 3 типа тем:

  • Physical
  • Virtual
  • Staging

vendor/magento/framework/View/Design/ThemeInterface.php:

/**
 * Physical theme type
 */
const TYPE_PHYSICAL = 0;

/**
 * Virtual theme type
 */
const TYPE_VIRTUAL = 1;

/**
 * Staging theme type
 */
const TYPE_STAGING = 2;

Physical - физическая тема, то есть вся конфигурация находится в файлах. К физической теме, например, относятся Magento/luma, Magento/blank или любая другая, которая конфигурируется файлами. Можно считать physical тему “классической”, которая используется в повседневной жизни разработчиков.

Что касается типов virtual и staging, в документации нет четкой информации на этот счет, скорее всего разработчики Magento заложили это на будущее, на новый функционал.

Скорее всего разработчики Magento не рассчитывали, но, к сожалению, у многих девелоперов, в том числе и у нас, случился “прямой контакт” с темой типа virtual.

Случилось это при следующем (самом распространенном) кейсе:

  1. Идет работа в git с веткой (branch1) в которой есть тема типа physical.
  2. Нам понадобилось переключиться на другую ветку (branch2), в которой физически темы нет, то есть нет файлов.
  3. При возвращении на ветку (branch1) продолжаем работу дальше, модифицируем файлы, добавляем новые, но результатов не видим, изменения не применяются.

Как мы полагаем, на втором шаге система видит, что тема в базе есть, а файлов нет, она меняет идентификатор типа темы в таблице theme с 0 на 1, то есть делает тему “виртуальной”.

Magento 2: типы тем

Иными словами, чтобы изменения в теме снова применялись, необходимо в базе сменить тип темы с виртуальной на физическую, то есть с 1 на 0.

Если посмотреть, как выглядят настройки виртуальной темы в админке (content - design - themes), то мы увидим следующее:

Magento 2: типы тем

Есть 2 интересные вкладки: CSS editor и JS editor:

CSS editor:

Magento 2: типы тем

JS editor:

Magento 2: типы тем

Функционал этих вкладкок, разумеется, не работает, или работает некорректно. Неудивительно, потому что он официально не представлен.

Если подытожить, Virtual - это виртуальная тема, не рассчитанная на работу с файлами и предназначенная как альтернативное решение для небольших модификаций: CSS правки, добавление небольших скриптов. Хорошим примером виртуальной темы может послужить, например, новогодняя тема (поменян фон, добавлен скрипт падающих снежинок), которая устанавливается на период новогодних каникул. При этом кейсе нет необходимости “физически” создавать тему и лишний раз деплоить продакшен сервер.

Staging - с этим типом темы, к сожалению (или к счастью), никто не сталкивался. Если попробовать в базе выставить тип темы staging, то она, в отличие от virtual, вовсе пропадает из панели администратора.

На этом все, будьте бдительны при работе с темами!