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: $product
wird 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;
}
}
magento-1.9
error
addtocart
nominal-product
Sukeshini
quelle
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
Ich hatte das gleiche Problem. Aber ich habe einen anderen Code zum Hinzufügen zum Warenkorb verwendet:
Und mein Problem war im falschen Produktobjekt. Ich habe es mit dem Attribut "sku" geladen:
Als ich es auf einfaches Laden umstellte
dann wurde der Fehler behoben.
Das Problem lag also im "falschen" Produktobjekt der Funktion loadByAttribute.
quelle
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);
quelle