前提:价格阶梯只能设置一级

需要用到: jquery,transport.js(transport_jquery.js),Ajax.call

html页面

js代码,还需要插入jquery,transport.js(支持ajax插件的)文件

/**
* 点选可选属性或改变数量时修改商品价格的函数
*/
var goodsId = {$group_buy.goods_id}; // 参加团购产品的id,需要获取团购设置的初始价格
var act_id = {$group_buy.act_id}; // 扩展类别属性
function changePrice()
{ var attr = getSelectedAttributes(document.forms['ECS_FORMBUY']);
var qty = document.forms['ECS_FORMBUY'].elements['number'].value;
//alert('act=price&id=' + goodsId +'&act_id='+ act_id + '&attr=' + attr + '&number=');
Ajax.call('group_buy.php', 'act=price&id=' + goodsId +'&act_id='+ act_id + '&attr=' + attr + '&number=' + qty, changePriceResponse, 'GET', 'JSON'); } /**
* 接收返回的信息
*/
function changePriceResponse(res)
{
if (res.err_msg.length > 0)
{
alert(res.err_msg);
}
else
{
document.forms['ECS_FORMBUY'].elements['number'].value = res.qty; if (document.getElementById('ECS_GOODS_AMOUNT'))
document.getElementById('ECS_GOODS_AMOUNT').innerHTML = res.result;
//alert(res.result);
}
}
/*新增 商品点击效果*/
function changeAtt(t,src,key) {
//alert(key);
document.getElementById('spec_value_'+src).checked='checked';
div = document.getElementById("EXP_"+key);
elems = div.getElementsByTagName("dl")[0].getElementsByTagName("a");
for(i=0;i<elems.length;i++){
elems[i].className='';
}
t.className = "on";
//elems[t].getElementsByTagName("span")[0].style.display="block";
changePrice();
}

php文件  group_buy.php?act=price  ,另一个是扩展属性(价格)function group_attr(){}

/*------------------------------------------------------ */
//-- 改变属性、数量时重新计算商品价格
/*------------------------------------------------------ */ elseif (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'price')
{
include('includes/cls_json.php'); $goods_id = $_GET['id'];
$act_id = $_GET['act_id'];
$attr = $_GET['attr'];
$attr = explode(',',$_GET['attr']); // 注意这里传递过来的值,有可能是1个值或者2个值或者3个值,具体的要看扩展属性有几个阶梯
foreach($attr as $v){
$attr_price[] = group_attr($v);
}
$total_attr_price = array_sum($attr_price); // 所有扩展分类的总价格 $json = new JSON;
$res = array('err_msg' => '', 'result' => '', 'qty' => ); $attr_id = isset($_REQUEST['attr']) ? explode(',', $_REQUEST['attr']) : array();
$number = (isset($_REQUEST['number'])) ? intval($_REQUEST['number']) : ; if ($goods_id == )
{
$res['err_msg'] = $_LANG['err_change_attr'];
$res['err_no'] = ;
}
else
{
if ($number == )
{
$res['qty'] = $number = ;
}
else
{
$res['qty'] = $number;
} // $shop_price = get_final_price($goods_id, $number, true, $attr_id);
$group_info = group_buy_info($act_id); // 获得团购的最终价格
$shop_price = $group_info['cur_price']+$total_attr_price; $res['result'] = price_format($shop_price * $number);
} die($json->encode($res));
}
// 获取某个商品的扩展属性价格
function group_attr($goods_attr_id){
$sql = 'select attr_price from '.$GLOBALS['ecs']->table('goods_attr').' where goods_attr_id='.$goods_attr_id;
$result = $GLOBALS['db']->getOne($sql);
return floatval($result );
}

ecshop产品详情,默认改价

html

<script type="text/javascript">
var goods_id = {$goods_id};
var goodsattr_style = {$cfg.goodsattr_style|default:};
var gmt_end_time = {$promote_end_time|default:};
{foreach from=$lang.goods_js item=item key=key}
var {$key} = "{$item}";
{/foreach}
var goodsId = {$goods_id};
var now_time = {$now_time}; <!-- {literal} -->
onload = function(){
changePrice();
fixpng();
try { onload_leftTime(); }
catch (e) {}
} /**
* 点选可选属性或改变数量时修改商品价格的函数
*/
function changePrice()
{
var attr = getSelectedAttributes(document.forms['ECS_FORMBUY']);
var qty = document.forms['ECS_FORMBUY'].elements['number'].value; Ajax.call('goods.php', 'act=price&id=' + goodsId + '&attr=' + attr + '&number=' + qty, changePriceResponse, 'GET', 'JSON');
} /**
* 接收返回的信息
*/
function changePriceResponse(res)
{
if (res.err_msg.length > )
{
alert(res.err_msg);
}
else
{
document.forms['ECS_FORMBUY'].elements['number'].value = res.qty; if (document.getElementById('ECS_GOODS_AMOUNT'))
document.getElementById('ECS_GOODS_AMOUNT').innerHTML = res.result;
}
}
<!-- {/literal} -->
/*新增 商品点击效果*/
function changeAtt(t,src,key) {
//alert(key);
document.getElementById('spec_value_'+src).checked='checked';
div = document.getElementById("EXP_"+key);
elems = div.getElementsByTagName("dl")[].getElementsByTagName("a");
for(i=;i<elems.length;i++){
elems[i].className='';
}
t.className = "on";
//elems[t].getElementsByTagName("span")[0].style.display="block";
changePrice();
}

php代码

