Magento在后端更改属性类型

Rav*_*ish 10 magento magento-1.5

是否可以在创建属性后更改其类型.我想将某个属性的类型更改为多选列表.这些属性的类型目前是"下拉".实际上当我创建属性时,我最初创建它时不需要多选,但是,现在客户想要将其更改为"多选".

请帮助我,我不能通过删除旧属性来创建新属性,因为有一些数据,并且设计的某些部分是硬编码的并且取决于属性的某些值.

Syl*_*ayé 17

是的,可以通过该方法以编程方式进行 Mage_Eav_Model_Entity_Setup::updateAttribute($entityTypeId, $id, $field, $value=null, $sortOrder=null)

使用Magento后端的属性管理是不可能的,因为它对现有数据有影响.在您的情况下,从select更改为multiselect应该没问题,但是如果您的产品仍然正确显示,请进行数据库备份和测试.

以编程方式,最好的方法是从更新设置脚本执行此操作.我不知道你的模块,但这里有一些信息要做.

当您为模块提供新的版本号时,将启动更新设置脚本,并提供一个安装脚本,其中包含旧版本号和新版本号作为文件名.

1)这是config.xml模块的标题,将其更改为提供更高版本.例如,新版本是

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
    <Mycompany_Mymodule>
        <version>1.0.1</version><!-- the old one was 1.0.0 -->
    </Mycompany_Mymodule>
</modules>
...
</config>
Run Code Online (Sandbox Code Playgroud)

2)你需要在config.xml文件中,在标签之间<global>...</global>有以下代码,请适应你的情况:

  <resources>
        <mymodule_setup><!-- name that you will give to the folder into the sql folder  -->
            <setup>
                <module>Mycompany_Mymodule</module>
                <class>Mage_Eav_Model_Entity_Setup</class><!-- You can have a setup class which extends this class -->
            </setup>
            <connection>
                <use>default_setup</use>
            </connection>
        </mymodule_setup>
    </resources>
Run Code Online (Sandbox Code Playgroud)

3)然后你需要在你的模块文件夹中使用新旧版本号app/code/local/mycompany/mymodule/sql/mymodule_setup/mysql4-upgrade-1.0.0-1.0.1.php(mysql4)创建一个安装脚本-upgrade-old.version.number-new.version.number.php)

4)并在这个新脚本中设置这样的代码,请适应您的情况:

<?php
$installer = $this;
/*@var $installer Mage_Eav_Model_Entity_Setup */

$entityTypeId = $installer->getEntityTypeId('catalog_product');

$idAttributeOldSelect = $this->getAttribute($entityTypeId, 'myold_attribute', 'attribute_id');
$installer->updateAttribute($entityTypeId, $idAttributeOldSelect, array(
    'frontend_input'    => 'multiselect'
));
Run Code Online (Sandbox Code Playgroud)

5)刷新Magento页面并最终刷新缓存


小智 6

4.我认为更新使用数据库字段,即输入应该是frontend_input.

<?php
$installer = $this;
/*@var $installer Mage_Eav_Model_Entity_Setup */

$entityTypeId = $installer->getEntityTypeId('catalog_product');

$idAttributeOldSelect = $this->getAttribute($entityTypeId, 'myold_attribute', 'attribute_id');
$installer->updateAttribute($entityTypeId, $idAttributeOldSelect, array(
    'frontend_input' => 'multiselect'
));
Run Code Online (Sandbox Code Playgroud)