Преобразование типа атрибута из текста в раскрывающийся список


Как я могу преобразовать тип атрибута продукта из текста в выделенный в бэкэнде Magento. Есть ли какие-либо встроенные функции или для этого нам нужно написать собственный код?

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

Спасибо

Author: Sander Mangel, 2013-08-13

1 answers

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

[...]
$collection = Mage::getModel('catalog/product')
                        ->getCollection()
                        ->addAttributeToSelect('sku')
                        ->addAttributeToSelect('your-attribute');

foreach ($collection as $product) {
    echo "{$product->getId()};{$product->getData('your-attribute')}\n";
}
[...]

Выполнение этого из командной строки php /path/to/script.php > values.csv создаст CSV-файл со значениями идентификаторов и атрибутов.

Теперь следующим шагом будет удаление старого атрибута и создание нового с текстовыми значениями в качестве раскрывающихся параметров.

Затем нам нужно снова импортировать эти значения, извлекая идентификатор опции из значения, которое теперь должно быть администратором метка

[...]

$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 'your-attribute'); 

$attribute_source = Mage::getModel('eav/entity_attribute_source_abstract');
$attribute_source->setAttribute($attribute);

if (($handle = fopen("your-csv-file.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
        list($_id, $_value) = $data;

        $product = Mage::getModel('catalog/product')->load($_id);
        $product->setData('your-attribute', $attribute_source->getOptionId($_value));

        try {
            $product->save();
        } catch(Exception $e) {
            echo "{$_id}: {$e}";
        }
    }
    fclose($handle);
}

[...]

Этот код непроверен, поэтому, пожалуйста, не используйте его в производственной среде. Дайте мне знать, сработало ли это для вас.

 2
Author: Sander Mangel, 2013-08-13 14:17:46