if (!empty($_REQUEST['act']) && $_REQUEST['act'] == 'price')
{
include('includes/cls_json.php'); $json = new JSON;
$res = array('err_msg' => '', 'result' => '', 'qty' => ); $attr_id = isset($_REQUEST['attr']) ? explode(',', $_REQUEST['attr']) : array();
$number = (isset($_REQUEST['number'])) ? intval($_REQUEST['number']) : ; if ($goods_id == )
{
$res['err_msg'] = $_LANG['err_change_attr'];
$res['err_no'] = ;
}
else
{
if ($number == )
{
$res['qty'] = $number = ;
}
else
{
$res['qty'] = $number;
} $shop_price = get_final_price($goods_id, $number, true, $attr_id);
$res['result'] = price_format($shop_price * $number);
} die($json->encode($res));
}

总结:

1.要想点击价格有变动,ajax.all 必须得可以调取到值。

2.给一个团购的id,或者到参加团购商品的团购价格、或者属性

3.有了团购价格,再来获取点击扩展属性,获取扩展属性价格

4.团购价格、扩展属性价格都齐全了,利用ecshop本身的js功能function changePriceResponse 给某个id="ECS_GOODS_AMOUNT">{$group_buy.formated_cur_price}</div>值

ecshop 团购点击价格变动的更多相关文章

  1. IOS第八天(2:UITableViewController团购,点击底部,xib加载更多, 代理模式)

    ******* HMViewController.h #import "HMViewController.h" #import "HMTg.h" #import ...

  2. ecshop 团购-》调取评论

    涉及到的文件及代码:lib_insert.php,comments.lbi,{insert name='comments' type=$type id=$id} html代码: <blockqu ...

  3. ecshop团购显示“库存不足”

    产生原因:是因为产品设置了多属性 解决办法:打开group_buy.php 第 267行找到 empty($product_info) ? $product_info = array(, ) : '' ...

  4. IOS第八天(3:UITableViewController团购, 点击底部代码调整)

    ****代理者的方法中 // 通知页脚视图调整视图显示状态 [footerView endRefresh]; //发送代理通知的类中 /** 视图控制器刷新完成调用方法 */ - (void)endR ...

  5. ecshop首页调用团购信息产品购买人数

    当我们在ecshop后台录入ecshop的团购信息之后,我们在ecshop的前台首页index.php里面,可以看到他能调用ecshop的团购商品信息,其中就包括团购商品的一些价格信息.但是如何在ec ...

  6. ecshop首页调用团购说明

    要在首页调用购买. 发现在首页还不能直接调用团购说明.查看了一下代码发现要修改下才能调 打开根目录的 index.php 文件找到 $sql = 'SELECT gb.act_id AS group_ ...

  7. js实现倒计时 类似团购网站

    一.demo与效果展示 为节约时间,我就直接套用了企鹅团的界面作为demo的背景.因为是倒计时,所以需要一个固定的时间,为了n年后,某位仁兄打开demo页面依然在倒计时,所以我把倒计时时间设成了205 ...

  8. 团购、定时抢购倒计时js版

     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org ...

  9. swift项目-模仿团购(主界面的搭建,以及首页的一些细节)

    以前学习oc的时候写的一个团购的项目,现在学习swift,拿来用swift写一遍,也是连猜带蒙的,一点一点的往上凑. 今天主要是把主要的架子搭起来了. 主要有:UITabBarController,U ...

随机推荐

  1. 让Bootstrap 3兼容IE8浏览器

    最近在研究Bootstrap(官方,Github)这个优秀的前端框架,Bootstrap最开始是Twitter团队内部的一个前端框架,所谓前端框架就是一个CSS/HTML框架,框架里面有下拉菜单.按钮 ...

  2. NSTimer内存泄漏导致控制器不调用dealloc

    创建定时器会在一定的间隔后执行某些操作,一般大家会这样创建定时器,这样创建的定时,self对定时器有个引用,定时器对self也有个引用,造成了循环引用,最终造成了内存泄漏,如果定时器在做下载的操作就会 ...

  3. bbs树形打印(一)

    前言:大家在bbs回帖时常常可以看到树形的回复形式. dfs设计 (1) 为使得Connection仅打开一次,因此以conn作为其中一个递归参数,在递归全程不关闭conn; (2)根据存入数据的树状 ...

  4. C++ 合成默认构造函数的真相

    对于C++默认构造函数,我曾经有两点误解: 类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个合成的默认构造函数. 合成默认构造函数会初始化类中所有的数据成员. 第一个误解来自于我学习 ...

  5. js-JavaScript高级程序设计学习笔记14

    第十六章 HTML5脚本编程 1.跨文档消息传递.简称XDM,指的是来自不同域的页面间传递消息. XDM的核心是postMessage()方法,接收两个参数,一条消息和消息接收方来自哪个域的字符串. ...

  6. Leetcode #2 Add two number

    Q: You are given two linked lists representing two non-negative numbers. The digits are stored in re ...

  7. 【csuoj1014】 西湖三人行

    http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1014 (题目链接) 题意 从无向图图上一点到达另一点,可以步行,搭公交或者是打的,不同的交通方式花 ...

  8. 【codevs1170】 双栈排序

    http://codevs.cn/problem/1170/ (题目链接) 题意 给出一个初始序列,判断能否通过两个栈的入栈和出栈操作构造出一个有序序列.若可以,输出字典序最小的方案. Solutio ...

  9. C# winform窗体设计-通过条件查询数据

    在winform 数据库设计中,有时候需要通过条件查询对应的数据,并且将数据显示在文本框(or 富文本框)中,下面,小编将讲述通过一个条件: 首先,我们需要对数据库建立连接,并且执行数据库命令,在此之 ...

  10. PHP Fatal error: Call to undefined function mb_substr()

    Lamp架构 PHP 5.3.29 #查看php是否有mbstring模块 php -m | grep mbstring yum install php-mbstring -y find / -nam ...