0

私はいくつかの奇妙な問題を抱えたマルチストアを持っています: あるショップでは $product->isAvailable() は一部の商品で true を返しますが、別のショップでは $product->isAvailable() は常に null を返します。

この関数では isAvailable()

$this->getTypeInstance(true)->isSalable($this)

Mage::helper('catalog/product')->getSkipSaleableCheck();

どちらも null を返します。どちらの商品も同じ属性を持ち、在庫状況に関する一般的なストア構成が両方のショップで使用されます。

アップグレードする前に v.1.4.0.2 を使用していましたが、isAvailable()/isSaleable() のロジックが少し変更されたと思います。これら 2 つの製品の違いがわかりません。これが、一方の製品が利用できない理由です。

//編集 :

いくつかのデバッグの後、メソッドが

isSalable($product = null)

isAvailable() 内の $this->getTypeInstance(true)->isSalable($this) によって呼び出されると、0 が返されます。

$this->getProduct($product)->getData('is_salable')

これは、この生成された is_saleable 属性をどの属性が担当しているかという問題につながります。

4

1 に答える 1

1

ここに記載されている解決策を試すことができます

基本的に、isSaleable() または isAvailable() を呼び出す前に、デフォルト ストアに切り替える必要があります。

$originalStore = Mage::app()->getStore(); // save the original store setting
        Mage::app()->setCurrentStore('default'); //switch to the default store
        $productsCollection = Mage::getModel('catalog/product')->getCollection();
        foreach ($productsCollection as $product) {
            if (!$product->isSalable()) {
                // Do what you gotta do
            }
        }
        Mage::app()->setCurrentStore($originalStore->getId()); // switch back to the original
    }
于 2013-11-14T15:07:04.637 に答える