`
kirenenko04
  • 浏览: 151048 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

Add or Remove Product Using Ajax

 
阅读更多

1. rewrite core compare action

<?xml version="1.0"?>
<config>
  <modules>
    <Bysoft_Mycatalog>
      <version>0.1.0</version>
    </Bysoft_Mycatalog>
  </modules>
  <global>
    <helpers>
      <mycatalog>
        <class>Bysoft_Mycatalog_Helper</class>
      </mycatalog>
      <catalog>
		<rewrite>
			<product_compare>Bysoft_Mycatalog_Helper_Product_Compare</product_compare>
		</rewrite>
      </catalog>
    </helpers>
    <resources>
	  <mycatalog_setup>
		<setup>
		  <module>Bysoft_Mycatalog</module>
		  <class>Mage_Eav_Model_Entity_Setup</class>
		</setup>
		<connection>
		  <use>core_setup</use>
		</connection>
	  </mycatalog_setup>
	  <mycatalog_write>
		<connection>
		  <use>core_write</use>
		</connection>
	  </mycatalog_write>
	  <mycatalog_read>
		<connection>
		  <use>core_read</use>
		</connection>
	  </mycatalog_read>
	</resources>
	<blocks>
	  <mycatalog>
		<class>Bysoft_Mycatalog_Block</class>
	  </mycatalog>
			<catalog>
				<rewrite>
					<layer_view>Bysoft_Mycatalog_Block_Layer_View</layer_view>
					<category_view>Bysoft_Mycatalog_Block_Category_View</category_view>
				</rewrite>
			</catalog>
	</blocks>
  </global>
  <frontend>
        <routers>
            <catalog>
				<args>
					<modules>
						<bysoft_mycatalog before="Mage_Catalog">Bysoft_Mycatalog</bysoft_mycatalog>
					</modules>
				</args>
			</catalog>
        </routers>
        <layout>
            <updates>
                <arithmetic>
                    <file>mycatalog.xml</file>
                </arithmetic>
            </updates>
        </layout>   
  </frontend>
</config> 

 2. in controller file. 

<?php 
require_once(Mage::getModuleDir('controllers','Mage_Catalog').DS.'Product'.DS.'CompareController.php');
class Bysoft_Mycatalog_Product_CompareController extends Mage_Catalog_Product_CompareController {
	public function changeajaxAction() {
		$productId = (int) $this->getRequest()->getParam('product');
		if ($productId
				&& (Mage::getSingleton('log/visitor')->getId() || Mage::getSingleton('customer/session')->isLoggedIn())
		) {
			if ($this->is_compare($productId)) {
				// to uncompared
				 $this->remove_compare($productId);
				
			} else {
				// to compared
				 $this->add_compare($productId);
			}			
		}		
	}
	/**
	 * check the product is compare or not
	 * @param unknown $productId
	 */
	public function is_compare($productId) {
		
		$product = Mage::getModel('catalog/product')->load($productId);
		$item = Mage::getModel('catalog/product_compare_item');
		$list = Mage::getModel('catalog/product_compare_list');
		//$list->_addVisitorToItem($item);
	
		$item->addVisitorId(Mage::getSingleton('log/visitor')->getId());
		if (Mage::getSingleton('customer/session')->isLoggedIn()) {
			$item->addCustomerData(Mage::getSingleton('customer/session')->getCustomer());
		}
	
		$item->loadByProduct($product);
		if ($item->getId()) {
			return true;
		} else {
			return false;
		}
	}
	
	public function add_compare($productId) {
		try {
			if ($productId
					&& (Mage::getSingleton('log/visitor')->getId() || Mage::getSingleton('customer/session')->isLoggedIn())
			) {
				$product = Mage::getModel('catalog/product')
				->setStoreId(Mage::app()->getStore()->getId())
				->load($productId);
		
				if ($product->getId()/* && !$product->isSuper()*/) {
					Mage::getSingleton('catalog/product_compare_list')->addProduct($product);
					Mage::getSingleton('catalog/session')->addSuccess(
					$this->__('The product %s has been added to comparison list.', Mage::helper('core')->escapeHtml($product->getName()))
					);
					Mage::dispatchEvent('catalog_product_compare_add_product', array('product'=>$product));
				}
		
				
				Mage::helper('catalog/product_compare')->calculate();
			}
			echo json_encode(array('status'=>'1','is_compare'=>'1'));
		} catch (Exception $e) {
			echo json_encode(array('status'=>'2','msg'=>$e->getMessage()));
		}
	}
	
	public function remove_compare($productId) {
		try {
			if ((int) $productId) {
				$product = Mage::getModel('catalog/product')
				->setStoreId(Mage::app()->getStore()->getId())
				->load($productId);
		
				if($product->getId()) {
					/** @var $item Mage_Catalog_Model_Product_Compare_Item */
					$item = Mage::getModel('catalog/product_compare_item');
					if(Mage::getSingleton('customer/session')->isLoggedIn()) {
						$item->addCustomerData(Mage::getSingleton('customer/session')->getCustomer());
					} elseif ($this->_customerId) {
						$item->addCustomerData(
								Mage::getModel('customer/customer')->load($this->_customerId)
						);
					} else {
						$item->addVisitorId(Mage::getSingleton('log/visitor')->getId());
					}
		
					$item->loadByProduct($product);
		
					if($item->getId()) {
						$item->delete();
						Mage::getSingleton('catalog/session')->addSuccess(
						$this->__('The product %s has been removed from comparison list.', $product->getName())
						);
						Mage::dispatchEvent('catalog_product_compare_remove_product', array('product'=>$item));
						Mage::helper('catalog/product_compare')->calculate();
					}
				}
			}
			echo  json_encode(array('status'=>'1','is_compare'=>0));
		} catch (Exception $e) {
			echo  json_encode(array('status'=>'2','msg'=>$e->getMessage()));
		}
	}
	
}
?>

 3. in frontend phtml file

<div class="compare-box">
	                        <a class="compare-a <?php echo $this->getCompareClass($_product->getId());?>"	                     	                 
	                        to_url="<?php echo $_compare_helper->getChangeAjaxUrl($_product);?>"
	                        >
	                    	<?php echo $this->getCompareLabel($_product->getId());?></a></div>

 4. jquery ajax

<script type="text/javascript">//<![CDATA[
   (function($){
		$(".compare-a").click(function(){
			var current_obj = $(this);
			var is_compare =  $(this).attr('is_compare');		
			var ajax_url =  $(this).attr('to_url');
			$.ajax({  
		            url: ajax_url,  
		            type: "POST",  
		            dataType:"json",  
		            success: function(json_obj) { 
		                if(json_obj.status == 1) {
		                	if (json_obj.is_compare == '1') {
			                	alert('is_compare:1');
			                	current_obj.addClass('compared');
			                	current_obj.removeClass('uncompared');			                	
			                	current_obj.html('Compared'); 
		                	} else {
		                		alert('is_compare:0');
		                		current_obj.addClass('uncompared');
			                	current_obj.removeClass('compared');			                
			                	current_obj.html('Uncompared');
			                }
		                } else {
			                alert(json_obj.msg);		            
		                }  
		            }
		    }); 
		})
    })(jQuery); 
         //]]></script>

 

分享到:
评论

相关推荐

    dxbar 系统菜单 add or Remove Buttons 汉化

    dxmanageer是一个非常优秀的菜单软件,但 里面的系统菜单是英文的,比方‘Add or Remove Buttons’就是英文的,这个可能在我们应用的时候会有些小小的瑕疵,本例子就把‘Add or Remove Buttons’修改成了‘删除或...

    Control Panel - Add/Remove Programs

    "Control Panel - Add/Remove Programs" 是Windows操作系统中一个核心的功能组件,主要负责管理用户的程序安装和卸载。这个功能让用户能够轻松地在系统中添加新的应用程序或移除不再需要的程序,从而保持系统的整洁...

    add_Remove_Master 6.0 破解版

    超強 軟體安裝 移除程式,它可以讓你 重覆 註冊 試用軟件 無 數次 !!

    卸载工具addremove

    一款很好用的卸载程序,很多顽固程序手动无法卸载的均可使用此程序卸载.

    Fragment后退栈和add,remove,replace的基本使用

    本篇文章将详细探讨Fragment后退栈以及`add`, `remove`, `replace`这三种操作的基本使用。 首先,理解Fragment后退栈(BackStack)的概念至关重要。后退栈是Android系统用于管理Fragment状态的一种机制,它模拟了...

    How to call Server Side function using ajax in asp.net

    &lt;add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/&gt; ``` 四、客户端JavaScript 接下来,在...

    vue-cli3增删改vue-cli3_add_remove_amend.vue(逻辑简单,非常适合新手学习,复制粘贴就能用)

    vue-cli3增删改,不需要后端接口,纯前端逻辑,复制粘贴就能用,主要提供学习,绝对适合新手非常适合新手学习非常适合新手学习

    Struts 2 and Ajax

    因此,Struts 2其中的一个重要的功能(Feature)就是“First-class AJAX support - Add interactivity and flexibility with AJAX tags that look and feel just like standard Struts tags(大意:一流的AJAX支持...

    Ajax-Magento-ajax-add-to-cart.zip

    Ajax-Magento-ajax-add-to-cart.zip,[模块magento 1]magento ajax添加到购物车-ajoter vos produits au panier en ajax/感谢ajax将您的产品添加到购物车,ajax代表异步javascript和xml。它是多种web技术的集合,包括...

    ORACLE 19C RAC remove add node

    ORACLE 19C RAC remove add node

    Add Textbox Dynamically using jQuery.zip

    "Add Textbox Dynamically using jQuery.zip"这个压缩包中的示例,主要展示了如何利用jQuery在用户交互时动态创建一个新的文本输入框。 首先,jQuery库是一个强大的JavaScript库,它简化了DOM操作、事件处理、动画...

    ajax技术用到的包 老版本ajax.dll .net1.1版本ajaxpro.ll net2.01版本ajaxpro.2.dll

    &lt;add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" /&gt; &lt;add verb="*" path="*.ashx" type="AjaxPro.AjaxBitmapHttpHandler,AjaxPro.2"/&gt; Ajax.dll的配置文件写法为 &lt;add verb...

    demo跨域ajax_DEMO_ajax跨域_

    在Web开发中,跨域(Cross-Origin)是一个常见的问题,特别是在使用Ajax进行异步数据交互时。本示例“demo跨域ajax_DEMO_ajax跨域”着重解决C#后端与JavaScript前端之间的跨域限制。这里我们将深入探讨什么是跨域、...

    Beginning JavaScript with DOM Scripting and Ajax: Second Editon

    If you want to learn some basic programming concepts, have experience but need help updating your skills, or you’re coming from another language, Beginning JavaScript with DOM Scripting and Ajax can...

    struts2ajax项目

    在处理完业务逻辑后,Action可以通过`ActionSupport`的`setFieldErrors()`、`addMessage()`等方法设置结果,然后返回一个表示成功或失败的结果名称。 当Ajax请求成功时,jQuery的`success`回调函数会被调用,你可以...

    reveal-add-remove.js:为reveal.js 提供addremove 功能

    安装reveal-add-remove.js 待定用法待定贡献请保持仅限于错误报告、功能请求和拉取请求。 如果您要报告错误,请确保包含有关您使用的浏览器和操作系统的信息以及重现问题的必要步骤。 如果您有个人支持问题,请使用 ...

    ajax环境webconfig配置

    &lt;add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/&gt; ``` 这一行代码的作用是注册了System.Web...

    dtree+ajax异步加载树

    **dtree+ajax异步加载树详解** 在Web开发中,数据展示往往涉及到大量的层级结构,如文件系统、组织架构等。dtree是一款基于JavaScript的树形控件,它能够帮助开发者实现动态、交互式的树状菜单。而Ajax...

    .net 前台调用后台函数的 Ajax 方法

    &lt;add verb="*" path="*.ashx" type="AjaxPro.AjaxHandlerFactory,AjaxPro.2" /&gt; ``` 现在,在后台代码中,我们需要创建一个公共的类(例如`_Default`),并在此类中定义一个可被Ajax调用的方法。使用`AjaxPro....

     ajax 插入 删除功能

    【Ajax 插入与删除功能】是Web开发中的常见操作,尤其在动态更新页面内容时,Ajax技术的应用能显著提升用户体验。在这个例子中,我们关注的是如何在ASP.NET平台上利用Ajax实现数据的增删功能,并结合MSSQL数据库进行...

Global site tag (gtag.js) - Google Analytics