本文的主题是通过编程来添加分类属性,列举了带有 PHP 脚本的具体步骤。如果有安装脚本的权限,当你没有编程经验时,都不用浪费时间去学习或者修改任何代码,只需要复制粘贴接下来的代码片段就可以。
概览
-
第一步,创建 InstallData.php
-
第二步,定义 install() 方法
-
第三步,创建分类属性
-
第四步,展示分类属性
第一步,创建文件 InstallData.php
从 InstallData 类开始,app/code/Mageplaza/HelloWorld/Setup/InstallData.php 内容如下:
<?php
namespace Mageplaza\HelloWorld\Setup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
class InstallData implements InstallDataInterface
{
private $eavSetupFactory;
public function __construct(EavSetupFactory $eavSetupFactory)
{
$this->eavSetupFactory = $eavSetupFactory;
}
}
第二步,定义 install() 方法
<?php
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
}
第三步,编程的方式来创建分类属性
<?php
namespace Mageplaza\HelloWorld\Setup;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Eav\Setup\EavSetupFactory;
class InstallData implements InstallDataInterface
{
private $eavSetupFactory;
public function __construct(EavSetupFactory $eavSetupFactory)
{
$this->eavSetupFactory = $eavSetupFactory;
}
public function install(
ModuleDataSetupInterface $setup,
ModuleContextInterface $context
)
{
$eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
$eavSetup->addAttribute(
\Magento\Catalog\Model\Category::ENTITY,
'mp_new_attribute',
[
'type' => 'varchar',
'label' => 'Mageplaza Attribute',
'input' => 'text',
'sort_order' => 100,
'source' => '',
'global' => 1,
'visible' => true,
'required' => false,
'user_defined' => false,
'default' => null,
'group' => '',
'backend' => ''
]
);
}
}
第四步,展示分类属性
分类 UI 组件通过 categroy_form.xml 文件的配置来渲染的,所有这个名字的文件会被合并到一起。所以我们在目录 app/code/Mageplaza/HelloWorld/view/adminhtml/ui_component/ 下通过创建文件 category_form.xml 来添加一个字段。
这时在 “general” 下添加一个字段的完整的例子。需要注意的是 mp_new_attribute 应该和创建的属性 ID 一致。
<?xml version="1.0" ?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<fieldset name="general">
<field name="mp_new_attribute">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="required" xsi:type="boolean">false</item>
<item name="validation" xsi:type="array">
<item name="required-entry" xsi:type="boolean">false</item>
</item>
<item name="sortOrder" xsi:type="number">333</item>
<item name="dataType" xsi:type="string">string</item>
<item name="formElement" xsi:type="string">input</item>
<item name="label" translate="true" xsi:type="string">Mageplaza new attribute</item>
</item>
</argument>
</field>
</fieldset>
</form>
以上完成后,执行升级,清缓存并且检查结果。
从后台管理中去到 Product > Catagories 中检查结果,如下图所示: