通过ajax操作magento产品属性加一(如diggs +1)

作者:Jeen 发布于:2013-4-21 18:27 Sunday 分类:工作笔记

参考其他网站www.marcmart.com   实现 站内产品digg+1
这边简单的记一下流水账,希望对看到这篇文章的人有帮助 :-)

首先需要建立对应的产品属性,这边我们命名为 diggs . 类型为文本,默认值为 0
新建完成后添加此属性到对应的属性组,如Default

接下来,需要进行ajax操作 就要有一个对应的请求url
于是我们需要在控制器中添加对应的动作
修改core/Mage/Catalog/controllers
ProductController.php 文件,添加indexAction 方法     (由于magento   local 目录中方法重载偶尔会抽风,所以这边直接对核心文件进行修改)
代码如下:

public function indexAction()
    {
        $productId = $this->getRequest()->getParam('id');
        $qty = (int)$this->getRequest()->getParam('qty');
        $key = Mage::getSingleton('core/cookie')->get($productId.'diggs');
        if(!$key){
            Mage::getSingleton('core/cookie')->set($productId.'diggs',md5($productId.'diggs'));
            $product = Mage::getModel('catalog/product')
                    ->load($productId)
                    ->setDiggs($qty)
                    ->save();
 
            echo 'yes';
        }
    }

属性及处理动作有了,现在要做的就是把他们关联起来了。
这边我们使用jquery进行操作,由于比较菜  就没用prototype去重写ajax 方法了
修改page.xml  或 catalog.xml  在对应位置 调用jquery库,为了防止js库冲突,建议在page.xml  中最先调用jquery
修改 产品查看页代码 view.phtml
添加动作按钮 及 调用相关数据的代码  (样式可自行定义):


1
2
3
4
5
<?php  if($_product->getDiggs()!= ''): ?>
<span class="diggs"><a id="diggs" href="javascript:;">Diggs</a> (<span id="diggs-qty">
<?php echo $_product->getDiggs(); ?>
</span> customers like this)</span><span id="loadimg" style="display: none;background:url(<?php echo $this->getUrl('js/jquery').'opc-ajax-loader.gif'; ?>) no-repeat;float:left;height:16px;width:16px;"></span>
<?php endif; ?>

然后就是按钮动作控制的js代码了,样例代码如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<script type="text/javascript">
    jQuery.noConflict();
    jQuery("#diggs").click(function(){
        jQuery("#loadimg").show();
        var diggs = parseInt(jQuery("#diggs-qty").text())+1;
        jQuery.ajax({
        url:"<?php echo Mage::getBaseUrl()?>catalog/product/index",
        dataType:"text",
        data:"id=<?php echo $_product->getId();?>&qty="+diggs,
        success:function(data){
            jQuery("#loadimg").hide();
            if(data){
                jQuery("#diggs-qty").html(diggs); alert('Thank you!');
            }else{alert('You have already dugg this product.')} }});
    });
</script>

这样一整条 逻辑流程 就算走完了, 清理缓存后测试看看吧 :)

标签: magento

发表评论:

©2010-2024 Jeen All Rights Reserved.Powered by emlog 京ICP备15058100号-1