如何以编程方式将属性添加到产品类型

时间:2014-09-16 10:14:59

标签: magento product

我正在努力将属性affiliate_link(文本框)添加到自定义产品类型。这是安装程序脚本,但遗憾的是它不起作用:

<?php /** @var $installer Mage_Catalog_Model_Resource_Setup */


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

$installer->addAttribute(
    Mage_Catalog_Model_Product::ENTITY,
    'affiliate_link',
    array(
        'type'                    => 'text',
        'backend'                 => '',
        'frontend'                => '',
        'label'                   => 'Affiliate Link',
        'input'                   => 'text',
        'class'                   => '',
        'source'                  => '',
        'global'                  => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
        'visible'                 => true,
        'required'                => true,
        'user_defined'            => false,
        'default'                 => '',
        'searchable'              => false,
        'filterable'              => false,
        'comparable'              => false,
        'visible_on_front'        => false,
        'unique'                  => false,
        'apply_to'                => 'gift',
        'is_configurable'         => false,
        'used_in_product_listing' => false
    )
);


$attributeId = $installer->getAttributeId(
    'catalog_product',
    'affiliate_link'
);

 $defaultSetId = $installer->getAttributeSetId('catalog_product', 'default');

$installer->addAttributeGroup(
    'catalog_product',
    $defaultSetId,
    'Affiliate Information'
);

//find out the id of the new group
$groupId = $installer->getAttributeGroup(
    'catalog_product',
    $defaultSetId,
    'Affiliate Information',
    'attribute_group_id'
);

//assign the attribute to the group and set
if ($attributeId > 0) {
    $installer->addAttributeToSet(
        'catalog_product',
        $defaultSetId,
        $groupId,
        $attributeId
    );
}

$installer->endSetup();?>

config.xml代码:

<config>
    <modules>
        <Cueblocks_Newtype>
            <version>0.1.0</version>
        </Cueblocks_Newtype>
    </modules>
    <global>
        <catalog>
            <product>
                <type>
                    <gift translate="label" module="cueblocks_newtype">
                        <label>Gift Product</label>
                        <model>cueblocks_newtype/product_type</model>
                        <is_qty>0</is_qty>
                        <composite>0</composite>
                        <can_use_qty_decimals>0</can_use_qty_decimals>
                    </gift>
                </type>
            </product>
        </catalog>



         <!-- code omitted for brevity -->
                    <blocks>
            <cueblocks_newtype>
                <class>Cueblocks_Newtype_Block</class>
            </cueblocks_newtype>
        </blocks>
        <helpers>
            <cueblocks_newtype>
                <class>Cueblocks_Newtype_Helper</class>
            </cueblocks_newtype>
        </helpers>
                    <models>
            <cueblocks_newtype>
                <class>Cueblocks_Newtype_Model</class>
            </cueblocks_newtype>
        </models>


        <!-- code omitted for brevity -->
                <resources>
            <cueblocks_newtype_setup>
                <setup>
                    <module>Cueblocks_Newtype</module>
                    <class>Mage_Catalog_Model_Resource_Setup</class>
                </setup>
                 </cueblocks_newtype_setup>

                    <newtype_write>
    <connection>
    <use>core_write</use>
    </connection>
    </newtype_write>
    <newtype_read>
    <connection>
    <use>core_read</use>
    </connection>
    </newtype_read>
        </resources>
    </global>
</config>

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

代码看起来很好,但下面的代码对我有用。但它适用于所有产品类型。并创建系统属性。所以改变

  $installer->addAttribute('catalog_product', 'affiliate_link', array(
                 'group'    => 'Affiliate',
                 'label'    => 'Affiliate Link',             
                 'type' => 'varchar',
                 'input'    => 'text',                     
                 'visible'  => true,
                 'required' => true,
                 'position' => 1,
                 'global'   => 'Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL',
         'note'    => "comments note"
    ));

答案 1 :(得分:0)

最后我弄明白了..安装程序脚本无法正常工作,因为我没有从core_resource表中删除条目...我上面发布的安装程序脚本代码无效..我更新了代码代码由Asif提供......

但是根据magento的默认行为,它在模块和文件的开头执行一次安装程序脚本。它通过该模块名称向core_resource表添加一个条目。现在,如果您将更新相同的脚本,它将不会运行,因为对应于该条目的条目已经存在于数据库中。要使其与更新的代码一起运行,我删除了条目手动从core_resource表&amp;然后尝试使用更新的Asif代码...我的工作就像一个魅力!!!

**注意事项:-1。)无论何时执行任何magento模块,它都会首先检查模块中存在的任何安装程序/更新脚本。因此,始终通过打印消息来解决脚本问题。一开始就死了..

2.)如果您的安装程序代码无法以所需方式运行,并且你更新了相同的脚本..请在core_resource表中检查是否已存在与该模块对应的条目。手动删除该条目&amp;然后您更新的安装程序脚本将起作用。**