Не удается удалить блок product.info.options.конфигурируемый в Magento 2

#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-файле.