我在Magento 1.8中找到了一個與願望清單相關的問題,就是使用新的form_key參數,也許這就是導致問題的原因。 Magento 1.8引入了表單鍵(它們可能已經以某種形式存在於1.8以前,但現在它們無處不在)。如果你希望你的任何表單做任何事情,它們是強制性的。想添加到購物車/願望清單/比較清單?需要一個表單密鑰。想要提交聯繫表嗎?需要一個表單密鑰。要登錄?表格鍵。等
所有必要的核心模板已經更新,以包含此密鑰作爲隱藏的輸入元素 - 根據我的經驗,您只需將此行從十幾個不同的地方複製並粘貼到您擁有的任何自定義模板中在表單元素的某處),他們也會很好。
所以一切都很好 - 進一步的安全增強/垃圾郵件預防功能,並且容易適應。
問題是$this->helper('wishlist')->getAddUrl($_product)
生成一個URL,其中也包含此表單密鑰,例如, /wishlist/index/add/product/101/form_key/xyz
,它根本不起作用。在這種情況下,通過「不起作用」,我的意思是「添加願望清單」按鈕不會將任何內容添加到您的願望清單中,儘管它仍然會將您帶到您的願望清單頁面。
無論是偶然還是設計,我都不確定,但似乎form_key在大多數Magento參數中都不起作用。它必須是一個標準的HTTP變量,例如在表單字段中輸入或在URL中添加到查詢字符串中,如?form_key = xyz。
在產品視圖中,我也在列表視圖中看到,wishlist按鈕實際上調用productAddToCartForm.submitLight()
,這意味着URL根本不需要表單鍵,因爲productAddToCartForm已經包含它。
如何解決?與大多數事情一樣,有很多方法。你可以停止使用$this->helper('wishlist')->getAddUrl($_product)
並用$this->getStoreUrl('wishlist/index/add/product/'.$_product->getId())
(我沒有測試過,所以請謹慎使用)代替它,或者你可以覆蓋Mage_Wishlist_Helper_Data :: getAddUrl這就是我選擇這樣做的方式。這種方式會影響所有嘗試使用「添加至願望清單」網址的模板等,這可能是一件好事或一件壞事。在這種情況下,我認爲很好,但這取決於你。
我複製法師/心願/助手/數據。從應用程序/代碼/核心應用程序/代碼的PHP /本地和改變:
public function getAddUrl($item)
{
return $this->getAddUrlWithParams($item);
}
到:
public function getAddUrl($item)
{
$productId = null;
if ($item instanceof Mage_Catalog_Model_Product) {
$productId = $item->getEntityId();
}
if ($item instanceof Mage_Wishlist_Model_Item) {
$productId = $item->getProductId();
}
if ($productId) {
$params = array('product' => $productId);
return $this->_getUrlStore($item)->getUrl('wishlist/index/add', $params);
}
return false;
}
...這簡直是getAddUrlWithParams功能的副本與 「PARAMS」硬編碼到產品ID。
說明問題的每個好的StackOverflow問題都說明問題實際上是什麼。請解釋「不工作」的問題並不是問題的確切定義。 – Matmarbon
我的意思是:你想要的和你得到的是什麼不同? – Matmarbon
addto.phtml中的代碼已被註釋掉,所以我取消註釋,但我仍然沒有在我的產品視圖中看到願望清單 – user3171293