ecshop二次开发小技巧
1、 统计ecshop商品在订单中出现的次数
方法:$count = $db -> getOne("select sum(goods_number) from ".$ecs->table(\'order_goods\')." where goods_id = \'$goods[goods_id]\'");
2、 ecshop详细页面如何通过onclick点击事件来控制购买,特别用在批发,批发存在一个最小购买量控制.
方法:
<script>
function adgtz(){
var number = document.getElementById("ordernumber").value;
var min_number = {$goods.min_number};
var goods_num = 1000;
if(number > goods_num - min_number){
alert("最多能买"+goods_number+"件");
}
number=parseInt(number)+min_number;
document.getElementById("ordernumber").value = number;
}
function adgtzmm(){
var number = document.getElementById("ordernumber").value;
var min_number = {$goods.min_number};
if (number>min_number){
number=parseInt(number)-min_number;
}
document.getElementById("ordernumber").value = number;
}
</script>
3、 如何用js去验证手机号码.
方法:var reg =/^[1]([3][0-9]{1}|50|53|59|58|56|86|80|89|87|88|85|86|55|51|52|57)[0-9]{8}$/;
4、 ecshop中如何取得每个月的1号时间?
方法: local_mktime(0,0,0,date("m"),0,date("Y"));使用ecshop的local_mktime函数.
5、 ecshop如何直接关闭窗口而不弹出提示
方法:<a href="javascript:window.opener=null;window.close();">
6、 如何统计ecshop某商品下被审核过的评论数量。
方法:$ccount
= $db -> getOne("select count(*) cc from
".$ecs->table(\'comment\')." where id_value = \'$goods_id\' and
comment_type = \'0\' and status = \'1\' and parent_id = \'0\'");
7、 ecshop中js如何将时间格式互转
方法:date1 = new Date();
var b = Date.UTC(date1.getYear(),date1.getMonth()+1,date1.getDate(),0,0,0)
time1 = frm.elements[\'best_time\'].value;
y = time1.substring(0,4);
m = time1.substring(5,7);
d = time1.substring(8,10);
var b2 = Date.UTC(y,m,d,0,0,0)
8、 如何解析ecshop flash的xml
方法:
$str = @file_get_contents("data/flash_data.xml");
if($str){
preg_match_all("/item_url=\"(.*?)\"/",$str,$url);
preg_match_all("/text=\"(.*?)\"/",$str,$text);
preg_match_all("/link=\"(.*?)\"/",$str,$link);
$ar_flash = array();
if(sizeof($url[1])){
for($i=0;$i<sizeof($url[1]);$i++){
$ar_flash[$i][\'url\'] = $url[1][$i];
$ar_flash[$i][\'text\'] = $text[1][$i];
$ar_flash[$i][\'link\'] = $link[1][$i];
}
$smarty->assign(\'ar_flash\',$ar_flash);
}
}
9、 ecshop中如何正则提取中文
方法:preg_match("/[".chr(0xa1)."-".chr(0xff)."]+/",ecs_iconv("UTF-8","GBK",$v[\'brand_name\']),$cn);
10、 ecshop如何取得订单中所属区域
方法:$p = $GLOBALS[\'db\']->getOne("select region_name from
".$GLOBALS[\'ecs\']->table(\'region\')." where region_id =
\'".$re1[\'province\']."\'");
$c = $GLOBALS[\'db\']->getOne("select region_name from
".$GLOBALS[\'ecs\']->table(\'region\')." where region_id =
\'".$re1[\'city\']."\'");
$d = $GLOBALS[\'db\']->getOne("select region_name from
".$GLOBALS[\'ecs\']->table(\'region\')." where region_id =
\'".$re1[\'district\']."\'");
11、 ecshop中如何分别提取中文和英文
方法:
utf下面
$pregstr = "/[\x{4e00}-\x{9fa5}]+/u";
preg_match($pregstr,$v[\'brand_name\'],$ch);
gbk下面
$strtest = “yyg中文字符yyg”;
$pregstr = "/([".chr(0xb0)."-".chr(0xf7)."][".chr(0xa1)."-".chr(0xfe)."])+/i";
if(preg_match($pregstr,$strtest,$matchArray)){
echo $matchArray[0];
}
12、 如何控制ecshop商品总价格只有ecshop会员特殊等级才能查看
方法:
ecshop的goods.php
$is_spe = $GLOBALS[\'db\'] -> getOne("select special_rank from
".$GLOBALS[\'ecs\']->table(\'user_rank\')." where rank_id =
\'".$_SESSION[\'user_rank\']."\'");
if($is_spe){
$res[\'result\'] = price_format($shop_price * $number);
}else{
$string = "<a href=article-21-%E6%80%8E%E4%B9%88%E6%B3%A8%E5%86%8C.html>请联系客服</a>";
$res[\'result\'] = $string;
}
13、 调试ecshop程序出现以下错误Fatal error: Cannot redeclare是什么意思?
方法:Fatal error: Cannot redeclare,意思是你运行的程序中,某函数重新申明了两次,要删除其中一个同名函数.
14、 ecshop如何判断是否当天登陆,并赠送积分.
方法: /* 赠送积分 */
$day = local_mktime(0,0,0,date("m"),date("d"),date("Y"));
$last_time = $db -> getOne("select last_login from ".$ecs->table(\'users\')." where user_name = \'".$username."\'");
if($last_time < $day){
log_account_change($_SESSION[\'user_id\'], 0, 0, 0, 10, \'每天登陆送积分\', ACT_OTHER);
}
15:如何在ecshop订单列表中列表出订单中所包含的商品编号.
方法:
function get_user_orders($user_id, $num = 10, $start = 0)
{
/* 取得订单列表 */
$arr = array();
global $ecs;
global $db;
$sql = "SELECT order_id, order_sn, order_status,consignee, shipping_status, pay_status, add_time, " .
"(goods_amount + shipping_fee + insure_fee + pay_fee + pack_fee + card_fee + tax - discount) AS total_fee ".
" FROM " .$GLOBALS[\'ecs\']->table(\'order_info\') .
" WHERE user_id = \'$user_id\' ORDER BY add_time DESC";
$res = $GLOBALS[\'db\']->SelectLimit($sql, $num, $start);
while ($row = $GLOBALS[\'db\']->fetchRow($res))
{
if ($row[\'order_status\'] == OS_UNCONFIRMED)
{
$row[\'handler\'] = "<a
href=\"user.php?act=cancel_order&order_id=" .$row[\'order_id\']. "\"
onclick=\"if (!confirm(\'".$GLOBALS[\'_LANG\'][\'confirm_cancel\']."\'))
return false;\">".$GLOBALS[\'_LANG\'][\'cancel\']."</a>";
}
else if ($row[\'order_status\'] == OS_SPLITED)
{
/* 对配送状态的处理 */
if ($row[\'shipping_status\'] == SS_SHIPPED)
{
@$row[\'handler\'] = "<a
href=\"user.php?act=affirm_received&order_id=" .$row[\'order_id\'].
"\" onclick=\"if (!confirm(\'".$GLOBALS[\'_LANG\'][\'confirm_received\']."\'))
return false;\">".$GLOBALS[\'_LANG\'][\'received\']."</a>";
}
elseif ($row[\'shipping_status\'] == SS_RECEIVED)
{
@$row[\'handler\'] = \'<span style="color:red">\'.$GLOBALS[\'_LANG\'][\'ss_received\'] .\'</span>\';
}
else
{
if ($row[\'pay_status\'] == PS_UNPAYED)
{
@$row[\'handler\'] = "<a
href=\"user.php?act=order_detail&order_id=" .$row[\'order_id\'].
\'">\' .$GLOBALS[\'_LANG\'][\'pay_money\']. \'</a>\';
}
else
{
@$row[\'handler\'] = "<a
href=\"user.php?act=order_detail&order_id=" .$row[\'order_id\'].
\'">\' .$GLOBALS[\'_LANG\'][\'view_order\']. \'</a>\';
}
}
}
else
{
$row[\'handler\'] = \'<span style="color:red">\'.$GLOBALS[\'_LANG\'][\'os\'][$row[\'order_status\']] .\'</span>\';
}
$row2 = $db -> getAll("select goods_id ,goods_sn from
".$ecs->table(\'order_goods\')." where order_id =
\'".$row[\'order_id\']."\'");
$row[\'shipping_status\'] = ($row[\'shipping_status\'] == SS_SHIPPED_ING) ? SS_PREPARING : $row[\'shipping_status\'];
$row[\'order_status\'] =
$GLOBALS[\'_LANG\'][\'os\'][$row[\'order_status\']] . \',\' .
$GLOBALS[\'_LANG\'][\'ps\'][$row[\'pay_status\']] . \',\' .
$GLOBALS[\'_LANG\'][\'ss\'][$row[\'shipping_status\']];
$arr[] = array(\'order_id\' => $row[\'order_id\'],
\'order_sn\' => $row[\'order_sn\'],
\'order_time\' => local_date($GLOBALS[\'_CFG\'][\'time_format\'], $row[\'add_time\']),
\'order_status\' => $row[\'order_status\'],
\'consignee\' => $row[\'consignee\'],
\'total_fee\' => price_format($row[\'total_fee\'], false),
\'goodslist\' => $row2,
\'handler\' => $row[\'handler\']);
}
return $arr;
}
16、 如何取得ecshop会员一天内的评论条数
回答:
function get_day_count_comment($user_id = \'\'){
global $db;
global $ecs;
$pre = local_mktime(0,0,0,date("m"),date("d"),date("y"));
$next = local_mktime(0,0,0,date("m"),date("d")+2,date("y"));
$count = $db -> getOne("select count(*) from
".$ecs->table(\'comment\')." where user_id = \'$user_id\' and add_time
> \'$pre\' and add_time < \'$next\' ");
if($count > 5){
return false;
}else{
return true;
}
}
17、 ecshop中js是如何验证radio选择.
方法:类似以下代码
/*
var businesstype = false;
var job_title = false;
var number_of_employees = false;
for (i = 0; i < frm.elements.length; i ++ )
{
if (frm.elements[i].name == \'businesstype\' && frm.elements[i].checked)
{
businesstype = true;
}
if (frm.elements[i].name == \'job_title\' && frm.elements[i].checked)
{
job_title = true;
}
if (frm.elements[i].name == \'number_of_employees\' && frm.elements[i].checked)
{
number_of_employees = true;
}
if (frm.elements[i].name == \'number_of_employees\' && frm.elements[i].checked)
{
number_of_employees = true;
}
}
*/