Thêm sản phẩm vào giỏ hàng gây ra lỗi 'Mục chứng khoán cho Sản phẩm không hợp lệ.'?


7

Tôi đang thêm một sản phẩm danh nghĩa theo chương trình vào giỏ hàng. Nhưng nó ném một ngoại lệ như 'The stock item for Product is not valid.'. Làm thế nào tôi có thể giải quyết điều này?

LƯU Ý: $productđang được chuyển đến chức năng này một cách chính xác.

Mã của tôi là như sau.

    /**
     * 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;
        }
    }

Câu trả lời:


13

đã giải quyết!, Thay vì đối tượng sản phẩm chuyển ID sản phẩm sang addProduct()phương thức hoạt động. Xem mã sửa dưới đây.

    /**
     * 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;
        }
    }

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

Tôi gặp vấn đề tương tự. Nhưng tôi đã sử dụng một mã khác để thêm vào giỏ hàng:

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

Và vấn đề của tôi là ở đối tượng sản phẩm sai. Tôi đã tải nó theo thuộc tính "sku":

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

Khi tôi thay đổi nó để tải đơn giản

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

sau đó lỗi đã được giải quyết.

Vì vậy, vấn đề nằm ở đối tượng sản phẩm "sai" bởi hàm loadByAttribution.


Ồ, đây cũng là vấn đề của tôi! Cảm ơn đã làm rõ: 3
Keenora Fluffball

0

Tôi biết điều này đã cũ, nhưng khi tôi gặp phải vấn đề này, tôi nhận thấy rằng trong khi tải sản phẩm bằng các phương pháp thu thập:

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

Trong khi tải sản phẩm từ bộ sưu tập trên, sản phẩm sẽ có stock_item giả (Varien_Object) thay vì stock_item thật (Mage_CatalogInventory_Model_Stock_item). Thật không may, cách duy nhất tôi thấy để có được sản phẩm chứng khoán thực sự từ đây là tải nó từ bộ sưu tập vật phẩm chứng khoán và đặt nó trên sản phẩm:

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

hoặc tải lại sản phẩm theo cách cũ:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.