【问题标题】:Magento adding product attribute in install scriptMagento 在安装脚本中添加产品属性
【发布时间】:2015-05-13 11:02:33
【问题描述】:

我想通过安装脚本在 Magento 中为产品价格添加属性。它应该是价格组中显示的选择字段,包含两个值 - 是和否。但我遇到了一个问题:我的代码不起作用。尽管浏览了我的代码很长时间,但问题仍然没有解决。你能帮我解决这个问题吗?这是我的代码:

/../etc/config.xml 的一部分

<module>
        <My_Module
            <version>1.0.0</version>
        </My_Module
    </module>
    <global>
        <models>
            <module>
                <class>My_Module_Model</class>
            </module>
        </models>
            <resources>              
                <module_setup>
                    <setup>
                        <module>My_Module</module>
                       <class>Mage_Catalog_Model_Resource_Setup</class>
                    </setup>
                    <connection>
                        <use>core_setup</use>
                    </connection>
                </module_setup>
                <module_write>
                    <connection>
                        <use>core_write</use>
                    </connection>
                </module_write>
                <module_read>
                    <connection>
                        <use>core_read</use>
                    </connection>
                </module_read>
            </resources>
    </global>

/../sql/mymodule_setup/mysql4-install-1.0.0.php

$installer = $this;
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$installer->startSetup();


$setup->addAttribute("catalog_product", "price_offer",  array(
                    'group'         => 'Prices', 
                    'type'          => 'int',
                    'attribute_set' =>  'Price',
                    'backend'       => '',
                    'frontend'      => '',
                    'label'         => 'Allow Price Offer',
                    'input'         => 'select',
                    'global'        => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
                    'backend'    => 'eav/entity_attribute_backend_array',
                    'visible'       => true,
                    'required'      => false,
                    'user_defined'  => true,
                    'default'       => '0',
                    'visible_on_front' => false,
                    'used_in_product_listing' => true,
                    'apply_to' => 'simple,configurable',
                    'sort_order'    => 10,
                    'is_configurable' => 1,
                    'option'     => array (
                        'values' => array(
                            0 => 'No',
                            1 => 'Yes',
                        )
                    ),

    ));

$installer->endSetup(); 

最后,这里是/etc/modules/My_Module.xml:

<config>
    <modules>
        <My_Module>
            <codePool>local</codePool>
            <active>true</active>
        </My_Module>
    </modules>
</config>

希望你能帮我解决这个问题。

【问题讨论】:

    标签: php xml magento attributes installation


    【解决方案1】:

    您在此类 Mage_Eav_Model_Entity_Setup 中有错误 使用($installer 是 Mage_Catalog_Model_Resource_Setup 类)

    $installer->addAttribute( ...);
    

    【讨论】:

    • 感谢您的回答。我改了剧本。现在看起来像: $installer = $this; $installer->startSetup(); $installer->addAttribute(....); $installer->endSetup();但是,不幸的是,您的解决方案没有解决问题。我的模块还没有写入 core_resource。
    • 在你的安装脚本中取出addAttribute,看看它是否写入'core_resource'表。安装脚本运行后,应该是 core_resource 中包含“module_setup 1.0.0 1.0.0”的一行。如果没有,那么您的模块设置不正确。检查您的 config.xml。
    • 除非你真的需要,否则不要使用startSetup();。你会知道你是否需要它。
    • @DavidTay,在修复 config.xml 中的语法错误后,已在此表中创建记录:而不是 我写了 但是,尽管如此,该属性尚未创建。我通过查看表'eav_attribute'来检查这一点。另外,在 config.xml 中,我尝试将其放入资源类和 Mage_Catalog_Model_Resource_Setup 和 Mage_Catalog_Model_Resource_Eav_Mysql4_Setup 中,结果是相同的。
    【解决方案2】:

    你的安装脚本肯定不是问题,代码格式化很简单。看起来这是导致您的问题的配置。你的意思是安装脚本没有运行所以数据库没有更新或者是数据库中的值并且没有显示在 Magento 上?

    对于您的配置,我认为您需要一个数据库处理程序,因此您需要一个资源模型:

    <module>
        <My_Module>
            <version>1.0.0</version>
        </My_Module>
    </module>
    <global>
        <models>
            <module>
                <class>My_Module_Model</class>
            </module>
        </models>
        <my>
            <class>My_Module_Model</class>
            <resourceModel>my_module_resource</resourceModel>
        </my>
        <my_module_resource>
            <class>my_module_Model_Mysql4</class>
        </my_module_resource>
            <resources>              
                <module_setup>
                    <setup>
                        <module>My_Module</module>
                       <class>Mage_Catalog_Model_Resource_Setup</class>
                    </setup>
                    <connection>
                        <use>core_setup</use>
                    </connection>
                </module_setup>
                <module_write>
                    <connection>
                        <use>core_write</use>
                    </connection>
                </module_write>
                <module_read>
                    <connection>
                        <use>core_read</use>
                    </connection>
                </module_read>
            </resources>
    </global>
    

    如果您遵循此代码,请记住在 Model 文件夹下添加资源模型。

    【讨论】:

    • 感谢@cleong 的帮助,但我真的不明白为什么我需要这个资源处理程序,而我的模块不创建新表并且不使用自定义表。我所需要的只是通过我的模块版本添加新属性并使用产品。
    • 嗯,a 资源只是 magento 的数据库处理程序,如果你做任何数据库工作,你需要一个处理程序来连接
    • 但我真的不明白在这种情况下我需要将什么放入资源类中。例如,我将添加一个资源文件夹:/My/Module/Model/Mysql4。我应该在这个文件夹中放入任何 .php 文件吗?而且,如果“是”,我应该在这个文件中写什么?
    • 在resource下创建一个module.php,它将是模块模型的数据库处理类
    • 我在这个文件中放入下一个代码:class My_Module_Model_Mysql4_Module extends Mage_Core_Model_Mysql4_Abstract { public function _construct() { $this->_init('catalog/product', 'entity_id'); } } 和 config.xml 变成: My_Modulle_Modelmodule_mysql4My_Module_Model_Mysql4 我理解对了吗你的解决方案?
    猜你喜欢
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多