簡體   English   中英

獲取magento中添加到購物車的最新產品的ID

[英]Get ID of the last product added to the cart in magento

我正在嘗試獲取最近添加到用戶購物車的產品的ID。 快速谷歌搜索顯示此功能

Mage::getSingleton('checkout/session')->getLastAddedProductId(true);

這也用在Mage_Checkout_Block_Cart_Crosssell中。 當我嘗試在我自己的控制器中調用該函數時,它什么都不返回。 我試圖通過實例化核心會話

Mage::getSingleton('core/session', array('name'=>'frontend'))

但是這種方法似乎不起作用。 我還試圖創建Crossell塊並使受保護的方法包含getLastAddedProductId函數public但是返回null就像我嘗試自己調用它時一樣。

有什么東西我必須調用或實例化才能使用這個功能嗎? 這是我的源列表供參考。

class Mymodule_Addcartaftermath_ItemaddedController extends Mage_Core_Controller_Front_Action {
    public function generatemessageAction() {
        $parameters = $this->getRequest()->getParams();
        if (isset($parameters['ajax_call'])) {
            $latest_item_id = Mage::getSingleton('checkout/session')->getLastAddedProductId(true);
            $response = array('response' => $latest_item_id);
            echo json_encode($response);
        } else {
            $this->_redirect('/');
        }
    }
}

我嘗試了解源代碼,特別是核心中的checkout / model / session.php文件,我似乎無法找到函數的定義。 我也查看了它的父類定義,但也找不到它。

如果我無法使用此方法,是否有其他方法可以檢索添加的最新項目? 我知道這些項目是按順序添加的,我或許可以從購物車中獲取項目列表的最后一項,但是在用戶將相同項目添加到購物車的情況下這實際上不會增加​​數量而不是實際項目本身(例如,用戶在已經有一台筆記本電腦時添加一台筆記本電腦)

打電話給

Mage::getSingleton('checkout/session')->getLastAddedProductId(true);

實際上是在讀取后清除會話變量。 Magento廣泛使用魔法。 在這種情況下,您使用__call魔術方法,后者又使用getData()方法。 在Mage_Core_Model_Session_Abstract_Varien中,您將看到它們覆蓋了getData()的默認行為,以期望第二個參數是布爾值(getData的第一個參數是您要查找的值的鍵名)。 該布爾值是一個標志,告訴會話在讀取后清除變量。

您始終可以偵聽checkout_cart_product_add_after事件,並將該項添加到會話中您自己的變量中。 在調用setLastAddedProductId()之前,該事件實際上是在該行上觸發的。

嘗試grep你正在尋找的變量。 由於它們來自魔術方法,因此很難找到您所追求的確切功能,因此更容易看到數據設置的位置比使用它的位置更容易

grep '>setLastAddedProductId' app/code -rsn

查看產品ID設置為該會話變量的位置

app/code/core/Mage/Checkout/Model/Cart.php:255:        $this->getCheckoutSession()->setLastAddedProductId($product->getId());

然后你可以問這個變量(如果設置為其他為空())

Mage::getSingleton('checkout/session')->getLastAddedProductId();

並且您可以查看結帳/會話中的所有內容並驗證數據是否存在。

var_dump(Mage::getSingleton('checkout/session'));

不知道為什么它以這種方式工作但它在Magento 1.6中適用於我......

<?php
require_once ( "app/Mage.php" );
umask(0);

Mage::app("default");

Mage::getSingleton('core/session', array('name'=>'frontend'));
$session = Mage::getSingleton('checkout/session');

$lastadded = $session->getData("last_added_product_id");

print_r($lastadded);

顯然你必須實例化核心/會話然后結帳/會話。 我已經嘗試過其他方式,但這是我發現它工作的唯一方法。 也許有人可以解釋為什么它會這樣運作。 希望這可以幫助你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM