Расширение XML-файлов макета, не работающих в дочерней теме, в другом & lt; vendor & gt; Что касается родительской темы: Magento 2.0.4

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

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

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

  1. Создана еще одна дочерняя тема themechild вышеуказанной темы themeparent (который сам по себе является ребенком от magento blank). Эта дочерняя тема создается в другой папке поставщика, т.е. 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 файлов работает нормально.

Уже пробовал с очисткой общественный / статический а также вар папки 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. (обратите внимание, продавец тот же)

Результат: Layout .xml загружается правильно и отлично работает в childtheme.

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

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

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

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

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

2

Решение

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

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

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

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

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

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

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

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

Я нашел очень маленькую вещь, но очень большую вещь

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

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

Благодарю.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]