`
kirenenko04
  • 浏览: 147248 次
  • 性别: 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>

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics