Magento изменяет тип атрибута в бэкэнде - PullRequest
9 голосов
/ 21 октября 2011

возможно ли изменить тип атрибута после его создания.Я хочу изменить тип определенного атрибута на список множественного выбора.Тип этого атрибута в настоящее время «Раскрывающийся».На самом деле, когда я создавал атрибуты, не было необходимости в множественном выборе, когда я создавал его изначально, но теперь клиент хочет изменить его на «Multi select».атрибуты путем удаления старых, так как есть некоторые данные, и определенная часть дизайна жестко запрограммирована и зависит от определенных значений атрибута.

Ответы [ 4 ]

17 голосов
/ 21 октября 2011

Да, это возможно программно благодаря методу Mage_Eav_Model_Entity_Setup::updateAttribute($entityTypeId, $id, $field, $value=null, $sortOrder=null)

Это невозможно при использовании Attribute Management в Magento Backend, поскольку оно имеет последствия для существующих данных.В вашем случае, изменение от выбора до множественного выбора должно быть в порядке, но сделайте резервную копию базы данных и проверьте, правильно ли отображается ваш продукт.

Программно, лучший способ - сделать это из скрипта установки обновления.Я не знаю ваш модуль, но вот некоторая информация, чтобы сделать это.

Сценарий установки обновления запускается, когда вы предоставляете новую номерную версию для вашего модуля, и вы предоставляете скрипт установки со старой и новой версиейчисло в качестве имени файла.

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>

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>

3) Затем вам нужно создать скрипт установки в папке вашего модуля со старым и новым номером версии приложения / 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'
));

5) Обновите свою страницу Magento и в конечном итоге очистите кеш

6 голосов
/ 12 августа 2013

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'
));
0 голосов
/ 30 ноября 2016

Сначала необходимо обновить тип ввода атрибута для множественного выбора, используя указанный ниже код:

UPDATE eav_attribute SET
entity_type_id = '4',
attribute_model = NULL,
backend_model = 'eav/entity_attribute_backend_array',
backend_type = 'varchar',
backend_table = NULL,
frontend_model = NULL,
frontend_input = 'multiselect',
frontend_class = NULL
WHERE attribute_id = 'YOUR_ATTRIBUTE_ID_HERE';

Теперь скопируйте значения атрибута из старой таблицы в новую:

INSERT INTO catalog_product_entity_varchar ( entity_type_id, attribute_id, store_id, entity_id, value)
SELECT entity_type_id, attribute_id, store_id, entity_id, value
FROM catalog_product_entity_int
WHERE attribute_id = YOUR_ATTRIBUTE_ID_HERE;

Наконец, удалите старые значения, иначе они будут конфликтовать с новой настройкой (старые значения будут загружены, но Magento сохранит новые значения в таблицу varchar):

DELETE FROM catalog_product_entity_int
WHERE entity_type_id = 4 and attribute_id = YOUR_ATTRIBUTE_ID_HERE;
0 голосов
/ 21 октября 2011

Вы можете попробовать Mage_Eav_Model_Entity_Setup::updateAttribute метод.

...