Когда я читаю документацию по макетам страниц ( http://devdocs.magento.com/guides/v2.0/frontend-dev-guide/layouts/layout-types.html#layout-types-page ), я вижу, что следующие инструкции в этом документе XML допускаются:
<container>
<referenceContainer>
<move>
<update>
Так как <referenceBlock name="block.name" remove="true" />
это не одна из разрешенных инструкций, как я могу удалить определенный элемент в определенном макете страницы?
То, что я хочу для топ-категорий, это совсем другой дизайн страницы. Мне не нужны определенные контейнеры и блоки для этого дизайна. Для этих категорий я хочу показывать только дочерние категории, а не товары.
Теперь я добавил следующие строки в макет своей страницы: (в design\frontend\Vendor\Name-of-theme\Magento_Theme\page_layout\catalog-blocks.xml
)
<move element="category.image" destination="delete"></move>
<move element="category.description" destination="delete"></move>
<move element="category.products" destination="delete"></move>
<move element="page.main.title" destination="delete"></move>
В design\frontend\Vendor\Name-of-theme\Magento_Theme\layouts.xml
я добавил:
<layout id="catalog-blocks">
<label translate="true">Catalog Blocks</label>
</layout>
Я дал все верхние категории этого макета страницы блоков каталога в админке.
Затем в основной макет ( design\frontend\Vendor\Name-of-theme\Magento_Theme\layout\default.xml
) я добавил:
<referenceBlock name="delete" remove="true" />
Таким образом, весь блок удаления будет удален со всеми вещами, которые я переместил сюда, в макете страницы. Это хорошо работает! Он достигает именно того, чего я хочу, но все это кажется мне немного хакерским.
Считается ли это хорошей практикой? Если нет, то что было бы хорошей альтернативой?
Изменить 1 : изменил remove
-tag в моем вопросе с правильным, чтобы избежать путаницы.
Редактировать 2 : немного больше информации о файлах и местах расположения файлов.
Это лучшая практика для удаления любого блока или контейнера в magento 2. Вы можете перейти
name attribute
внутрьname
в элементе ниже.Вы можете искать внутри системы magento 2, вы найдете синтаксис многих мест такой же, как и выше.
Его рекомендация magento way.If атрибут remove = "true", а затем добавить элемент в список удалить из этого макета.
В magento 1
<remove> element
действителен, но в Magento 2 вы должны установить синтаксис, как указано выше.источник
<referenceBlock name="block.name" remove="true" />
(я был неправ в отношенииremove
тега) в макете страницы напрямую, посколькуreferenceBlock
это тоже не разрешено. Мне все еще нужноmove
добавить элемент в «delete-container», а затем удалить его в основном файле макета. Что мне кажется странным.<block class="Magento\Framework\View\Element\Html\Links" name="top.links">
В этом случае вы можете использовать<referenceBlock name="top.links" remove="true" />
Макеты страниц должны использоваться только для создания каркаса / структуры страницы, а не для небольших изменений, таких как удаление блоков.
Чтобы удалить блок только для вашего нового макета, я думаю, что лучший способ - создать свой собственный дескриптор макета и внести в него изменения. Например, вы можете создать catalog_category_toplevel.xml, который использует ваш новый каркас / макет и удалить блоки там.
Поскольку это скорее внутренняя задача, я не чувствую себя достаточно комфортно, чтобы предоставить инструкции для этого извинения :( Эти две статьи от Alan Storm могут помочь вам в этом:
TL: DR
Если вы хотите сделать это и следовать рекомендациям, вам нужно создать новый маркер макета.
источник