7

我正在使用模块设置脚本来添加新的属性组、属性集和属性。我能够创建属性集、属性组并将产品添加到组/集。但我很难设置is_filterableis_visibleis_visible_on_frontis_html_allowed_on_front参数。

$installer->addAttribute('catalog_product', 'offer_type', array(
        'backend'       => '',
        'frontend'      => '',
        'class' => '',
        'default'       => '',
        'label' => 'Offer type',
        'input' => 'text',
        'type'  => 'int',
        'source'        => '',
        'global'        => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
        'visible'       => 1,
        'required'      => 1,
        'searchable'    => 0,
        'filterable'    => 1,
        'unique'        => 0,
        'comparable'    => 0,
        'visible_on_front' => 1,
        'is_html_allowed_on_front' => 1,
        'user_defined'  => 1,
));

$installer->addAttributeToSet('catalog_product', $sSetId, $groupName, 'offer_type');

我看到 offer_type 被添加到 Magento 和属性集($sSetID)和组($groupname)。虽然当我从 magento 管理 UI(目录->属性->管理属性)查看属性时,我看到 is_filterable、is_visible、is_visible_on_front 和 is_html_allowed_on_front 参数设置为否。我尝试了各种组合但没有运气。我正在使用 Magento CE 1.7.0.2。我不确定我的安装脚本中缺少什么。为此,我参考了http://blog.chapagain.com.np/magento-adding-attribute-from-mysql-setup-file/。我错过了什么吗?提前致谢。

4

2 回答 2

7

您是否在 config.xml 中正确配置了安装程序?magento 安装程序的标准类是,Mage_Eav_Model_Entity_Setup但是在处理产品时,您需要使用它Mage_Catalog_Model_Resource_Setup。为什么 ?看看他们的方法,你就会明白什么是授权属性(产品比标准的 eav_objects 有更多的选项,你可以在比较表和_prepareValues()时看到)eav_attributecatalog_eav_attribute

要指出好的安装程序类,请查看标准Mage_Catalog config.xml并将其调整为您的模块:

<resources>
    <catalog_setup>
        <setup>
            <module>Mage_Catalog</module>
            <class>Mage_Catalog_Model_Resource_Setup</class><!-- that line !-->
        </setup>
    </catalog_setup>
</resources>

ps:请注意,_prepareValues()只有在添加属性时才会调用该方法……如果要更新属性,则需要使用完整的选项名称(“is_visible”,而不仅仅是“visible”)……

另一个技巧是在之后添加这些属性,但这不是很漂亮:

// adding atribute :
// [...]

//getting the new attribute with full informations
$eavConfig = Mage::getSingleton('eav/config');
$installer->cleanCache();
$attribute = $eavConfig->getAttribute('catalog_product', $attributeCode);
$attribute->addData(array(
    'is_visible' => 1
));
$attribute->save()
于 2012-10-17T09:56:16.683 回答
-2

'visible_on_front' => 1addAttribute通话中使用,。

于 2016-03-31T09:24:09.120 回答