2011-07-07 11 views
17

この質問が些細な場合は申し訳ありませんが、ここで間違っていることを見つけるのに苦労しています。私はストアビューレベルで属性の値を変更しようとしていますが、デフォルトでも変更する必要はありません。もちろん、この属性は「store-view-scoped」に設定されています。簡単にするために、私は製品名で試しました。失敗。以下は店舗ビューレベルでプログラム属性をプログラムで変更する

は、私が試した失敗したテストです...

あなたは私がここで間違ってやっているか見ていますか?

多くのありがとうございます。


私の試み:製品モデルのロード前に、以下の行を追加してみました

$product = Mage::getModel('catalog/product')->load(PRODUCT_ID); 
$product->setStoreId(STORE_ID)->setName('new_name')->save(); 

$product = Mage::getModel('catalog/product')->load(PRODUCT_ID); 
$product->setStoreId(STORE_ID)->setStore(STORE_CODE)->setName('new_name')->save(); 

$product = Mage::getModel('catalog/product')->load(PRODUCT_ID); 
$product->setStoreId(STORE_CODE)->setName('new_name')->save(); 

$product = Mage::getModel('catalog/product')->setStoreId(STORE_ID)->load(PRODUCT_ID); 
$product->setName('new_name')->save(); 

$product = Mage::getModel('catalog/product')->setStoreId(STORE_ID)->load(PRODUCT_ID); 
$product->setStoreId(STORE_ID)->setName('new_name')->save(); 

Iイベント...

Mage::app()->setCurrentStore(STORE_ID); 
+1

- > setWebsiteId($ websiteId)も追加しても機能しますか? –

+0

いいえ...動作しません。とにかくありがとう。 –

+0

マルチストアで選択したウェブサイトからすべての製品を削除するにはどうすればよいですか? – Rathinam

答えて

44

特定のストアビューの特定の製品属性の属性値を変更するための完全なスニペットがここにあります。製品名の例:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 
$product = Mage::getModel('catalog/product')->load(PRODUCT_ID); 
$product->setStoreId(STORE_ID)->setName('my_new_product_name')->save(); 

さらに、属性値をデフォルト値に変更することもできます。この場合は、「false」に引数はsetAttributeメソッドに渡す必要があります:いくつかの店舗ビューのデータと製品をロードするとき

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 
$product = Mage::getModel('catalog/product')->load(PRODUCT_ID); 
$product->setStoreId(STORE_ID)->setName(false)->save(); 
+4

偽を共有してくれてありがとう - それは役に立つヒントです。 –

+0

ありがとうございます。 – Nikitas

+0

ちょっと@ʍǝɥʇɐɯ、店舗ごとの表示価格で商品価格を更新していて、うまくいっていませんでした。この回答は価格でも有効ですか? – Charlie

12

あなたがで管理者に現在のストアを設定する必要がありますコードブロックの上部:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 
+0

完全なスニペット+興味深い追加情報については、以下の記事をご覧ください。あなたの助けに感謝ʍǝɥʇɐɯ。 –

3

ノート、また、デフォルト値がロードされます。このような製品を保存することは (フィールドに対してこのように設定解除「を使用するデフォルト値」)ストア値としてデフォルト値を保存します私はクリーンアップするために製品データをデフォルト値

public static function _removeDefaults($item) { 
    static $attributeCodes = null; 
    if($attributeCodes == null) { 
     $attributes = Mage::getSingleton('eav/config') 
      ->getEntityType(Mage_Catalog_Model_Product::ENTITY)->getAttributeCollection(); 
     $attributeCodes = array(); 
     foreach($attributes as $attribute) { 
      $ac = $attribute->getAttributeCode(); 
      if(in_array($ac, array('sku','has_options','required_options','created_at','updated_at','category_ids'))) { 
       continue; 
      } 
      $attributeCodes[] = $ac; 
     } 
    } 
    foreach($attributeCodes as $ac) { 
     if(false == $item->getExistsStoreValueFlag($ac)) { 
      $item->unsetData($ac); 
     } 
    } 
} 

からロードされた唯一の製品を送信するために覚えて、次の関数になってしまいましたいくつかのストアビューについて

関連する問題