10

我刚刚安装了 Magento 社区版 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/

但是,我不想form_key参数放在 url 中。
在我的情况下,不需要此安全功能。

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

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

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

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

4

7 回答 7

21

这在 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>
于 2013-11-15T10:52:32.327 回答
9

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

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

就像 magento 1.7 一样完美,并且影响最小;如果丢失则form_key生成,仅此而已。

于 2013-10-23T15:53:41.443 回答
3

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

//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');
    }
}
于 2013-10-03T10:40:06.333 回答
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

于 2014-09-23T08:36:16.863 回答
1

这就是我在 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

于 2014-01-15T15:48:11.640 回答
0

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

将按钮更改为简单地 type="submit" 并且实际上没有其他更改使它起作用,这是在 [theme]/template/catalog/product/view/addtocart

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

于 2014-05-29T17:52:08.653 回答
0

以下可与数量集一起使用:

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

echo Mage::helper('checkout/cart')->getAddUrl($product, array('qty'=>$getQty));
于 2016-05-11T23:27:20.967 回答