Расширение файлов Layout .xml не работает в дочерней теме в другом ‹vendor› в родительской теме: Magento 2.0.4

Действия по воспроизведению

  1. Установлен Magento 2.0.4 на WAMP server 3.0, Windows 10 Pro - 32bit, PHP 5.6.15, MySQL 5.7.9
  2. Создана дочерняя тема themeparent для Magento_blank в app \ design \ frontend \ Vendor1 \ themeparent с несколькими XML-файлами макета для расширения вместе с шаблоном. phtml файлы. Активируется от админа. Работает нормально.

theme.xml => <parent>Magento/blank</parent>

  1. Создана еще одна дочерняя тема themechild вышеупомянутой темы themeparent (которая сама является дочерней для пустого magento). Эта дочерняя тема создается в папке другого поставщика, то есть Vendor2. Путь к этой теме: app \ design \ frontend \ Vendor2 \ themechild. Внутри создан XML-файл макета для расширения макета родительской темы. Активировал эту дочернюю тему второго уровня от администратора. Файлы .xml даже не обрабатываются. Не работает.

theme.xml => <parent>Vendor1/themeparent</parent>

3b. Хотя файлы шаблонов .phtml или .css, существующие в childtheme, работают нормально, если соответствующие контейнеры / блоки макета вызываются из файлов макета Vendor1 \ themeparent.

  1. Если для теста та же дочерняя тема childtheme помещена внутри того же поставщика ее родительского объекта, то есть Vendor1, путь к теме станет app \ design \ frontend \ Vendor1 \ themechild, а затем те же файлы макета .xml работают нормально.

Уже пробовал очистить папки public / static и var от magento. Также пробовал после запуска с командами cli

php bin/magento setup:static-content:deploy
php bin/magento indexer:reindex 
php bin/magento setup:upgrade

Но ничего не решило.

Ожидаемый результат

Требуемое наследование темы выглядит следующим образом:

Magento_blank => Vendor1 _themeparent => Vendor2 _childtheme. (обратите внимание, поставщик отличается)

Результат: макет .xml не загружается в дочернюю тему.

Но если для теста наследование устроило так:

Magento_blank => Vendor1 _themeparent => Vendor1 _childtheme. (обратите внимание, поставщик такой же)

Результат: макет .xml загружается правильно и отлично работает в детской теме.

Согласно рекомендациям Magento 2 по http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/themes/theme-inherit.html#set-a-parent-theme четко указано что «Родительская и дочерняя темы могут принадлежать разным поставщикам. Например, ваша настраиваемая тема может быть унаследована от пустой темы Magento». Итак, если я создаю дочернюю тему второго уровня (у поставщика 2) из ​​родительской темы (у поставщика 1), которая является дочерней по отношению к Magento_blank (поставщик: Magento), в идеале это должно работать нормально. Но этого не происходит. Ни один из XML-файлов макета не обрабатывается для вывода, если они принадлежат другим поставщикам. Если я поставлю обе темы у одного поставщика, они будут работать нормально.

Фактический результат

Расширение .xml-файлов макета в дочерней теме 2-го уровня в другой папке поставщика не работает.

Почему Magento 2.0.4 не работает должным образом для двухуровневого наследования тем от разных поставщиков? Это серьезная проблема, как если бы вы предполагали, что где-то купили платную тему (которую они создали, унаследовав Magento_blank) , и теперь вы хотите создать свою дочернюю тему этой платной темы, но в другой папке vendorname (очевидно, под названием вашей компании), вы не сможете этого сделать! У вас есть только два варианта: либо сделать дочернюю тему внутри имени поставщика; или отредактируйте их файлы .xml тем, чтобы вызвать файлы шаблонов вашей дочерней темы или .css / .js (если в ur vendorname); во втором случае обновления будут явно потеряны, что странно и не рекомендуется.

Тогда какое решение ??


person Shashank Shekhar    schedule 27.04.2016    source источник


Ответы (1)


Дав ему больше времени, чтобы найти причину, я создал разные наборы родительских и дочерних тем с разными именами поставщиков, проверил их на той же установке, и все сработало! Я был поражен, сопоставил путь с тем, что сделал ранее в своих темах; старый и новый оба точно такие же. Снова активировал мою детскую тему, и, на удивление, это не сработало. Больше удивлен и сыты по горло. :(

Затем я покопался в базе данных magento и обнаружил одну удивительную вещь. В таблице mysql 'темы базы данных magento каким-то образом столбец' type ', соответствующий моей дочерней теме, имел значение, установленное как' 1 'и все остальные были установлены в «0». Под подозрением, я попытался найти, что это означает, по комментарию в названии столбца таблицы, который показывает ..

0 => Physical
1 => Virtual
2 => Staging

Я предположил, что это может быть причиной, и вручную установил для столбца type значение 0, соответствующее моей дочерней теме. Очищены папки var и public / static. Перепроверил, и вуаля! это сработало!!

Эта небольшая проблема потратила мои 4-5 дней без решения. Даже деактивация-активация или переключение тем от администратора не сбрасывали его значение до 0 (оно всегда оставалось 1), и поэтому это никогда не срабатывало.

Чтобы подтвердить перекрестную проверку, я удалил эту строку из таблицы тем базы данных, переустановил тему, запустил php bin/magento setup:upgrade и теперь установил значение 0, что идеально и работает автоматически.

Не знаю, как он был установлен на 1 и когда. Должно быть 0.

В любом случае, проблема решена, и

Я нашел очень маленькую вещь, но ОЧЕНЬ БОЛЬШУЮ вещь

, что может тратить время разработчиков, если не известно. Но, как ни странно, этот глупый момент не упоминается в Интернете и даже не в документации Magento, которая должна быть там. Надеюсь, что это объяснение и решение помогут в дальнейшем большему количеству людей, которые будут разочарованы той же проблемой. :)

Эта проблема также поднимается и объясняется на https://github.com/magento/magento2/issues/4330

Спасибо.

person Shashank Shekhar    schedule 28.04.2016
comment
Спасибо за подробности, столкнулся с одним и тем же сценарием через много дней. - person Deepika Janiyani; 22.09.2017
comment
Я думаю, что этот сценарий происходит в тех ситуациях, когда мы развертываем тему, а затем временно удаляем ее, в этом случае он устанавливает тип как 1. Когда тема добавляется обратно, тип не обновляется. - person Deepika Janiyani; 22.09.2017