1
card 代金券
ID 代金券 id
识别码 code
ID 商户 partner_id
ID 商品 team_id
ID 订单 order_id
代金券金额 credit
是否使用过 consume
IP 时候时候的 ip
有效期开始时间 begin_time
有效期结束时间 end_time
category 表 分类
id : id 分类的
zone : 分类类型
czone : 分类的分组
name : 分类名称
ename : 分类的英文名称
letter : 分类的名称首字
sort_order : 分类的排序
display : 是否显示首页
order 表 订单
id : id 订单
支付编号,也就是订单编号 : pay_id
ID 购买会员的 : buy_id
支付方式 : service
user_id : ID 会员
判断是否管理员 , admin_id : id 管理员
team_id : ID 项目 2
city_id : ID 城市
card_id : ID 代金券
state : 支付状态
quantity : 商品数量
realname : 真实姓名
mobile : 手机号码
zipcode : 邮政编码
address : 收货地址
express : 是否选择快递
express_id : 快递编号
express_no : 快递单编码
price : 商品价格
money : 已支付金额
origin : 订单总价格
credit : 积分获取
card : 使用优惠券金额
condbuy : 商品属性
remark : 购买备注
create_time : 下单时间
pay_time : 支付时间
comment_content : 评论内容
comment_display : 评论显示 3
comment_grade : 评论级别
comment_time : 评论时间
partner_id : ID 商家
sms_express : 短信通知
coupon 最土数据库优惠券表
id ID: 优惠卷
user_id ID: 会员的
partner_id ID: 商户的
team_id ID: 项目的
ID:order_id 订单编号
type : 类型
credit : 获得积分
:secret 优惠卷密码
:consume 是否使用过
ip:ip 使用优惠卷时的
:sms 是否成功发送短信
:expire_time 优惠券过期时间
:sms_time 短信发送时间
:buy_id 该项目下的购买次序
表 partner 最土数据库商家信息
id ID: 商户
username : 商户用户名
:password 商户密码
:title 商户名称
:group_id 商户商品分类
:homepage 商户网站地址
city_id id: 商户城市
:bank_name 商户银行帐户名称
:bank_no 商户银行帐户帐号
bank_user : 商户用户名
location : 商户所处位置
contact : 商户联系人
:image 商户图片
1:image1 商户图片
2:image2 商户图片
:phone 商户电话号码
:address 商户联系地址 4
:other 商户其他信息
:mobile 商户手机号码
:open 商户展示
id:user_id 商户会员
:create_time 商户建立时间
:display 是否显示首页
:comment_good 对商户评论满意数量
:comment_none 对商户评论一般数量
:comment_bad 对商户评论失望数量
结构 logger_admin 最土数据库管理员日志表
id : 日志编号
user_id ID: 操作管理员
:user_email 操作管理员的邮件
type : 操作类型
operation : 操作描述
relate_data : 相关数据
create_on : 操作时间
表结构 user 最土会员
id id: 会员
email : 会员邮件
username : 会员名称
realname : 会员真实名
password : 会员密码
avatar : 会员头项
gender : 性别
mobile : 手机号码
qq QQ: 联系
money : 帐户余额
score : 帐户积分
zipcode : 邮政编码
address : 联系地址
city_id ID: 所在城市
:enable 是否通过邮件验证
:manager 是否为管理员
:secret 邮件验证的密钥 5
:recode 修改密码的密钥种子
ip : 地址 IP 登陆时
login_time : 最后登陆时间
create_time : 注册时间
friendlink 最土数据库友情链接表
id ID: 友情连接
:title 友情链接标题
:url 友情链接地址
logo logo: 友情链接
sort_order : 排序
:display 是否显示首页
invite 最土数据库邀请返利表
id id: 邀请
user_id ID: 邀请人
admin_id : 处理邀请的管理员
user_ip IP: 邀请注册时
other_user_id ID: 被邀请人
team_id : ID 项目
:pay 是否支付
credit : 获得的返利
buy_time : 购买时间
create_time : 写入记录时间
feedback 最土数据库问题反馈表
id : 留言编号
city_id id: 城市 6
user_id id: 留言用户
category : 留言类型
title : 称呼
contact : email 联系
conent : 留言内容
create_time : 留言时间
表 ask 最土数据库提问答疑
id : ID 提问
user_id : UID 提问用户
team_id : id 团购项目
city_id id: 提问所在城市
type : 提问类型
content : 提问内容
comment 回复内容:
create_time : 提问时间
表 goods 最土积分兑换商品数据库
id id: 积分商品
titie : 积分商品标题
:score 兑换所需要的积分
image : 积分商品的图片
time : 积分商品创建时间
sort_order : 排序字段
:consume 已经兑换数量 7
display : 是否显示
subscribe 最土数据库邮件订阅表
id ID: 订阅
:email 订阅邮件
city_id ID: 订阅所在的城市
secret : 订阅时候的密钥
smssubscribe 最土数据库手机号码订阅表
id : 订阅编号
mobile : 订阅的手机号
city_id ID: 城市
secret 手机订阅的密钥:
enable : 状态
create_time 订阅时间:
最土收货人信息功能分析
解最土收货人信息功 的时候。就必须知道和了 最土程序 我们在使用和研究
我们可以 , 在填写配送信息的时候 , 的时候 最土项目 我们在在最土后台录入 , 能
在 选择使用优惠券,当然也可以为该商品选择对应的物流。那么他就是记录
字段中。 express
那 。 首先我们看购买信息填写页面,当录入该商品的时候。选择了物流信息
首先我们找到对应的模 。 就必须填写收货人信息和地址 , 么在购买该商品的时候
板。
$team['delivery']=='express'}--> <!--{if
<div
class="expresstip">${nl2br(htmlspecialchars($team['express']))}</div>
</h3></div> 快递信息 clear"><h3> class="wholetip <div
username"> class="field <div
</label> 收件人 <label>
id="settings-realname" name="realname" size="30" type="text" <input 8
require="true" value="{$login_user['realname']}" class="f-input"
/> datatype="require"
收件人请与有效证件姓名保持一致,便于收取物品 class="hint"> <span
</span>
</div>
mobile"> class="field <div
</label> 手机号码 <label>
id="settings-mobile" name="mobile" size="30" type="text" <input
require="true" value="{$login_user['mobile']}" class="number"
手机号码是 class="inputtip"> <span /> maxLength="11" datatype="mobile"
</span> 我们联系您最重要的方式,请准确填写
</div>
username"> class="field <div
</label> 收件地址 <label>
id="settings-address" name="address" size="30" type="text" <input
require="true" value="{$login_user['address']}" class="f-input"
/> datatype="require"
县 _ 市 _ 省 _ 为了能及时收到物品,请按照格式填写: class="hint"> <span
_</span> (区)
表 信息之后,我们可以将数据提交到数据库 最土的订单 当我们填写完信息
中去。具体的代码参考以下。 order
array( = $insert
'express_id', 'state', 'city_id', 'team_id', 'user_id',
'price', 'origin', 'express', 'fare',
'mobile', 'realname', 'zipcode', 'address',
'condbuy', 'remark', 'create_time', 'quantity',
);
{ $table->update($insert)) = ($flag if
abs(intval($table->id)); = $order_id
*/ 插入订单来源 /*
$order_id; = $data['order_id']
$login_user_id; = $data['user_id']
$_COOKIE['referer']; = $data['referer']
time(); = $data['create_time']
$data); DB::Insert('referer',
redirect(WEB_ROOT."/order/check.php?id={$order_id}");
}
</div>
mobile"> class="field <div
</label> 邮政编码 <label> 9
id="settings-mobile" name="zipcode" size="30" type="text" <input
require="true" value="{$login_user['zipcode']}" class="number"
/> maxLength="6" datatype="zip"
</div>
<!--{else}-->
当最土的订订单提交后,我们就可以通过后台查看订单的详细信息。具体
的代码。可以参考以下代码。
{ $action) == 'orderview' ( if else
$id); Table::Fetch('order', = $order
$order['user_id']); Table::Fetch('user', = $user
$order['team_id']); Table::Fetch('team', = $team
$id); Table::Fetch('referer', = $order['referer']
{ 'express') == ($team['delivery'] if
option_category('express'); = $option_express
$option_express[$order['express_id']]; = $order['express_name']
}
array( = $payservice
', 支付宝 ' => 'alipay'
', 财付通 ' => 'tenpay'
', 网银在线 ' => 'chinabank'
', 余额付款 ' => 'credit'
', 线下支付 ' => 'cash'
);
array( = $paystate
</font>', 未付款 color="green"> '<font => 'unpay'
</font>', 已付款 color="red"> '<font => 'pay'
);
array( = $option_refund
', 退款到账户余额 ' => 'credit'
', 其他途径已退款 ' => 'online'
);
render('manage_ajax_dialog_orderview'); = $html
'dialog'); json($html,
}
最土代金券功能分析
比如 , 我们可以选择该商品最多能使用多少代金券 , 项目的时候 最土 我们在录入
付 。那么你手上有最土的代金券的话。你只需要支 20 ,商品价格是 10 你录入是 10
元就可以。非常方便。我们在后台可以生成代金券,具体的在最土后台代金 10
券管理里面。
据 主要占 。 面 表里 card 土数据库 他是存储在最 , 生成代金券之后 最土后台
字段。里面存储着使用期限。 id
我们在购买的时候,当填写完最土的收货人信息之后,会进入支付页面,这
抵消部 。 你就可以直接输入代金券 。 个时候如果该商品允许使用最土代金券的话
JS 。当我们点输入代金券的时候,将触发以下 分余额
{ function() = X.misc.cardcode
jQuery('#cardcode-order-id').attr('value'); = oid var
jQuery('#cardcode-card-id').attr('value'); = cid var
+ !X.get(WEB_ROOT return if(oid&&cid)
'/ajax/order.php?action=cardcode&id='+oid+'&cid='+cid);
};
来返回逻辑数据流。 ajax/order.php 该方法调用
{ 'cardcode') == $action ( elseif
strval($_GET['cid']); = $cid
$order_id); Table::Fetch('order', = $order
'alert'); ', 订单记录不存在 json(' ) !$order ( if
$cid); ZCard::UseCard($order, = $ret
{ ) $ret === true ( if
json(array(
'type'=>'alert'), ", 代金券使用成功 " => array('data'
'type'=>'refresh'), null, => array('data'
'mix'); ),
}
ZCard::Explain($ret); = $error
'alert'); json($error,
}
我们看到,当我们输入代金券的时候,将返回一定的提示。。他就是通过
方式来返回提示信息的。该函数代码如下。 ZCard::Explain($ret);
{ Explain($errno) function public static
{ switch($errno)
'; 代金券不存在 ' return : self::ERR_NOCARD case
'; 代金券不可用于本单 ' return : self::ERR_TEAM case
'; 代金券面额受限 ' return : self::ERR_CREDIT case 11
'; 不在有效期内 ' return : self::ERR_EXPIRE case
'; 代金券已被使用 ' return : self::ERR_USED case
'; 每单只能用一张代金券 ' return self::ERR_ORDER: case
}
'; 未知错误 ' return
}
最土邀请返利润功能分析
最土 最近朋友常常要求对 . 也有不少接触 最土二次开发 研究最土有很长时间,对
其实他 , 可以获取自己的邀请链接 。 首先我们在个人中心里面 . 返利功能进行分析
天。 3 变量为 cookie 的 _rid 在该页面记录 , 的一个链接 r.php 就是指向
也就 . 就是注册的时候判断如果存在邀请 , 我们可以看到注册页面有以下代码
. 里面的值 cookie 存在,那么记录当前注册会员的推荐人为 $_COOKIE[_rid] 是
abs(intval(cookieget('_rid'))); = $_rid
{ $user_row['id']) && ($_rid if
$_rid); Table::Fetch('user', = $r_user
{ ) $r_user ( if
$user_row); ZInvite::Create($r_user,
ZCredit::Invite($r_user['id']);
}
}
. 表里面增加了一条邀请记录 invite 然后我们可以看到在
$ruser['id'], => 'user_id'
$ruser['ip'], => 'user_ip'
$newuser['id'], => 'other_user_id'
$newuser['ip'], => 'other_user_ip'
time(), => 'create_time'
);
$invite); DB::Insert('invite', return
我们还可以看到会员的帐户积分和积分 。 如果后台设置了最土邀请送积分的话
通过该代码实现的。将数据写入最土邀请 , 表明晰里面的积分记录将增加一条
invite 最土邀请返利表
$user_id); Table::Fetch('user', = $user
array( $user_id, Table::UpdateCache('user',
), "`score`+{$score}" array( => 'score'
)); 12
array( = $u
$user_id, => 'user_id'
0, => 'admin_id'
$score, => 'score'
$action, => 'action'
$detail_id, => 'detail_id'
time(), => 'create_time'
);
$u); DB::Insert('credit', return
最土团购程序注册功能扩展
我们在使用和研究最土二次开发的时候,需要对最土的注册功能进行改进和调
在最土程序的注册功能里面,增加几个注册 , 整,比如对最土注册功能进行扩展
. 字段。下面我们将结合最土的注册程序,来谈谈注册功能扩展
intid column add , varchar(64) usercard column add user table 1:alter
0 default int(1)
增加以下代码 2:ajax/validator.php
{ ) $n == 'signupcard' ( elseif
strlen($v); = $slength
1); Output::Json(null, ($slength<4) if
{ (!Utility::ValiUsercard($v)) if
1); Output::Json(null,
}
array( Table::Count('user', = $exists
$v, => 'usercard'
));
if($exists){
1); Output::Json(null,
}
Output::Json(0);
}
3:include/template/account_signup.html
username"> class="field <div
身份证号 for="signup-username"> <label
</label> 13
size="30" type="text" <input
class="f-input" id="signup-usercard" name="usercard"
require="true" datatype="limit|ajax" value="{$_POST['usercard']}"
max="32" min="2" url="${WEB_ROOT}/ajax/validator.php"
/> " 身份证格式不对或者被使用过 msg=" maxLength="32"vname="signupcard"
请填写正确的身份证编码 class="hint"> <span
</span>
</div>
username"> class="field <div
户 邀请人帐 for="signup-username"> <label
ID</label>
name="intid" size="30" type="text" <input
min="2" value="{$_POST['intid']}" class="f-input" id="signup-intid"
/> vname="signupintid" maxLength="16" max="16"
一个汉 , 个字符 4-16 填写 class="hint"> <span
</span> 字为两个字符
</div>
4:include/library/Utility.class.php
{ ValiUsercard($card) function public static
'/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/'; = $regexp
){ $card) preg_match($regexp, ( if
true; return
}
false; return
}
5:account/signup.php
strval($_POST['usercard']); = $u['usercard']
intval($_POST['intid']); = $u['intid']
{ (!Utility::ValiUsercard($u['usercard'])) if
'); 您输入的身份证号码格式不对 ' Session::Set('error',
'/account/signup.php'); . WEB_ROOT redirect(
} 14
array( Table::Count('user', = $exists1
$u['usercard'], => 'usercard'
));
{ ($exists1) if
'); 注册失败,该身份证号已经使用 ' Session::Set('error',
'/account/signup.php'); . WEB_ROOT redirect(
}
Create() 的 6:include/class/ZUser.class.php
if($user_row['intid']){
abs(intval($user_row['intid'])); = $_rid
}else{
abs(intval(cookieget('_rid'))); = $_rid
}
7:include/template/account_loginup.html
username"> class="field <div
身份证号 for="signup-username"> <label
</label>
size="30" type="text" <input
class="f-input" id="signup-usercard" name="usercard"
require="true" datatype="limit|ajax" value="{$_POST['usercard']}"
maxLength="32" max="32" min="2" url="${WEB_ROOT}/ajax/validator.php"
/> " 身份证格式不对或者被使用过 msg=" vname="signupcard"
请填写正确的身份证编码 class="hint"> <span
</span>
</div>
username"> class="field <div
户 邀请人帐 for="signup-username"> <label
ID</label>
name="intid" size="30" type="text" <input
min="2" value="{$_POST['intid']}" class="f-input" id="signup-intid"
/> vname="signupintid" maxLength="16" max="16"
一个汉 , 个字符 4-16 填写 class="hint"> <span
</span> 字为两个字符
</div> 15
最土代金券功能分析
比如 , 我们可以选择该商品最多能使用多少代金券 , 项目的时候 最土 我们在录入
付 。那么你手上有最土的代金券的话。你只需要支 20 ,商品价格是 10 你录入是
元就可以。非常方便。我们在后台可以生成代金券,具体的在最土后台代金 10
券管理里面。
据 主要占 。 面 表里 card 土数据库 他是存储在最 , 生成代金券之后 最土后台
字段。里面存储着使用期限。 id
我们在购买的时候,当填写完最土的收货人信息之后,会进入支付页面,这
抵消部 。 你就可以直接输入代金券 。 个时候如果该商品允许使用最土代金券的话
JS 。当我们点输入代金券的时候,将触发以下 分余额
{ function() = X.misc.cardcode
jQuery('#cardcode-order-id').attr('value'); = oid var
jQuery('#cardcode-card-id').attr('value'); = cid var
+ !X.get(WEB_ROOT return if(oid&&cid)
'/ajax/order.php?action=cardcode&id='+oid+'&cid='+cid);
};
来返回逻辑数据流。 ajax/order.php 该方法调用
{ 'cardcode') == $action ( elseif
strval($_GET['cid']); = $cid
$order_id); Table::Fetch('order', = $order
'alert'); ', 订单记录不存在 json(' ) !$order ( if
$cid); ZCard::UseCard($order, = $ret
{ ) $ret === true ( if
json(array(
'type'=>'alert'), ", 代金券使用成功 " => array('data'
'type'=>'refresh'), null, => array('data'
'mix'); ),
}
ZCard::Explain($ret); = $error
'alert'); json($error,
}
我们看到,当我们输入代金券的时候,将返回一定的提示。。他就是通过
方式来返回提示信息的。该函数代码如下。 ZCard::Explain($ret); 16
{ Explain($errno) function public static
{ switch($errno)
'; 代金券不存在 ' return : self::ERR_NOCARD case
'; 代金券不可用于本单 ' return : self::ERR_TEAM case
'; 代金券面额受限 ' return : self::ERR_CREDIT case
'; 不在有效期内 ' return : self::ERR_EXPIRE case
'; 代金券已被使用 ' return : self::ERR_USED case
'; 每单只能用一张代金券 ' return self::ERR_ORDER: case
}
'; 未知错误 ' return
}
最土程序商品图片调用分析
比如在 。 和图片调用问题 最土商品录入 我们常常要研究 , 在研究最土程序的时候
最土程序商品图片调用分析 . 也常常需要调用最土商品图片 . 中 接口 api 最土的
由此显示的格外重要了。
m tea 首先我们应该去了解最土的商品数据库结构.我们找到最土商品数据
字段。分别存储着最土商品的三张图片。我 image1,image2 , image 表。里面有
用 一般都是通过调 . 我们可以发现一点 。 们在最土过往团购和现在团购的列表中
字段来显示图片的。 image
文件夹里面。是最 static/team 最土商品的图片有两个概念,一个是存储在
图片来动态生成一 image 通过最土的 , 也有一种方式 。 土商品录入的时候上传的
张新的商品缩略图片来获得.
我们看最土商品图片函数
{ $index=false) team_image($image=null, function
$INI; global
null; return (!$image) if
{ ($index) if
$image; . '/static/' . WWW_ROOT = $path
$image); "\\1_index.\\2", preg_replace('#(\d+)\.(\w+)$#', = $image
$image; . '/static/' . WWW_ROOT = $dest
{ ) file_exists($path) && (!file_exists($dest) if
Image::MODE_SCALE); 120, 200, $dest, Image::Convert($path,
}
}
"{$INI['system']['imgprefix']}/static/{$image}"; return
} 17
第二个参数是表示显 , 第一个参数是商品图片地址 , 在这里我们不难发现
就表示商品调用 false 为 $index 示原始图片还是显示动态生成的缩略图.如果
原始图片.否则就动态的通过最土图片处理函数来动态生成.
false); team_image($one['image'], 如果要输出原始图片:
true); team_image($one['image'], 要输出动态生成缩略图:
最土后台导航功能分析
的 最土二次开发 我们在做 . 其实有些代码写的还是很好的 , 最后后台导航功能
其实也 , 最土后台导航功能选择中高亮 。 常常看到最土有些代码写的不错 。 时候
是可以给我们一个参考的。
的模板,十分简洁. 最土后台导航功能 我们可以看到
${biz_mcurrent_team($selector)}
我们再看看最 。 意思就是后台选中了当前项目导航 。 这个意思是十分简单的
biz_mcurrent_team(); 土函数
{ biz_mcurrent_team($selector=null) function
array( = $a
', 当前项目 ' => '/biz/team/index.php'
', 成功项目 ' => '/biz/team/success.php'
', 失败项目 ' => '/biz/team/failure.php'
', 编辑项目 ' => '/biz/team/edit.php'
);
"/biz/team/{$selector}.php"; = $l
current_link($l,$a,true); return
}
很显然最土要做一个导航选择的时候,必须将该导航数据放在一个数组
就可以 , 动作的名称其实就是和文件名称一样 , 当某个选择的动作被执行十 , 中
. 方式来取得当前被选中高亮的导航 "/biz/team/{$selector}.php"; = $l 使用
函数也是分精妙.他对比传递过来的参数,如果导航 current_link() 那么
数组中的值也当前被选中的值一样。那么就默认该导航被选中,而且高亮.
{ $span=false) $links, current_link($link, function
''; = $html
''; : '<span></span>' ? $span = $span
{ $l=>$n) AS foreach($links
{ (trim($l,'/')==trim($link,'/')) if 18
class=\"current\"><a "<li .= $html
href=\"{$l}\">{$n}</a>{$span}</li>";
}
href=\"{$l}\">{$n}</a>{$span}</li>"; "<li><a .= $html else
}
$html; return
}
我们必须掌握该技 。 十分容易 , 发现十分简单 , 最土后台导航功能分析之后
巧,就很容易自己封装出自己的新导航。
最土项目录入功能分析
我们常常对 。 必须知道的 最土二次开发 其实是对 , 最土项目录入功能 最土程序的
已经和最土项 . 中间最重要的就是最土的项目录入功能修改 。 最土项目功能修改
目录入相关的功能。
, 表中 team 要谈最土项目录入功能分析,首先必须知道最土的项目是存储在
为 他有三种形态。团购,热卖和秒杀.在最土数据库中字段值分别
如果我们要对最土项目录入的功能进行修改。首先必须 normal,goods,seconds
熟悉这个。
最土项目的基本问题大概包括以下几个 , 最土不但可以编辑项目基本信息
最土 . 信息 SEO 然后是商品 , 然后是商品杂项信息 , 首先是商品基本信息 。 内容
的基本信息包括商品的价格,商品的图片和描述等。
。 最土的杂项信息包括本商品项目相关的代金券,邀请返利,免运费的数量等
对标 。 的需求 seo 主要是为了让最土项目更加适合 。 优化项目 seo 最土商品的
相关的描述. seo 关键字以及 seo 标题, seo 题进行处理。设置
. 如果你想更深入的了解最土项目操作,必须知道项目的具体某些字段的意思
的标题. seo 表示 seo_title 1:
的关键字. seo 表示 seo_keyword 2:
的描述 seo 表示 seo_description 3:
表示代金券 card 4:
邀请返利,赠送 bonus 5:
消费返利. credit 6: 19
, 在最土后台可以管理和增加商户 , 还有商户的概念 , 最土项目录入的时候
字 partner_id 在录入项目的时候,如果存在商户,就必须选择商户.他是通过
段来和商户数据联系起来的。
。将数据对外共享,这个 接口 api 最土 最土项目发布之后,我们还需要通过
优化的优化信息。 seo 时候就必须有完整的商户信息,以及针对该最土项目
最土增加新闻模块思路
土程 就是给最 。 需求 最土程序二次开发 都提出个 , 最近很多使用最土程序的朋友
结合最土商品发 , 我的思路很简单就是对最土分类进行扩展 . 序增加个新闻模块
对应的增加最土新闻模块的处理以下是 。 中增加个新闻表 最土数据库 在 , 布机制
思路。
增加 get_zones($zone=null) function (587) 1:incude\function\common.php
以下内容.
', 新闻分类 =>' 'article'
增加以 current_backend() function (21) 2:include\function\current.php
下内容
', 新闻 ' => '/manage/article/index.php'
新增文章表 3:
article( table create
auto_increment, key primary null not int(1) id
0, default int(1) group_id
varchar(255), title
varchar(255), keyword
text, content
int(1), addtime
int(1), user_id
int(1), click_count
'0' default int(1) sort_type 20
);
(21) 4:include\function\current.php
{ mcurrent_article($selector=null) function
array( = $a
', 新闻列表 ' => '/manage/article/index.php'
', 文章发布 ' => '/manage/article/create.php'
);
"/manage/article/{$selector}.php"; = $l
current_link($l,$a,true); return
}
如何增加最土后台操作栏分析
最土程序二次开 在对 。 该如何操作呢 , 如何增加最土后台操作栏 很多朋友提到过
其实 , 最土的后台自定义操作栏目的增加 。 我们应该很仔细的发现 。 的过程中 发
也是非常容易的。
首先我们找到最土系统第一的模板,我们可以发现.里面有以下代码。
<ul>${mcurrent_system('de')}</ul>
函数的内容。 mcurrent_system() 我们可以查看
{ mcurrent_system($selector=null) function
array( = $a
', 基本 ' => '/manage/system/index.php'
', 选项 ' => '/manage/system/option.php'
', 公告 ' => '/manage/system/bulletin.php'
', 支付 ' => '/manage/system/pay.php'
', 邮件 ' => '/manage/system/email.php'
', 短信 ' => '/manage/system/sms.php'
', 页面 ' => '/manage/system/page.php'
', 缓存 ' => '/manage/system/cache.php'
', 皮肤 ' => '/manage/system/skin.php'
', 模板 ' => '/manage/system/template.php'
', 升级 ' => '/manage/system/upgrade.php'
', 定义 ' => '/manage/system/de.php'
);
"/manage/system/{$selector}.php"; = $l 21
current_link($l,$a,true); return
}
。 模板中要想取得这个地址 , de.php 文件是 , 我们将自己定义一个"定义"栏目
然后通过调 , 参数就可以了 "de" 传入 <ul>${mcurrent_system('de')}</ul> 直接
html 来返回合理的 current_link() 用
{ $span=false) $links, current_link($link, function
''; = $html
''; : '<span></span>' ? $span = $span
{ $l=>$n) AS foreach($links
{ (trim($l,'/')==trim($link,'/')) if
class=\"current\"><a "<li .= $html
href=\"{$l}\">{$n}</a>{$span}</li>";
}
href=\"{$l}\">{$n}</a>{$span}</li>"; "<li><a .= $html else
}
$html; return
}
以 de.php, 导航栏目的增加,然后我们具体的新建立个 最土后台 这样就完成了
来进行 最土程序保存系统配置功能分析 当然必须结合 。 就可以了 。 及对应的模板
系统文件的存储.
最土程序保存系统配置功能分析
, 都是保存在系统所指定的系统配置文件里面 , 后台系统配置的设置 , 里 最土程序
设置保存在数据库里面。最土系统配置保存功能也十分强 系统 ecshop 而不是象
大。
的配置文件。我们在最土后台系统设置, 最土短信接口 先分析最土程序设置
详细步骤参考。。。。
最土提交的表 $ 先合并 $INI, 中,我们可以看到最土系统变量 sms.php 首先在
比 。 单数据。注意最土后台配置的表单数据的名称都是以某个变量名开始的数组
$sms['pass']. 如短信配置表单的输入框名称是
$_POST); Config::MergeINI($INI, = $INI
ZSystem::GetUnsetINI($INI); = $INI
函数来 save_config() 对的数组,然后通过 key/value 先将系统配置封装成
函数来完成文 configure_save(); return 主要是通过 . 保存在系统配置的文件中
件保存操作。 22
而该函数本身就是一个递归出来数据的函数。
{ configure_save($key=null) function
$INI; global
{ isset($INN[$key])) && ($key if
$INI[$key]); _configure_save($key, return
}
configure_keys(); = $keys
{ $one) AS foreach($keys
$INI[$one]); _configure_save($one, if(isset($INI[$one]))
}
true; return
}
否则将循环遍 $key. 这里很明显,如果单单保存某个系统配置,就直接输入
否 , 如果指定了键值,将直接修改该系统配置文件 configure_keys(). 历该函数
则整个系统配置文件,都将重新遍历一次。
将结合最土系统配置提交的数组,动态生成一 _configure_save 而该函数
值的系统配置文件,从而完成了最土程序的后台设置。 $key 个名为
最土程序短信接口和短信发送功能
的问题。最土短 最土短信接口 过程中,常常会遇到 最土程序二次开发 在对
发送稍微不同。最土短信接口主要 短信 ecshop 信接口和最土短信发送原理,和
请求来对短信发送。 http 短信接口是封装 ecshop 原理发送。而 curl 是通过
最土短信在后台可以设置。
》短信息。通过这里我们可以设置最土程序的短信接口帐户信 = 》设置 = 后台
文件中,数 \include\configure\sms.php 息。最土短信接口的配置信息保存在
组格式为以下格式
( array = $value
'test', => 'user'
'test', => 'pass'
'0', => 'interval'
);
的 文件,里面 include/function/sms.php 最土短信接口的发送文件位置于
就是 one $ph 函数就是用来发送短信的函数。他有两个参数,一个是 sms_send()
发送短信目标手机号码,另外一个参数就是最土短信发送的内容信息。 23
最土的短信发送函数以下
{ $content) sms_send($phone, function
$INI; global
{ 20) < 'UTF-8') (mb_strlen($content, if
'; 汉字?长点吧~ 20 短信长度低于 ' return
}
strval($INI['sms']['user']); = $user
strtolower(md5($INI['sms']['pass'])); = $pass
true; return if(null==$user)
urlEncode($content); = $content
= $api
"http://notice.zuitu.com/sms?user={$user}&pass={$pass}&phones={$phone}
&content={$content}";
Utility::HttpRequest($api); = $res
strval($res); : true ? trim(strval($res))=='+OK' return
}
。 方式来发送短信 curl 然后通过调用 。 url 需要封装一个 , 我们可以看出
返 , 如果发送成功 false. 或者是 true 最土短信接口发送信息有一个返回值,为
回
false. 否则返回 true
完成整个信息发送 , 最土短信息接口发送 , 的帐户密码设置 最土后台 通过
过程
api 最土团购 API 最土如何开发
的开发有些什么讲究.最近很多朋友都在问我 api 最土团购 , API 最土如何开发
接口生成的 xml 接口开发主要是一个 api 最土程序的 。 开发的事情 api 最土程序
过程。最主要的就是通过读商品表,连接查询出最土商家信息。
于 的接口处理文件。就是位置 xml 有个文件,叫做 最土程序
中的 最土数据库 的文件。该文件主要是将 include/library/Output.class.php
的效果。 api 文件。从而达到生成最土团购 xml 数据生成数组,然后形成
一种就是 , 标准 baidu 一类是类似 , 的标准主要有两大主流 api 最土程序
和
。 有个方法 。 接口生成文件中 api 在最土 。 但不完全一样的标准 , 差不多 baidu
标准的。 api baidu 是专门用来处理
$error=0) XmlBaidu($data=null, function public static
{
encoding=\"utf-8\"?>\n"; version=\"1.0\" "<?xml = $xml 24
); 'urlset' 0, $data, self::ArrayToXml( .= $xml
); $xml die(
}
方法来处理的。我们可以找到该函数。 ArrayToXml() 他就是通过调用
$level=0, ArrayToXml($array, function public static
$topTagName='result')
{
{ ($topTagName) if
"<$topTagName>\n"; . str_repeat("\t",$level) = $xml
$level++;
}
{ $key=>$value) as ($array foreach
){ is_numeric($key) if(
self::GetSubTagName($topTagName); = $key
}
$value='false'; if($value===false)
$value='true'; if($value===true)
{ (is_array($value)) if
self::ArrayToXml($value,$level,$key); .= $xml
{ else }
{ $value) != (htmlspecialchars($value) if
str_repeat("\t",$level) .= $xml
."<$key><![CDATA[$value]]></$key>\n";
}
{ else
str_repeat("\t",$level). .= $xml
"<$key>$value</$key>\n";
}
}
}
{ ($topTagName) if
"</$topTagName>\n"; . str_repeat("\t",($level-1)) .= $xml
}
$xml; return
}
他同 . 我们可以看到 , 而且在转化的过程中 . xml 他主要是将数组转化为
很方便的通过检 。 接口的时候 api 这样我们在制作最土程序 . 时处理换行和缩格
制 就能成功 . 类似的方法 Output::XmlBaidu($oa) 然后调用 , 索最土商品数据库
api 作最土团购 25
最土团购数据库连接分析
的。我们就必须知道最土团购数据库连接方 最土程序二次开发 既然我们是从事
, mysql 那很显然最土团购程序的数据库也是 。 的 php 我们都知道最土程序是 , 式
一样,最土程序也是在安装的时候就对数据库进行了配置,将数 程序 ecshop 和
的文件. db.php 据库连接信息写入到了一个叫做
而是记录了数 , 一是选择了路径 , 最土程序安装的时候 , 首先我们来分析下
。 文件里面 include/configuer/db.php 最土程序的数据库信息记录在 。 据库信息
我们可以分析该文件的内容。
<?php
( array = $value
'localhost', => 'host'
'root', => 'user'
'root', => 'pass'
'tu01', => 'name'
);
?>
表示最土数据库位置所在,既数据库服务器地址. host
表示该数据库的用户 user
表示该数据库的密码 pass
表示最土程序所属于的数据库名称。 name
我们该如 。 那么我们在转移数据库或者换数据库的时候 。 既然我们懂得了这些
. 传到新的数据库服务器上去 , 数据库备份下来 mysql 首先我们必须将 , 何操作呢
.修改以上内容,然后保存.这里 include/configuer/db.php 接着我们将找到
我们只要对程序做以下修改. "123456"; 举例子,比如数据库密码换成了
<?php
( array = $value
'localhost', => 'host'
'root', => 'user'
'123456', => 'pass' 26
'tu01', => 'name'
);
?>
里面包含 , include/library/DB.class.php 最土程序的数据库操作类位置于
最 叫做 . 我们也写了一篇专门的文章 。 了所有的最土的数据库常见的操作和方法
土程序数据库基本操作
接口程序分析 api 最土
最土 在 。 接口的重要性 api 中 最土程序 主要是为了阐述 , 接口程序分析 api 最土
接口 api 最土程序的 。 接口进行开发 api 常常要对最土程序的 。 中 程序二次开发
接口主要是为了和其他站进行合作或者数据调用的 api 里面的 。 目录 api 位置与
对外接口.
。 现在是最土程序疯狂发展的时期。出现了很多团购分成站,团购导航站
才能给团购站或者团购导航站进行数据调用和商品 . 接口 api 都需要最土程序的
格式的文件. xml 接口其实就是 api 信息的抓取.最土程序
。 主要是从数据库中取得商品信息 。 接口开发比较简单 api 最土团购程序的
xml. 然后动态的生成
接口来看。主要存在以下个要点: api 从我们分析最土程序的
文件的编码. api 接口程序 1:api
文件的单元格式. api 接口程序 2:api
接口商品信息.主要包括商品价格,数量,开始和结束时间. 3:api
, 电话,地址 最土程序商户 接口中也要体现一部分商家信息.比如 4:api
所在区域等。
接口来谈谈。 tuan800 接口的 api 我们结合最土程序
$cities[$one['city_id']]; = $city
$groups[$one['group_id']]; = $group
array(); = $item
"/team.php?id={$one['id']}"; . $si['wwwprefix'] = $item['loc']
array(); = $item['data']
array(); = $item['data']['display']
array(); $item['data']['shops']['shop']= 27
array(); = $o
$INI['system']['sitename']; = $o['website']
$one['id']; = $o['identifier']
$INI['system']['wwwprefix']; = $o['siteurl']
'); 全国 ' = ($o['city'] || $city) = ($o['city']
'); 无 ' = ($o['tag'] || $group) = ($o['tag']
$one['title']; = $o['title']
true); team_image($one['image'], = $o['image']
$one['begin_time']; = $o['startTime']
$one['end_time']; = $o['endTime']
$one['market_price']; = $o['value']
$one['team_price']; = $o['price']
{ ) 0 > $one['market_price'] ( if
moneyit(10*$one['team_price']/$one['market_price']); = $o['rebate']
}
{ else
'0'; = $o['rebate']
}
abs(intval($one['now_number'])); = $o['bought']
$one['max_number']; = $o['maxQuota']
$one['min_number']; = $o['minQuota']
'no'; : 'yes' ? 'express') == ($team['delivery'] = $o['post']
&& $team['max_num']) > (($team['now_number'] = $o['soldOut']
'no'; : 'yes' ? 0)) > ($team['max_num']
$one['notice']; = $o['tip']
$o; = $item['data']['display']
$one['partner_id']); Table::Fetch('partner', = $p
array(); = $pval
$p['title']; = $pval['name']
$p['tel']; = $pval['tel']
$p['address']; = $pval['address']
{ ($p['longlat']) if
$pval['latitude']) list($pval['longitude'],
$p['longlat']); explode(',', =
}
$item['data']['shops']['shop']=$pval;
$item; = $oa[]
。 格式 xml 他就是通过调用商品信息,取得团购商品的基本信息.然后通过
让团购导航站调用。 28
最土团购程序分类管理分析
来谈 , 本次我们结合最土程序的分类表 。 的教程了 最土团购程序 很长时间没有写
如何很好的去处理和了解最土程序的 。 谈我们在对最土程序进行二次开发的时候
y categor 最土数据库 就是 。 最土团购程序中的分类都放在一个表中 。 分类管理的
表中.
那么我们如何去区分不同 。 表中 category 都放在 , 既然最土程序的所有分类
的类型呢,不同的分类类型如何调用和区分呢?
这 。 字段 zone 在这里我们可以看到最土 category. 我们先看最土的数据库
个就是来区分分类的类型的。
, 项目分类 , 包括城市列表 , 我们可以看到有类别管理 。 的后台 最土程序 在
e zon 都是靠 。 他没不管有多少内容 。 快递公司和商户分类 , 用户等级 , 讨论分区
字段来区分的。
代表团购项目分类. group
代表最土程序中的城市分类的概念. city
代表最土的讨论分区. public
代表最土程序会员等级. grade
代表最土程序商户类型. partner
当我们去数据,不同分类对应不同数据的时候.
最土程序的购买流程分析
所以最 。 不存在购物车的概念 最土团购程序 因为 。 最土程序的购买流程非常复杂
最土程序的团 。 也就是对应一个团购 。 土程序里面应该是每个订单对应一个商品
购程序是按照最土的。
热 , 页面,他有三中概念,团购,秒杀 index.php 最土程序的团购商品在
销三个概念。这个在最土程序的后台体现的十分清晰。
, 填写购买数量和购买信息 , 就是该商品的购买页面 buy.php 最土程序的
。 其实就是填写购买信息 。 一部分是购买商品 , 最土的购买流程里面其实分两部分
不需要物流的购买 , 一种是直接填写电话号码 , 最土程序的购买信息有两种方式
方式,另外一种就是直接填写联系方式。 29
购买方式不同,最土程序不存在购物车。所以他更象 ecshop 最土程序和
非常简单也 , 所有的购买流程里面 , 或者更象是直接购买系统 , 是订单提交系统
他将商品信息和最土的收货人信 , 最土程序的订单也存在一个表里面 。 非常清晰
表里面。 order 息都填写在一个表
最土程序订购过程中,流程比一般的购买流程多了几个判断。第一是判断
那么该商品就不能被 , 如果一个人只能购买一次的话 。 该商品是否只能购买一次
重复购买。其次商品数量是否有限,如果商品数量有限。将不会形成购买。
最土程序后台登陆原理分析
的 最土程序二次开发 我们在做 。 其实也是有点复杂 . 最土程序的管理员后台登陆
首先必须是后台授予 , 必须是两个条件 。 后台登陆 最土程序 . 必须注意到 , 时候
其实必须在最土前台会员登陆. Y, 了管理员权限
我们看到最土程序后台登陆的这段代码
ZUser::GetLogin($_POST['username'], = $login_admin
$_POST['password']);
{ ) 'Y' != $login_admin['manager'] || !$login_admin ( if
'); 用户名密码不匹配! ' Session::Set('error',
'/manage/login.php'); . WEB_ROOT redirect(
}
说 也就是 . 还必须是管理员 , 不但要录入正确的帐户名称和密码 , 这个表明
" Y 字段必须是" manage 表中的 user
need_manager(); ,里面的该代码 manage/index.php 我们分析最土程序的
表示是判断管理员登陆和管理员权限的。
{ need_manager($super=false) function
{ ) is_manager() ! ( if
); '/manage/login.php' . WEB_ROOT redirect(
}
true; return ) $super ! ( if
true; return ) 1 == abs(intval($_SESSION['user_id'])) ( if
'/manage/misc/index.php'); . WEB_ROOT redirect( return
}
函数内容如下. .is_manager() 首先,必须是管理员
{ $weak=false) is_manager($super=false, function
$login_user; global
&& $weak===false ( if 30
!$_SESSION['admin_id'] (
{ ) $login_user['id']) != $_SESSION['admin_id'] ||
false; return
}
'Y'); == ($login_user['manager'] return ) $super ! ( if
1; == $login_user['id'] return
}
必须 id 管理员的 . 其次 , 必须是最土后台管理员密码和帐户输入正确 , 首先
相等,也就是说。必须登陆最土会员中心,还必须登陆后台。两次登 id 和会员
陆成功,才能进入最土后台进行操作。
最土程序短信功能发送分析
可 。 最土团购程序也集成了短信发送接口。在下单发优惠卷还有其他用途的时候
我们必须 。 当然一个好的电子商务购买平台 。 以调用短信接口进行优惠码的发送
比如注册时候我们可以通过短信接口给用户发 。 在很多情况下提供短信接口功能
我们可以提示他为订单 , 中下单支付成功之后 最土程序 送注册帐户名称和密码。
如果是需要密码找回,我们也可以结合该接口。进行密码找回。 . 成功支付
include/function/sms.php 最土程序的短信接口位置于
{ $content) sms_send($phone, function
$INI; global
{ 20) < 'UTF-8') (mb_strlen($content, if
'; 汉字?长点吧~ 20 短信长度低于 ' return
}
strval($INI['sms']['user']); = $user
strtolower(md5($INI['sms']['pass'])); = $pass
true; return if(null==$user)
urlEncode($content); = $content
"***" = $api
Utility::HttpRequest($api); = $res
strval($res); : true ? trim(strval($res))=='+OK' return
}
他肯定位于最土的服务器 , 接口的 api 最土程序的接口他是调用了最土程序
这样才能顺利的 , 上。当然这个必须让最土那边。给你分配一个会员名称和密码
. 帐户和密码分别可以在后台配置 . 调用短信接口
strval($INI['sms']['user']); = $user
strtolower(md5($INI['sms']['pass'])); = $pass 31
的发送功能。比如以下代 最土程序优惠卷 最土团购程序最常见的功能就是
码。
{ $content))) (true===($code=sms_send($mobile, if
array( $coupon['id'], Table::UpdateCache('coupon',
1'), + array('`sms` => 'sms'
time(), => 'sms_time'
));
true; return
主要调用手机号码和发送手机信息的内容。只要有了该代码,我们就可以
对他进行扩展。灵活运用。
最土程序支付插件分析
插件不大一样。他在后台固定死了 支付方式 ecshop 的支付插件方式和 最土程序
. 只有在后台系统设置里面设置了帐户信息 。 也不可以安装之类的 。 只有这么几个
才能启用该支付方式.
文件。这个文件下面处理 include\library 的支付插件主要位置于 最土程序
。 页面进行选择 /order/check.php 最土程序的支付方式在 . 支付方式的业务流程
字段。 service 如果选择成功。将在最土程序的订单表里面,记录
到 我们可以从这里看 order/pay.php. 支付方式提交的页面位置于
在这里我 。 目录主要是用来显示支付方式的 include\template\order_pay.html
们可以看到。通过订单中记录的支付方式代码.来选择显示对应的支付方式.
。 里面的文件 include\configure 位置于 , 最土程序的支付方式的配置信息
而对应的数据修改就将会录入到该对应的文 , 我们可以通过后台来修改配置参数
件中去.
要 最土程序的既然要被配置文件读取.那么肯定需
. 里面的函数来支持 include/function/configure.php
configure_keys() function
不然难以调 . 必须有该支付方式的插件名称 , 而这个函数里面返回的数组中
用该数据.
应用分析 ajax 最土程序的
但是他也结 , 框架 jquery 是借助了 。 应该在广义上来说 , 应用 ajax 最土程序的
, 的一些操作 最土程序数据库 进行了处理,结合了 最土程序 合了自身的特点。对 32
的一些验证。我们下面将结合最土程序会员注册项。来谈 ajax 来完成最土程序
的应用。 ajax 谈最土程序
首先看最土程序的注册邮箱控制。
id="signup-email-address" name="email" size="30" type="text" <input
require="true" value="{$_POST['email']}" class="f-input"
url="${WEB_ROOT}/ajax/validator.php" datatype="email|ajax"
/> " 已经被注册 |Email 格式不正确 msg="Email vname="signupemail"
而且还告诉 email. 是告诉我们注册时候必须填写的 。 上面的代码意思很明显
而且还需要 , 那么这个时候不但要验证邮件格式 。 注册时候邮箱不能重复 。 我们
邮件是否在会员表中已经存在。是否被占用了。
用来将信息提交 。 这个是程序接口 url="${WEB_ROOT}/ajax/validator.php"
vname="signupemail" 标签传递数据过去。 vnanme 通过 php. 给
文件。。 validator.php 我们看到
strval($_GET['n']); = $n
strval($_GET['v']); = $v
就是传 $v 。 的作用是用来控制传递动作参数名称的 $n 。 有必要解释下该代码
的值得。然后通过以下代码进行处理。 txt 递过来的就是表单
{ ) $n == 'signupname' ( elseif
strlen($v); = $slength
1); Output::Json(null, ($slength<4) if
'username'); $v, Table::Fetch('user', = $u
1); Output::Json(null, ) $u ( if
Output::Json(0);
}
js 数据。传递给 Json 返回一个 Output 这样,最后通过
接口开发分析 api 最土程序的
为了让更多的团购导航站或者是联盟站收录我们的 , 的时候 最土程序 我们在使用
供其导航站或者是联 . 很多接口出来 最土程序二次开发 我们可以对 。 商品的时候
我们就能很容易的根据他们的 , 重要是他们提供标准的接口文档 , 盟站抓取数据
. 接口 api 最土程序 需求开发出对应的
,里面放的 api 我们可以看到在最土团购程序的根目录下,有个文件夹
来生 。 标准 api 其实也就是利用对方提供的 。 接口 api 就是最土程序对外合作的
文件。 xml 成一个
团购 baidu 里面生成的就是支持 , baidu.php 接口的 api 比如我们可以看到
来处理生成的,这个方法 Output::XmlBaidu($oa); 文件格式。通过 xml 程序的
来负责处理的. includes/library/Output.class.php 是通过 33
e key/valu 按其 $array, 只要提供一个数据数组 。 不难发现 , 我们分析起原理
当然了。数据结 , 格式.将通过该函数来处理 xml 对出现封装.然后将其转化为
的一些操作来完成。 最土程序数据库 构的生成需要
$level=0, ArrayToXml($array, function public static
$topTagName='result')
{
{ ($topTagName) if
"<$topTagName>\n"; . str_repeat("\t",$level) = $xml
$level++;
}
{ $key=>$value) as ($array foreach
){ is_numeric($key) if(
self::GetSubTagName($topTagName); = $key
}
$value='false'; if($value===false)
$value='true'; if($value===true)
{ (is_array($value)) if
self::ArrayToXml($value,$level,$key); .= $xml
}
{ else
{ $value) != (htmlspecialchars($value) if
str_repeat("\t",$level) .= $xml
."<$key><![CDATA[$value]]></$key>\n";
}
{ else
str_repeat("\t",$level). .= $xml
"<$key>$value</$key>\n";
}
}
}
{ ($topTagName) if
"</$topTagName>\n"; . str_repeat("\t",($level-1)) .= $xml
}
$xml; return
}
比如 . 按其要求生成数组 , 我们可以将任意一个接口解析 , 那很简单的道理
的接口.调用的方法是以下. baidu 生成
$error=0) XmlBaidu($data=null, function public static
{
encoding=\"utf-8\"?>\n"; version=\"1.0\" "<?xml = $xml 34
); 'urlset' 0, $data, self::ArrayToXml( .= $xml
); $xml die(
}
我们就可以很方 . 只要我们熟悉上面的分析 , 制作也特别简单 api 最土程序的
便的制造出接口.
最土程序邮件订阅功能分析
都有对最 , 在收页和内页 , 最土团购程序很注重邮件订阅 , 最土程序 最近在研究
我们 , 最土程序二次开发 最土程序的为了方便对 , 土程序邮件订阅功能进行展现
将结合最土程序邮件订阅。来具体的对他进行分析。
用 。他通过调 subscribe.php 最土团购程序的订阅文件位置于
来写入最土的邮件订阅输 $city_id); ZSubscribe::Create($_POST['email'],
入。
类有两个方法,分别用来订阅和取消订阅。 ZSubscribe 最土程序的
最土邮件订阅录入功能是以下代码。 1:
$city_id) Create($email, function public static
{
return; true)) (!Utility::ValidEmail($email, if
$city_id); . md5($email = $secret
array( Table('subscribe', new = $table
$email, => 'email'
$city_id, => 'city_id'
$secret, => 'secret'
));
DB::LimitQuery('subscribe',array('condition'=>array = $res
('email'=>$email),'one'=>true));
if($res){
false; return
}else{
'city_id', $table->insert(array('email', return
'secret'));
} 35
}
最土邮件订阅取消功能是以下代码。 2:
{ Unsubscribe($subscribe) function public static
'email'); $subscribe['email'], Table::Delete('subscribe',
}
最土后台管理邮,只要你登陆了后台。就可以看到邮件管理的地方了。
最土程序商户管理分析
这里的商户的意思应该更多的含义 . 那就是商户 , 里面有一个概念 最土团购程序
我们可以 。 也就是增加商品的时候 , 的后台增加最土项目 最土程序 在 . 是供应商
看到可以选择该商品对应的商户.
已 , 在最土程序里面,商户的概念主要是更多的维护他供应货品下面的订单
经购买过该商品的会员获得的优惠卷情况。
他 . 文件 includes/class/ZPartner.class.php 最土程序的主要核心文件在于
里面有一些方法。
登陆的密码换算. 1:
{ GenPassword($p) function public static
self::SECRET_KEY); . md5($p return
}
商户登陆处理程序 2:
{ $en=true) $password, GetLogin($username, function public static
self::GenPassword($password); = $password if($en)
array( DB::GetTableRow('partner', return
$username, => 'username'
$password, => 'password'
));
}
的信息 id 定义了获得商户信息的函数信息和商户 3:
{ GetLoginPartner() function public static
{ if(isset($_SESSION['partner_id']))
self::GetPartner($_SESSION['partner_id']); return 36
}
array(); return
}
{ Login($partner_id) function public static
$partner_id); Session::Set('partner_id',
}
如何判断某个商户是否登陆了。 4:
{ need_partner() function
'/biz/login.php'); . WEB_ROOT redirect( : true ? is_partner() return
}
. 目录.所有的操作。都在这个目录里 biz 最土团购程序的管理员路径位于
最土程序优惠卷发送机制
如何修改优惠卷生成 最土团购程序 最近总是有很多最土朋友的使用者在询问我
于是我就 。 这样使用才方便 。 让所有的密码和优惠卷编码都是数字形成的 , 机制
public static 文件。该文件的 include/class/ZCoupon.php 找到了最土程序
就是生成最土优惠卷的程序。 Create($order) function
最土程序的优惠卷只 . 我们可以发现 , 最土团购程序二次开发 我们通过使用
. 有在该项目完成之后,才能发送出优惠卷.那么发送优惠卷的触发有两种情况
当我们在支付订单的时候,如果达到该项目最后一笔订单支付成功之 1:
后,那么优惠卷就会自动发送出去.
如果在后台,点该项目的最后一个交易订单支付的话,那么该动作也 2:
会引起触发该项目下所有成功的订单下会员,得到一个优惠卷。
function public static 他们两个动作,都有同一个特点。调用
了 的方法来完成优惠卷的发送触发.该代码在调用 BuyOne($order)
代码来完成发送优惠卷的动作. ZCoupon::CheckOrder($order);
我们找到最土团购程序下的这段程序.
{ CheckOrder($order) function public static
'pickup'); array('coupon', = $coupon_array
$order['team_id']); Table::FetchForce('team', = $team
return; $coupon_array)) (!in_array($team['delivery'], if
{ ) $team['min_number'] >= $team['now_number'] ( if
create; coupon //init 37
$order['quantity']; : 1 ? ($team['conduser']=='Y') = $last
$last); max(5, = $offset
{ $last) < $team['min_number'] - $team['now_number'] ( if
array( DB::LimitQuery('order', = $orders
array( => 'condition'
$order['team_id'], => 'team_id'
'pay', => 'state'
),
));
{ $order) AS foreach($orders
self::Create($order);
}
}
else{
self::Create($order);
}
}
}
用 这个方法主要是判断该项目下的项目是否成功,而且成功了的话。将调
方式来完成最土程序优惠卷的发送。而我们可以发现,生 self:Create($order)
Utility::GenSecret(4, = $id_pre 成发送优惠卷的规则中。
这段代码才是最重要的。他直接影响着生成最土程序优惠 Utility::CHAR_NUM);
卷的形式.
类的分析 Session 最土程序
最 在里面用的最多的代码是支持 , 我们能够深刻的体会 。 最土程序建设的过程中
让整个系统 . 的一些操作类 session 他通过自己定义 。 类 session 的 土团购程序
常用的一个文件。 最土程序二次开发 使用更灵活.也是 session 中的
include\library\Session.class.php 位于 session 最土程序的
方法来初始化的。 Init() 初始化是通过 session 最土的 1:
Init($debug=false) function public static
{
Session(); new = self::$_instance
$debug; = self::$_debug
session_start();
}
最土程序的赋值和取值 2: 38
$v) Set($name, function public static
{
$v; = $_SESSION[$name]
}
的值,使用该方法。 session 最土程序取得 3:
$once=false) Get($name, function public static
{
null; = $v
) isset($_SESSION[$name]) ( if
{
$_SESSION[$name]; = $v
); $_SESSION[$name] unset( ) $once ( if
}
$v; return
}
session 那么我们将销毁该 . false 如果第二个参数为 , 这里我们必须注意
的 以上三个方法,是最土团购程序最常使用的方法了。而且最土程序
作来完成工作的 最土数据库操 都是伴随着 session
最土程序二次开发后台会手机号码搜索会员
只能用会 , 十分不方便 . 后台会员中心搜索会员 最土团购程序 , 最近总有和我说
他们希望在最土团购程序增加可以使用手机号 。 十分不方便 . 员名称和邮件搜索
码来搜索会员列表。
。 增加以下代码 , template/manage_user_index.html 找到最土程序模板 : 1
class="h-input" name="mobile" type="text" <input 手机号:
> value="${htmlspecialchars($mobile)}"
。 我们要增加会员中心会员搜索程序 , 中 manage\user\index.php 在 : 2
strval($_GET['mobile']); = $mobile 先要获取手机号码:
语句中增加以下代码. SQL 其次要在检索
{ ($mobile) if
like "mobile = $condition[] 39
'%".mysql_escape_string($mobile)."%'";
}
最土团购程序一些常见的数据库操作
. 的过程中。我们常常需要对数据库进行操作 最土程序进行二次开发 我们在对
我们将陆续总结最土程序的一些常见的数据 。 的数据库操作方式还不少 最土程序
库操作方式.
LimitQuery() 如何取得最土数据库中一条数据。使用 1:
= $res
DB::LimitQuery('subscribe',array('condition'=>array('email'=>$email),
'one'=>true));
最土程序如何进行数据库插入数据 2:
array( Table('subscribe', new = $table
$email, => 'email'
$city_id, => 'city_id'
$secret, => 'secret'
));
'secret')); 'city_id', $table->insert(array('email', return
检索一行内容 3:
'username'; : 'email' ? ) '@' strpos($email, = $field
array( DB::GetTableRow('user', = $zuituuser
$email, => $field
$password, => 'password'
));
通过某个值检索一行数据 4:
'email'); $email, Table::Fetch('user', return
修改数据库字段某个值 5: 40
$newuser); Table('user', new = $table
$user_id); $table->SetPk('id',
{ ($table->password) if
$table->password; = $plainpass
self::GenPassword($table->password); = $table->password
}
); array_keys($newuser) $table->Update( return
如何统计数据库中某些数据的条数 6:
array( Table::Count('order', = $now_count
$login_user_id, => 'user_id'
$id, => 'team_id'
'pay', => 'state'
'quantity'); ),
如何修改数据库中某个字段的值 7:
Table::UpdateCache('order',$table->id,array('order_sn'=>get_orde
r_sn()));
最土中如何检索某个字段的值 8:
array('zone'=>'city'); = $cond
array( DB::LimitQuery('category', = $info
$cond, => 'condition'
DESC', id BY 'ORDER => 'order'
));
'name'); Utility::GetColumn($info, = $citys
最土如何删除一条数据 9:
$id); Table::Delete('article',
分析 configure.php 最土程序配置文件
主要体现在最土程序的启动 . configure.php 我们通常可以看到 , 里面 最土程序
常常需要修改的一个文件。最土 最土程序二次开发 也是我们进行 app.php. 文件
。 类主要作用是读取和保存最土程序系统的一些配置文件 configure.php 程序的
我们可以清晰的看到有以下函数。 include\function\configure.php 打开
1:configure_keys() 41
这个主要是返回配置文件的文件名代码。
2:configure_save()
这个就是用来保存系统配置信息的。
$INI; global
{ isset($INN[$key])) && ($key if
$INI[$key]); _configure_save($key, return
}
configure_keys(); = $keys
{ $one) AS foreach($keys
$INI[$one]); _configure_save($one, if(isset($INI[$one]))
}
3
configure_load() 那么系统的配置信息的读取.就是用 :
, 是全局的变量 $INI , $INI global 他返回所有最土程序中一些配置信息.
因此该程序的数据在整站都能调用
最土收货人信息功能分析
我 , 解最土收货人信息功能 的时候。就必须知道和了 最土程序 我们在使用和研究
我们可以选择使 , 在填写配送信息的时候 , 的时候 最土项目 们在在最土后台录入
s expres 用优惠券,当然也可以为该商品选择对应的物流。那么他就是记录在
字段中。
那 。 首先我们看购买信息填写页面,当录入该商品的时候。选择了物流信息
首先我们找到对应的模 。 就必须填写收货人信息和地址 , 么在购买该商品的时候
板。
$team['delivery']=='express'}--> <!--{if
<div
class="expresstip">${nl2br(htmlspecialchars($team['express']))}</div>
</h3></div> 快递信息 clear"><h3> class="wholetip <div
username"> class="field <div
</label> 收件人 <label>
id="settings-realname" name="realname" size="30" type="text" <input
require="true" value="{$login_user['realname']}" class="f-input"
/> datatype="require"
收件人请与有效证件姓名保持一致,便于收取物品 class="hint"> <span 42
</span>
</div>
mobile"> class="field <div
</label> 手机号码 <label>
id="settings-mobile" name="mobile" size="30" type="text" <input
require="true" value="{$login_user['mobile']}" class="number"
手机号码是 class="inputtip"> <span /> maxLength="11" datatype="mobile"
</span> 我们联系您最重要的方式,请准确填写
</div>
username"> class="field <div
</label> 收件地址 <label>
id="settings-address" name="address" size="30" type="text" <input
require="true" value="{$login_user['address']}" class="f-input"
/> datatype="require"
县 _ 市 _ 省 _ 为了能及时收到物品,请按照格式填写: class="hint"> <span
_</span> (区)
表 信息之后,我们可以将数据提交到数据库 最土的订单 当我们填写完信息
中去。具体的代码参考以下。 order
array( = $insert
'express_id', 'state', 'city_id', 'team_id', 'user_id',
'price', 'origin', 'express', 'fare',
'mobile', 'realname', 'zipcode', 'address',
'condbuy', 'remark', 'create_time', 'quantity',
);
{ $table->update($insert)) = ($flag if
abs(intval($table->id)); = $order_id
*/ 插入订单来源 /*
$order_id; = $data['order_id']
$login_user_id; = $data['user_id']
$_COOKIE['referer']; = $data['referer']
time(); = $data['create_time']
$data); DB::Insert('referer',
redirect(WEB_ROOT."/order/check.php?id={$order_id}");
}
</div>
mobile"> class="field <div
</label> 邮政编码 <label>
id="settings-mobile" name="zipcode" size="30" type="text" <input
require="true" value="{$login_user['zipcode']}" class="number"
/> maxLength="6" datatype="zip" 43
</div>
<!--{else}-->
当最土的订订单提交后,我们就可以通过后台查看订单的详细信息。具体
的代码。可以参考以下代码。
{ $action) == 'orderview' ( if else
$id); Table::Fetch('order', = $order
$order['user_id']); Table::Fetch('user', = $user
$order['team_id']); Table::Fetch('team', = $team
$id); Table::Fetch('referer', = $order['referer']
{ 'express') == ($team['delivery'] if
option_category('express'); = $option_express
$option_express[$order['express_id']]; = $order['express_name']
}
array( = $payservice
', 支付宝 ' => 'alipay'
', 财付通 ' => 'tenpay'
', 网银在线 ' => 'chinabank'
', 余额付款 ' => 'credit'
', 线下支付 ' => 'cash'
);
array( = $paystate
</font>', 未付款 color="green"> '<font => 'unpay'
</font>', 已付款 color="red"> '<font => 'pay'
);
array( = $option_refund
', 退款到账户余额 ' => 'credit'
', 其他途径已退款 ' => 'online'
);
render('manage_ajax_dialog_orderview'); = $html
'dialog'); json($html,
}