Das Hinzufügen eines Produkts zum Warenkorb führt zu dem Fehler 'Der Lagerartikel für das Produkt ist ungültig.'?

7

Ich füge ein nominelles Produkt programmgesteuert zum Warenkorb hinzu. Aber es wirft eine Ausnahme als 'The stock item for Product is not valid.'. Wie kann ich das beheben?

HINWEIS: $productwird korrekt an diese Funktion übergeben.

Mein Code lautet wie folgt.

    /**
     * Add air product to the cart.
     */
    public function addSubscriptionToCart($product)
    {
        try {
            // Create cart instance.
            $cart = Mage::getModel('checkout/cart');

            // Initialize the cart.
            $cart->init();
            $cart->addProduct($product, array('product_id' => $product->getId(), 'qty' => 1)); // This line causes the error.
            $cart->save();

            return true;

        } catch(Exception $e) {
            Mage::log($e->getMessage());
            return false;
        }
    }
Sukeshini
quelle

Antworten:

13

gelöst!, Übergeben Sie anstelle des Produktobjekts die Produkt-ID an die addProduct()bearbeitete Methode. Siehe den korrigierten Code unten.

    /**
     * Add air product to the cart.
     */
    public function addSubscriptionToCart($product)
    {
        try {
            // Create cart instance.
            $cart = Mage::getModel('checkout/cart');

            // Initialize the cart.
            $cart->init();
            $cart->addProduct($product->getId()); // pass product ID
            $cart->save();

            return true;

        } catch(Exception $e) {
            Mage::log($e->getMessage());
            return false;
        }
    }
Sukeshini
quelle
Fatal error: Uncaught TypeError: Argument 1 passed to Mage_Sales_Model_Quote::addProduct() must be an instance of Mage_Catalog_Model_Product, string given, called in
OZZIE
1

Ich hatte das gleiche Problem. Aber ich habe einen anderen Code zum Hinzufügen zum Warenkorb verwendet:

$quote = Mage::getSingleton('checkout/session')->getQuote();
$quote->addProduct($_product, 1);
$quote->collectTotals()->save();

Und mein Problem war im falschen Produktobjekt. Ich habe es mit dem Attribut "sku" geladen:

Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);

Als ich es auf einfaches Laden umstellte

Mage::getModel('catalog/product')->load($id);

dann wurde der Fehler behoben.

Das Problem lag also im "falschen" Produktobjekt der Funktion loadByAttribute.

Karick
quelle
Oh, das war auch mein Problem! Vielen Dank für die Klarstellung: 3
Keenora Fluffball
0

Ich weiß, dass dies viel alt ist, aber als ich auf dieses Problem stieß, bemerkte ich, dass beim Laden des Produkts mithilfe von Erfassungsmethoden:

$productCollection = Mage::getModel('catalog/product')->getCollection()->addAttributeToFilter('some_attribute', array('eq' => $someValue)->load();

Beim Laden des Produkts aus der obigen Sammlung verfügt das Produkt über ein nachgeahmtes stock_item (Varien_Object) anstelle eines echten stock_item (Mage_CatalogInventory_Model_Stock_item). Leider habe ich nur gesehen, wie ich den echten Lagerartikel von hier erhalten kann, indem ich ihn aus einer Lagerartikelsammlung lade und auf das Produkt setze:

$stockItem = Mage::getModel('cataloginventory/stock')->getItemCollection()->addFieldToFilter('product_id', array('eq' => $productId)); $product->setStockItem($stockItem);

oder laden Sie das Produkt auf altmodische Weise neu:

$product = Mage::getModel('catalog/product')->load($productId);

FearTheBeard88
quelle