0

あるストアから別のストアへの一部 (すべてではない) の価格を更新しようとしています。たとえば、シャツの 1 つのラインは、2 番目のストアの価格の 1.2 倍にする必要があります。

エンティティ ラベルに基づいてアイテムの一部のグループのみを更新したいのですが、magento からすべてのデータを取得するのに苦労しています (以下のコードで取得できるものは別として)。欠けているビットは、価格とエンティティ ラベルです。私は彼らが住んでいるテーブルを知っていますが、Mage::getModel('catalog/product') など、それらにアクセスするための正しい magento 構文がわかりません。クエリではなく、Magento フレンドリーなコードを使用してこれを達成しようとしています。

エンタープライズ 1.11 を使用しており、この段階でプラグインの購入を検討していない場合、アドバイスをいただければ幸いです

$mageFilename = 'app/Mage.php';
require_once $mageFilename;
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); #important
$product_id = '8782';
$collection = Mage::getModel('catalog/product')
         ->load($product_id);
        echo "Collection: " . $collection->getName();
        echo "<br>";
        echo "Attribute Set: " . $collection->getAttributeSetId() . " SKU: " . $collection->getSku();
        echo "<br>"; 
        echo "Entity ID: " . $collection->getEntity_id() . " Product Type (Attribute Label): " . $collection->getProducttype();
4

1 に答える 1

3

明確にするだけです:

あなたが示したサンプルでは、​​ $collection オブジェクトは実際には「コレクション」ではありません。これは、1 つの「カタログ/製品」オブジェクトのインスタンスです。

1 つのカタログ/製品オブジェクトの価格を変更するには、次のようにします。

$product = Mage::getModel('catalog/product')->load($product_id);
$product->setPrice($product->getPrice() * 1.2)
        ->save();

一連の製品に対してこれを行う場合は、おそらく「カタログ/製品」オブジェクトのコレクションを使用し、いくつかの属性フィルターを適用する必要があります (最終的に生成される SQL に WHERE 句を追加することになります)。(これは、magento コレクションのクエリ構文の要約です。)

「エンティティ ラベル」の意味がわかりません。それは商品に付けたカスタム属性ですか?

この価格変更を特定の SKU のすべての製品に適用する一般的な例:

$product_collection = Mage::getModel('catalog/product')->getCollection()
                                                       ->addAttributeToFilter('sku', array('like' => 'FOO01-%'));

foreach($product_collection as $product) {

    $new_price = calcNewPrice($product->getPrice());
    $product->setPrice($new_price)
            ->save(); 

}     

価格計算のために店舗を横断する場合、「calcNewPrice」は次のようになります。

function calcNewPrice($product) {
    $other_store_product = Mage::getModel('catalog/product')->setStoreId($other_store_id)
                                                            ->load($product->getId());
    if ($other_store_product) {
        return $other_store_product->getPrice() * 1.2;
    }
    // else ???
}

お役に立てれば。

于 2012-11-07T14:03:14.527 に答える