【问题标题】:Magento 2: How do I override layouts.xmlMagento 2:如何覆盖 layouts.xml
【发布时间】:2017-12-11 21:10:41
【问题描述】:

我正在尝试覆盖文件 app/code/Magento/Theme/view/frontend/layouts.xml

我不想扩展这个文件,我想覆盖它,这样一些基本设计布局在管理中不可用。

【问题讨论】:

    标签: templates layout magento2


    【解决方案1】:

    我最终没有覆盖layouts.xml,而是做了以下操作

    创建一个新的Moduleapp/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;
        }
    }
    

    这将获取$options,然后根据$option['value'] 删除$remove 数组中的任何内容

    为了让这个运行,你需要覆盖app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_form.xml的一部分

    为此,请创建文件:app/code/&lt;Vendor&gt;/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/&lt;Vendor&gt;/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>
    

    【讨论】:

      猜你喜欢
      • 2016-05-18
      • 1970-01-01
      • 2019-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      相关资源
      最近更新 更多