Не удается удалить блок product.info.options.configurable в Magento 2 - PullRequest
1 голос
/ 12 апреля 2019

Невозможно удалить определенный блок с именем:

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="Magento\Framework\View\Element\Js\Components" name="configurableproduct_product_view_head_components" template="Magento_ConfigurableProduct::js/components.phtml"/>
        </referenceBlock>
        <referenceContainer name="product.info.type">
            <block class="Magento\ConfigurableProduct\Block\Product\View\Type\Configurable" 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="Magento\ConfigurableProduct\Block\Stockqty\Type\Configurable" 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="Magento\ConfigurableProduct\Block\Product\View\Type\Configurable" 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="Magento\ConfigurableProduct\Block\Product\View\Type\Configurable" 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 и другие версии также не имеют значения, так как команда удаления работает для вышеуказанного блока.Но потом, когда я пытаюсь:

<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 Ответ

1 голос
/ 12 апреля 2019

Итак!

В чем проблема?

При включении подсказок пути к шаблону в бэкенде Magento можно искать имя шаблона в файлах magento xml длявыяснить, какой блок отображает этот шаблон, что я и сделал.Но попытка удалить этот блок не помогла, как я описал выше.Даже когда я удалил блок из исходного xml-файла magento .Итак, я понял, что шаблон визуализируется откуда-то еще, и XML-файл, который я пытаюсь переопределить, на самом деле является осиротевшим устаревшим фрагментом кода, который обычно используется Magento!

Solution

Шаблон был также вызван в 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"/>

И это сработало!

Сводка

Файл layout.xml, который я пытался удалить, частично его устарел, а шаблонфайл использовался в другом блоке с другим ссылочным именем в другом XML-файле.

...