如何以编程方式有条件地从布局中删除块或容器?

Nil*_*are 4 layout rendering block magento2 magento2.2

如果有人想根据某些条件从产品详细信息页面中删除诸如 product.info.main 之类的容器(块),或者产品具有已分配值的属性。那么实现This的最佳方法是什么?

谢谢

Nil*_*are 6

我们可以使用事件观察器方法......

在YOUR_VENDOR\YOUR_MODULE\etc\frontend\events.xml文件中,需要添加以下代码:

<event name="layout_generate_blocks_after">
    <observer name="personalize-theme-pdp-customize" instance="YOUR_VENDOR\YOUR_MODULE\Observer\ApplyThemeCustomizationObserver" />
</event>
Run Code Online (Sandbox Code Playgroud)

并且在YOUR_VENDOR\YOUR_MODULE\Observer\ApplyThemeCustomizationObserver.php文件中,需要添加以下代码:

public function execute(Observer $observer)
{
    $action = $observer->getData('full_action_name');
    if ($action !== 'catalog_product_view') {
        return;
    }

    $product = $this->_registry->registry('product');

    if ($product) {
        $attribute = $product->getCustomAttribute('g3d_app_url_default');
        if ($attribute && $attribute->getValue()) {
            /** @var \Magento\Framework\View\Layout $layout */
            $layout = $observer->getData('layout');
            $layout->unsetElement('product.info.main');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

可能……这对某人有帮助……

谢谢,