新しい選択属性オプションをすべての製品で表示できるようにしたいと考えています。
「bracket_size」というセレクト ボックス属性を使用する商品があります。この属性には 3 つのオプションがあります。
(/admin/catalog_product_attribute/edit/)
ほとんどの製品では、これらのオプションのうち 2 つしか選択されていません。
(/admin/catalog_product/edit/)
その画面で「18mm」を選択すると、フロントエンドに表示されます。
「18mm」オプションを表示するようにすべての製品を設定するアップグレード スクリプトを作成したいと考えています。
すべての製品を選択して取得し、属性値を更新することでそれを行っていました。
$options = Mage::getSingleton('eav/config')->getAttribute('catalog_product', 'bracket_size')->getSource()->getAllOptions(false);
$option18mmId = $options[0]['value'];
foreach (Mage::getModel('catalog/product')->getCollection() as $product) {
// Get a writable product
$product = Mage::getModel('catalog/product')->load($product->getId());
// All products in these attribute sets should have bracket sizes
$bracketSizeValue = $product->getBracketSize(); // string containing option IDs - something like '645,345'
if (isset($bracketSizeValue)) {
// Get options currently selected for this product
$optionIds = explode(',', $bracketSizeValue);
// Check if the option is already included in this product
if (!in_array($option18mmId, $optionIds)) {
// If not, rebuild the attribute value to add it
array_unshift($optionIds, $option18mmId);
// Add it back to the product
$product->setData('bracket_size', implode(',', $optionIds));
$product->save();
}
}
}
しかし、これはうまくいきません。エラーがスローされます:
Warning: Invalid argument supplied for foreach() in /.../public/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1068
ラインで$product->save()
。
これどうやってするの?