系统学习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>