首页 文章

Magento - 通过查询字符串将产品添加到购物车,不带form_key参数

提问于
浏览
9

我刚刚安装了Magento Community Edition ver 1.8.0.0(默认设置) .

系统 - >配置 - >销售 - >结账 - >结账选项启用单页结账:是允许访客结账:是

我正在尝试使用查询字符串方法将产品添加到购物车 .
根据我发现的所有资源,这些都是正确的方法:

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

但他们没有工作......车仍然是空的 .

经过一段时间,我找到了可行的解决方案:

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

但是,我希望 notform_key 参数放在网址中 .
在我的案例中不需要此安全功能 .

例如,没有form_key,产品比较工作正常:

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

我们的想法是在其他一些网站上放置一个静态链接(因此动态生成的form_key是未知的),因此如果客户点击它,他会立即被重定向到带有填充购物车的商店 .

是否有可能摆脱form_key参数,仍然能够将产品添加到购物车?如果是这样,那怎么样?

7 回答

  • 21

    我所做的是用自定义模块覆盖Magento CartController . 我在里面创建了一个文件: \app\code\local\Namespace\AddProductFromUrl\controllers\Checkout\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();
            }
        }
    ?>
    

    (对于每个magento自定义模块,模块需要具有config.xml并在 etc/modules/ 下启用 . 使用您使用的模块更改 Namespace . )

    这与magento 1.7一样完美,影响极小;如果丢失则会生成 form_key ,就是这样 .

  • 3

    这对Magento C 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>
    
  • 1

    这一步不是很复杂!希望这有帮助 .

    //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');
        }
    }
    
  • 2

    Use "Add To Cart" link for your product any where on a Magento website::

    以下代码可能有用:

    $product = Mage::getModel('catalog/product')->load($YourProductID);
    
    echo Mage::helper('checkout/cart')->getAddUrl($product);
    

    From magento 1.8 需要将表单键 $formKey = Mage::getSingleton('core/session')->getFormKey();?> 添加到url

  • 0

    这就是我在Magento 1.8.1中的表现

    <a href="<?= $this->getAddtoCartUrl($_product, array('qty' => $_price['price_qty'])) ?>">

    http://docs.magentocommerce.com/Mage_Catalog/Mage_Catalog_Block_Product_Abstract.html#getAddToCartUrl

  • 8

    我最后做的是将新的更改与旧代码进行比较,我发现添加到购物车按钮设置为type =“button”并且没有提交 .

    更改按钮只需输入=“提交”并且没有其他更改实际上使其工作在[theme] / template / catalog / product / view / addtocart

    如果不存在,可能必须从基础文件夹移动

  • 0

    以下内容可与qty集一起使用:

    $product = Mage::getModel('catalog/product')->load($getProductID);
    
    echo Mage::helper('checkout/cart')->getAddUrl($product, array('qty'=>$getQty));
    

相关问题