#xml #magento2 #block
#xml #magento2 #блок
Вопрос:
Не удается удалить определенный блок с именем:
product.info.options.configurable
В Magento 2.
Это файл макета, который я пытаюсь изменить:
vendor/magento/module-configurable-product/view/frontend/layout/catalog_product_view_type_configurable.xml
Его содержимое:
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<attribute name="class" value="page-product-configurable"/>
<referenceBlock name="head.components">
<block class="MagentoFrameworkViewElementJsComponents" name="configurableproduct_product_view_head_components" template="Magento_ConfigurableProduct::js/components.phtml"/>
</referenceBlock>
<referenceContainer name="product.info.type">
<block class="MagentoConfigurableProductBlockProductViewTypeConfigurable" name="product.info.configurable" as="product_type_data" template="Magento_Catalog::product/view/type/default.phtml"/>
<container name="product.info.configurable.extra" after="product.info.configurable" as="product_type_data_extra" label="Product Extra Info">
<block class="MagentoConfigurableProductBlockStockqtyTypeConfigurable" name="product.info.configurable.extra.catalog_inventory_stockqty_composite" template="Magento_CatalogInventory::stockqty/composite.phtml"/>
</container>
</referenceContainer>
<referenceBlock name="product.info.options.wrapper">
<block class="MagentoConfigurableProductBlockProductViewTypeConfigurable" name="product.info.options.configurable" as="options_configurable" before="-" template="Magento_ConfigurableProduct::product/view/type/options/configurable.phtml"/>
</referenceBlock>
</body>
</page>
Как вы можете видеть, последняя часть:
<referenceBlock name="product.info.options.wrapper">
<block class="MagentoConfigurableProductBlockProductViewTypeConfigurable" name="product.info.options.configurable" as="options_configurable" before="-" template="Magento_ConfigurableProduct::product/view/type/options/configurable.phtml"/>
</referenceBlock>
Я уверен, что мой код правильный, поскольку:
<referenceBlock name="product.info.options.wrapper" remove="true"/>
Можно успешно удалить блок-оболочку, и я вижу, что он удален. Это показывает мне, что:
Magento верен.
Мой файл макета считывается Magento.
Очистка кэша работает.
очистка сгенерированного кода работает.
То, как я пишу эту единственную строку, также работает, поскольку она действительно удаляет блок-оболочку.
Версия моей операционной системы, версии Magento subversion, composer, IDE, PHP и другие вещи также не имеют значения, поскольку команда remove работает для вышеуказанного блока.
Но затем, когда я пытаюсь:
<referenceBlock name="product.info.options.configurable" remove="true"/>
Это просто не работает.
Затем я помещаю все возможные комбинации строк, чтобы удалить это, которые я нашел на каждом форуме, который я мог найти, и он по-прежнему не удаляет нужный мне блок:
<referenceBlock name="options_configurable" remove="true"/>
<referenceBlock name="product.info.options.configurable" remove="true"/>
<referenceBlock name="options_configurable" display="false"/>
<referenceBlock name="product.info.options.configurable" display="false"/>
<referenceContainer name="product.info.options.wrapper">
<referenceBlock name="options_configurable" remove="true"/>
<referenceBlock name="product.info.options.configurable" remove="true"/>
<referenceBlock name="options_configurable" display="false"/>
<referenceBlock name="product.info.options.configurable" display="false"/>
</referenceContainer>
<referenceBlock name="product.info.options.wrapper">
<referenceBlock name="options_configurable" remove="true"/>
<referenceBlock name="product.info.options.configurable" remove="true"/>
<referenceBlock name="options_configurable" display="false"/>
<referenceBlock name="product.info.options.configurable" display="false"/>
</referenceBlock>
<referenceContainer name="content">
<referenceBlock name="options_configurable" remove="true"/>
<referenceBlock name="product.info.options.configurable" remove="true"/>
<referenceBlock name="options_configurable" display="false"/>
<referenceBlock name="product.info.options.configurable" display="false"/>
</referenceContainer>
Как вы можете видеть, я использовал все возможные варианты. Имя блока, его псевдоним, remove="true"
, display="false"
, внутри блока-оболочки, внутри блока-оболочки в виде контейнера, каждая из приведенных выше строк отдельно, комбинация приведенных выше строк и так далее, и так далее.
Любые идеи приветствуются. Заранее спасибо.
Ответ №1:
Итак!
В чем была проблема?
При включении подсказок пути к шаблону в серверной части Magento можно выполнить поиск по имени шаблона в файлах magento xml, чтобы выяснить, какой блок отображает этот шаблон, что я и сделал. Но попытка удалить этот блок не помогла, как я описал выше. Даже когда я удалил блок из исходного XML-файла magento. Итак, я понял, что шаблон отображается откуда-то еще, а XML-файл, который я пытаюсь переопределить, на самом деле является устаревшим устаревшим фрагментом кода, который является обычным явлением Magento!
Решение
Шаблон был вызван также в файле php:
vendor/magento/module-swatches/Block/Product/Renderer/Configurable.php
Который расширял исходный блок. Затем этот новый дочерний блок вызывается в другом XML-файле макета:
vendor/magento/module-swatches/view/frontend/layout/catalog_product_view_type_configurable.xml
Который имеет другое ссылочное имя:
product.info.options.swatches
Попытался удалить это вместо:
<referenceBlock name="product.info.options.swatches" remove="true"/>
И это сработало!
Краткие сведения
The layout.xml файл, который я пытался удалить, частично устарел, и файл шаблона использовался в другом блоке с другим ссылочным именем в другом XML-файле.