2013-10-03 45 views
9

我剛剛安裝了Magento Community Edition ver 1.8.0.0(默認設置)。Magento - 通過查詢字符串添加產品到購物車沒有form_key參數

系統 - >配置 - >銷售 - >結帳 - >結帳選項
啓用Onepage結帳:是
允許訪客結賬:是

我想一個產品添加到推車使用查詢字符串方法。
據我發現所有的資源,這是正確的方式來做到這一點:

[store]/checkout/cart/add/product/1/ 
[store]/checkout/cart/add?product=1&qty=1 

但他們沒有工作...車保持爲空。

相當長的一段時間後,我發現工作液:

[store]/checkout/cart/add/product/1/form_key/yu6b5VEzwSU2V7YE/ 

不過,我想form_key參數中的URL。
我的情況下不需要此安全功能。

例如產品比較正常工作而不form_key:

[store]/catalog/product_compare/add/product/1/ 

的想法是把一些其他網站的靜態鏈接(所以動態生成form_key不知道),因此,如果客戶點擊就可以了他馬上被帶着滿滿的購物車重新導向商店。

是否有可能擺脫form_key參數,仍然能夠添加產品到購物車?如果是這樣,那麼如何?

回答

8

我所做的是用自定義模塊覆蓋Magento CartController。 我創建中的文件: \程序\代碼\本地\命名空間\ AddProductFromUrl \控制器\結帳\ CartController.php

<?php 
    require_once 'Mage/Checkout/controllers/CartController.php'; 
    class Namespace_AddProductFromUrl_Checkout_CartController extends Mage_Checkout_CartController { 
     # overloaded addAction 
     public function addAction() {   
      // generate form_key if missing or invalid 
      if (!($formKey = $this->getRequest()->getParam('form_key', null)) || $formKey != Mage::getSingleton('core/session')->getFormKey()) { 
       $this->getRequest()->setParams(array('form_key' =>Mage::getSingleton('core/session')->getFormKey())); 
      }   

      // do parent actions 
      parent::addAction(); 
     } 
    } 
?> 

(該模塊需要有config.xml和etc/modules/下啓用爲每個magento自定義模塊。使用您所使用的模塊更改Namespace。)

與magento 1.7完美結合,影響最小; form_key如果丟失就會生成,就是這樣。

+0

我得說我也是這麼做的。 – rafis

+1

無論出於何種原因,CE 1.9.0.1都不適合我。有什麼改變嗎?我創建了這個文件,它位於AddProductFromUrl/etc下的config.xml和應用程序/ etc/modules/Namespace_AddProuctFromUrl.xml中。我可以在Sys> Config> Advanced> Advanced modules部分看到它。 – sparecycle

2

這一步不是很複雜!希望這個幫助。

//Namespace need to change with your namespace 
//AddProduct need to change with your module name 
class Namespace_AddProduct_AddController extends Mage_Core_Controller_Front_Action { 
    public function indexAction() { 
      $product_id = $this->getRequest()->getParam('products'); 
      $qty = $this->getRequest()->getParam('qty'); //used if your qty is not hard coded 
      $cart = Mage::getModel('checkout/cart'); 
      $cart->init(); 
      if ($product_id == '') { 
       continue; 
      } 
      $productModel = Mage::getModel('catalog/product')->load($product_id); 

      //I added only Virtual product here. If no need, remove this condtion 
      if ($productModel->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL) { 
       try 
       { 
        $cart->addProduct($productModel, array('qty' => '1')); //qty is hard coded 
       } 
       catch (Exception $e) { 
        continue; 
       } 
      } 
      $cart->save(); 
      if ($this->getRequest()->isXmlHttpRequest()) { 
       exit('1'); 
      } 
      $this->_redirect('checkout/cart'); 
    } 
} 
+0

我想知道是否有可能設置form_key爲不顯山露水要​​求在配置或使用不同的網址,而不是以編程方式解決它。在這種情況下,我會在使用Mage :: getSingleton('core/session') - > getFormKey()'將產品添加到購物車之前插入form_key,或者使用'_validateFormKey()'方法跳過驗證。 – rafis

+1

這段代碼去哪裏? – ggwarpig

+0

你如何實現這個? – sparecycle

21

這個最適合我在MagentoÇ1.8

<?php 
  
$formKey = Mage::getSingleton('core/session')->getFormKey();?> 

<form action="/checkout/cart/add/product/<?php echo $productid; ?>" method="post"> 
    <input type="hidden" name="form_key" value="<?php echo $formKey; ?>" /> 

    <input type="text" name="qty"> QTY 

    <input type="submit" value="Add to basket" /> 
</form> 
0

我到底實際做的是比較老的代碼中的新變化,我發現添加到購物車按鈕被設置爲type =「按鈕」,是不提交。

改變按鈕簡單地鍵入=「提交」而沒有其他的變化實際上是由它的工作 這是在[主題] /模板/目錄/產品/視圖/ addtocart

可能必須從基礎文件夾移動如果不存在

2

使用「加入購物車」鏈接,你的產品在任何地方Magento的網站::

以下代碼可能有幫助的:

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

echo Mage::helper('checkout/cart')->getAddUrl($product); 

從Magento的1.8需要添加表格關鍵$formKey = Mage::getSingleton('core/session')->getFormKey();?>到URL

0

可以用數量設置使用下列內容:

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

echo Mage::helper('checkout/cart')->getAddUrl($product, array('qty'=>$getQty)); 
相關問題