Ajax在magento中从购物车中删除产品

时间:2014-02-06 08:04:55

标签: php jquery ajax magento

我一直在使用magento cart pro扩展程序。对于ajax添加到购物车功能,我已按照以下链接Excellance Magento Blog

它工作正常。但我已经搜索了很多关于ajax删除项目的购物车,但谷歌总是返回我与第三方扩展。我找不到购物车删除产品的教程。所以我想,从免费的第三方扩展中获取一个参考,它既有添加到购物车又从购物车功能中删除。我发现这个以下扩展具有上述功能和工作摇滚。 Ajax cart pro

我检查了这个扩展编码部分。但我真的很困惑,我找不到哪些代码正在执行删除功能。我认为它们只覆盖控制器文件中的deleteAction。我甚至无法理解我在做什么。我只需要指导就可以添加ajax删除功能。

如果有人有想法或找到任何相关教程,请与我分享您的想法朋友。

2 个答案:

答案 0 :(得分:4)

潜入Ajaxcart扩展,在控制器的动作中,我们可以找到(是的,你是对的!),以下行实际上是删除了一个项目:

<强> $这 - &GT; _getCart() - &GT;的removeItem($ ID) - &GT;保存();

public function deleteAction() {
    $id = (int) $this->getRequest()->getParam('id');
    if ($id) {
        try {
            $this->_getCart()->removeItem($id)
                    ->save();
        } catch (Exception $e) {
            $_response = Mage::getModel('ajaxcart/response');
            $_response->setError(true);
            $_response->setMessage($this->__('Cannot remove the item.'));
            $_response->send();

            Mage::logException($e);
        }
    }

    $_response = Mage::getModel('ajaxcart/response');

    $_response->setMessage($this->__('Item was removed.'));

    //append updated blocks
    $this->getLayout()->getUpdate()->addHandle('ajaxcart');
    $this->loadLayout();

    $_response->addUpdatedBlocks($_response);

    $_response->send();
}

所以回答你的问题“哪个代码正在删除”,它肯定在其中;)

要理解整个过程,你应该记住以下几点:

  • ajaxcart.js - 他们正在重写Magento的setLocation函数,然后执行ajax调用(在ajaxCartSubmit方法中):

    var oldSetLocation = setLocation;
    var setLocation = (function() {
        return function(url){
           if( url.search('checkout/cart/add') != -1 ) {
                //its simple/group/downloadable product
                ajaxcart.ajaxCartSubmit(url);
    
  • 渲染 按钮 使用网址助手,如下所示:

    <button type="button" title="Add to Cart" class="button btn-cart"
        onclick="setLocation('<?php echo $this->helper('checkout/cart')->getAddUrl($_product, $additional = array('qty' => 1));?>')">
     +
    </button>
    
  • updateBlocks。 有一个Observer和 响应 模型,用于获取块列表更新/替换前端,渲染其内容并将em放到json响应中。

    $updated_blocks = unserialize(Mage::getStoreConfig('ajaxcart/general/update_blocks'));
    // ... for each do a $layout->getBlock('<blockName>')->toHtml() and add to json responce
    
  • 从核心布局和附加的ajaxcart句柄(layout / ajaxcart.xml)获取的块定义。 (cart_sidebar,top.links&amp; etc.)

答案 1 :(得分:0)

您可以参考以下代码

<?php
$id = '100'; // replace product id with your id

$cartHelper = Mage::helper('checkout/cart');
$items = $cartHelper->getCart()->getItems();
foreach($items as $item):
if($item->getProduct()->getId() == $id):
$itemId = $item->getItemId();
$cartHelper->getCart()->removeItem($itemId)->save();
break;
endif;
endforeach;
?>