属性タイプをテキストからドロップダウンに変換します
-
16-10-2019 - |
質問
テキストから製品属性タイプをMagentoバックエンドで選択するにはどうすればよいですか。組み込みの機能はありますか、それともそのためにカスタムコードを記述する必要がありますか?
私はすでに多くの製品に割り当てられている属性値を持っているので、この変換でそれを失いたくはありません。
ありがとう
解決
最初に、たとえば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
ID値と属性値を備えたCSVが作成されます。
次のステップは、古い属性を削除し、ドロップダウンオプションとしてテキスト値を持つ新しい属性を作成することです。
次に、これらの値を再度インポートする必要があります。これは、管理ラベルになるはずの値からオプションIDを取得する必要があります
[...]
$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);
}
[...]
このコードはテストされていないため、生産環境で使用しないでください。それがあなたのために働いたかどうか教えてください。
所属していません magento.stackexchange