Magento 2:如何覆盖 layouts.xml
Magento 2: How do I override layouts.xml
我正在尝试覆盖文件 app/code/Magento/Theme/view/frontend/layouts。xml
我不想扩展这个文件,我想覆盖它,这样一些基本的设计布局在管理员中不可用。
我没有覆盖 layouts.xml
,而是执行了以下操作
新建一个Module
: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;
}
}
这将获取 $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>
我正在尝试覆盖文件 app/code/Magento/Theme/view/frontend/layouts。xml
我不想扩展这个文件,我想覆盖它,这样一些基本的设计布局在管理员中不可用。
我没有覆盖 layouts.xml
,而是执行了以下操作
新建一个Module
: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;
}
}
这将获取 $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>