系统学习magento二次开发,推荐小册:《Magento中文全栈二次开发 》
本小册面向Magento2以上版本,书代码及示例兼容magento2.0-2.4版本。涵盖了magento前端开发,后端开发,magento2主题,magento2重写,magento2 layout,magento2控制器,magento2 block等相关内容,带领您成为magento开发技术专家。
在 Magento 2 中,您可以通过使用扩展属性来添加额外的属性值到产品、分类、订单等实体对象。下面是一个示例,展示如何在 Magento 2 中为产品添加一个扩展属性。
首先,我们需要创建一个 InstallData.php 文件,在此文件中添加以下代码:
<?php
namespace Vendor\Module\Setup;
use Magento\Catalog\Setup\CategorySetupFactory;
use Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface;
use Magento\Eav\Model\Entity\Attribute\Source\Boolean;
use Magento\Eav\Model\Entity\Attribute\Source\Table;
use Magento\Eav\Setup\EavSetup;
use Magento\Eav\Setup\EavSetupFactory;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
class InstallData implements InstallDataInterface
{
/**
* @var CategorySetupFactory
*/
private $categorySetupFactory;
/**
* @var EavSetupFactory
*/
private $eavSetupFactory;
/**
* InstallData constructor.
*
* @param CategorySetupFactory $categorySetupFactory
* @param EavSetupFactory $eavSetupFactory
*/
public function __construct(
CategorySetupFactory $categorySetupFactory,
EavSetupFactory $eavSetupFactory
) {
$this->categorySetupFactory = $categorySetupFactory;
$this->eavSetupFactory = $eavSetupFactory;
}
/**
* {@inheritdoc}
*/
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
$setup->startSetup();
$categorySetup = $this->categorySetupFactory->create(['setup' => $setup]);
$eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
$entityTypeId = $categorySetup->getEntityTypeId('catalog_product');
$attributeSetId = $categorySetup->getDefaultAttributeSetId($entityTypeId);
$eavSetup->addAttribute(
\Magento\Catalog\Model\Product::ENTITY,
'my_custom_attribute',
[
'type' => 'int',
'label' => 'My Custom Attribute',
'input' => 'boolean',
'source' => Boolean::class,
'frontend' => '',
'required' => false,
'sort_order' => 50,
'global' => ScopedAttributeInterface::SCOPE_GLOBAL,
'used_in_product_listing' => true,
'visible_on_front' => true,
'apply_to' => ''
]
);
$setup->endSetup();
}
}在上面的代码中,我们使用了 Magento 的 EAV (Entity-Attribute-Value) 模型,使用 addAttribute 方法添加了一个名为 "my_custom_attribute" 的属性,它的类型为布尔值 (int),并使用 Boolean 类型的源。
接下来,我们需要在模块的 module.xml 文件中添加安装程序的标记,以便 Magento 可以在安装模块时运行安装程序。在 <module> 标记中添加以下代码:
<module name="Vendor_Module" setup_version="1.0.0"> <sequence> <module name="Magento_Catalog"/> </sequence> <data> <upgrade_data> <script_reference name="Vendor_Module"/> </upgrade_data> </data> </module>