magento2 – Magento 2删除布局选项

我正在Magento 2中创建一个自定义主题.

在页面,类别,产品等的“设计”选项卡中选择布局时,我有以下选项:

> 1列
> 2列左栏
> 2列右栏
> 3列

我已经想出如何将自己的布局添加到这组选项中.

我的问题:如何删除(或捏 – 隐藏)不需要的核心布局?例如,我的主题根本不需要3列布局,因此我不希望这是一个选项.

最佳答案 好的,这是你需要做的:

创建一个新模块:app / code /< Vendor> / Cms

您需要确保模块已正确注册.

然后创建文件:app / code /< Vendor> /Cms/Model/PageLayout.php

<?php

namespace <Vendor>\Cms\Model;

use Magento\Cms\Model\Page\Source\PageLayout as BasePageLayout;

class PageLayout extends BasePageLayout{

    public function toOptionArray()
    {
        $options = parent::toOptionArray();
        $remove = [
            "empty",
            "1column",
            "2columns-left",
            "2columns-right",
            "3columns",
        ];

        foreach($options as $key => $layout){
            if(in_array($layout["value"], $remove)){
                unset($options[$key]);
            }
        }

        return $options;
    }
}

这将获得$选项,然后根据$option [‘value’]删除$remove数组中的任何选项

为了进行此运行,您需要覆盖部分app / code / Magento / Cms / view / adminhtml / ui_component / cms_page_form.xml

为此,请创建文件:app / code /< Vendor> /Cms/view/adminhtml/ui_component/cms_page_form.xml

<?xml version="1.0" encoding="UTF-8" ?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <fieldset name="design">
        <field name="page_layout">
            <argument name="data" xsi:type="array">
                <item name="options" xsi:type="object"><Vendor>\Cms\Model\PageLayout</item>
            </argument>
        </field>
    </fieldset>
</form>

我们现在告诉ui_component字段使用我们的新模型来检索选项.

您还可以创建文件app / code /< Vendor> /Cms/view/adminhtml/ui_component/cms_page_listing.xml

<?xml version="1.0" encoding="UTF-8"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <columns name="cms_page_columns">
        <column name="page_layout">
            <argument name="data" xsi:type="array">
                <item name="options" xsi:type="object"><Vendor>\Cms\Model\PageLayout</item>
            </argument>
        </column>
    </columns>
</listing>
点赞