【问题标题】:Magento: add new attribute to all productsMagento:为所有产品添加新属性
【发布时间】:2012-03-07 09:59:19
【问题描述】:

我想为所有产品添加一个新属性。我已经用安装脚​​本槽完成了它

$installer = $this;
$installer->startSetup();

$this->addAttribute('catalog_product','test2',array(
    'label'     => 'test2',
    'type'      => 'varchar',
    'visible'   => true,
    'required'  => false,
    'required'  => 0
));

但是如何通过

向该属性添加值
$entityTypeId     = $installer->getEntityTypeId('catalog_product');
$attributeSetId   = $installer->getDefaultAttributeSetId($entityTypeId);
$attributeGroupId = $installer->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
$installer->addAttributeGroup($entityTypeId, 'Default', 'test2', 0);
$installer->endSetup();

【问题讨论】:

    标签: magento attributes entity-attribute-value


    【解决方案1】:

    这是我用来创建自己的自定义产品属性的示例代码之一:-

    $installer = $this;
    /* @var $installer Mage_Core_Model_Resource_Setup */
    
    $installer->startSetup();
    
    $attrCode = 'test2';
    $attrGroupName = 'Test Group';
    $attrLabel = 'Test 2';
    $attrNote = 'Test Note';
    
    $objCatalogEavSetup = Mage::getResourceModel('catalog/eav_mysql4_setup', 'core_setup');
    $attrIdTest = $objCatalogEavSetup->getAttributeId(Mage_Catalog_Model_Product::ENTITY, $attrCode);
    
    if ($attrIdTest === false) {
        $objCatalogEavSetup->addAttribute(Mage_Catalog_Model_Product::ENTITY, $attrCode, array(
            'group' => $attrGroupName,
            'sort_order' => 7,
            'type' => 'varchar',
            'backend' => '',
            'frontend' => '',
            'label' => $attrLabel,
            'note' => $attrNote,
            'input' => 'text',
            'class' => '',
            'source' => '',
            'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
            'visible' => true,
            'required' => false,
            'user_defined' => true,
            'default' => '0',
            'visible_on_front' => false,
            'unique' => false,
            'is_configurable' => false,
            'used_for_promo_rules' => true
        ));
    }
    
    $installer->endSetup();
    

    这是和这两篇文章的引用一起使用的:-

    另外,您会发现我使用数组键“group”来提及属性组名称,这个新的自定义属性将驻留在其中。具有讽刺意味的是,在上面的代码示例中提到这个键,会自动在这个 Magento 中找到的每个 Attribute Set 中创建这个 Attribute。

    因此您无需调用任何方法(如“addAttributeToSet()”)即可将此属性添加到所有属性集。

    希望对你有帮助。

    【讨论】:

    • @KnowledgeCraving - 最好使用 Mage::getResourceModel('catalog/setup', 'core_setup') 而不是 new Mage_Catalog_Model_Resource_Eav_Mysql4_Setup() 来尊重 Magento 的工厂系统(因此可以重写)。
    • @7ochem - 好的,谢谢你的建议!但我不会完全同意你的建议,因为Mage::getResourceModel('catalog/setup', 'core_setup')Mage_Catalog_Model_Resource_Setup 的类,而我想要这个类Mage_Catalog_Model_Resource_Eav_Mysql4_Setup。所以我把sn-p的那部分改成了Mage::getResourceModel('catalog/eav_mysql4_setup', 'core_setup')。如果您发现更多要分享的内容,请提出建议。
    • @KnowledgeCraving 当我在使用这段代码做脚本的时候,发现并不是你数组中的所有键都可以通过addAttribute()方法使用,见Mage_Eav_Model_Entity_Setup的@987654334 @方法(used_for_promo_rulesis_configurablevisible_on_front等不能通过)。
    • @7ochem - 可能是您测试/工作的 Magento 版本不再支持这些键。但绝对是,这是一个很好的收获,谢谢!
    • @KnowledgeCraving - 不确定这是否是自您撰写本文以来新的“功能”,但您可以通过将模块配置为 Mage_Catalog_Model_Resource_Eav_Mysql4_Setup 来节省一些代码。 (在 config.xml 中)Example_ModuleMage_Catalog_Model_Resource_Eav_Mysql4_Setup然后,您的安装程序将作为该类运行,您无需实例化 $objCatalogEavSetup。
    【解决方案2】:

    在您的 magento 根目录中运行此脚本。(更改您需要的配置)

    <?php  
    
    require_once('app/Mage.php');
     Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));
    
    $installer = new Mage_Eav_Model_Entity_Setup('core_setup');
    $installer->startSetup();                   
    
    $installer->addAttribute('catalog_product', 'snum', array(
                 'label'             => 'Serial No',
                 'type'              => 'int',
                 'input'             => 'text',
                 'backend'           => '',
                 'frontend'          => '',
                 'global'            => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
                 'visible'           => true,
                 'required'          => false,
                 'user_defined'      => false,
                 'searchable'        => false,
                 'filterable'        => false,
                 'comparable'        => false,
                 'visible_on_front'  => true,
                 'visible_in_advanced_search' => false,
                 'unique'            => false
    ));
    
    $installer->endSetup();
    
    ?>
    

    用于移除产品属性

    <?php  
    
    require_once('app/Mage.php');
     Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));
     $installer = new Mage_Sales_Model_Mysql4_Setup;
     $installer->startSetup();
     $installer->removeAttribute('catalog_product', 'snum');
     $installer->endSetup();
    
    ?>
    

    【讨论】:

      【解决方案3】:

      您可以如图所示将自定义属性添加到 magento 后端。如果您将产品属性创建为模块,则很容易从一个数据库移动到另一个数据库。

      ?php
      $this->startSetup();
      $this->addAttribute(catalog_product, 'featured_product', array(
      'group'         => 'General',
      'input'         => 'select',
      'type'          => 'text',
      'label'         => 'Featured Product',
      'backend'       => '',
      'visible'       => true,
      'required'      => false,
      'visible_on_front' => true,
      'global'        => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
      'source' => 'eav/entity_attribute_source_boolean',
      'sort_order'        => 8,
      ));
      
      $this->endSetup();
      

      请参阅我的教程以获取分步说明和文件结构http://www.pearlbells.co.uk/adding-custom-product-attributes-in-magento/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-29
        • 2017-06-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多