作者文章

fwq

FWQ
网站开发
ecshop利用全局变量$_SESSION和register_shutdown_function自定义会话
在做ecshop的二次开发过程中,虽然代码 太老太乱太冗余,但ec的会话处理的设计感觉还是不错的,就使用了$_SESSION这个全局变量而已,这个设计是最好改善原来的会话处理方式的存数据库表的话,有2张表,sessions 表使用内存存储引擎,会话属于临时数据,这样存取速度很快,当然当临时数据很多时,会占用内存空间,对于较多的数据 还是需要存在磁盘上,这是就需要sessions_data 做一个sessions表的关联来存储较多的额外数据.register_shutdown_function 可以注册一个自定义的函数,在程序运行结束之前 执行。   表结构       CREATE TABLE `sessions` (   `sesskey` char(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ”,…
2025-04-24 阅读全文 →
FWQ
网站开发
ecshop会员中心增加订单搜索功能
实现ecshop会员中心增加订单搜索功能,在user.php中的act=order_list中增加以下程序。     $order_sn = isset($_REQUEST[‘order_sn’])?$_REQUEST[‘order_sn’]:”;  $consignee = isset($_REQUEST[‘consignee’])?$_REQUEST[‘consignee’]:”;  $start_date = isset($_REQUEST[‘start_date’])?$_REQUEST[‘start_date’]:”;  $end_date = isset($_REQUEST[‘end_date’])?$_REQUEST[‘end_date’]:”;  $pay_status = isset($_REQUEST[‘pay_status’])?$_REQUEST[‘pay_status’]:”;  $shipping_status = isset($_REQUEST[‘shipping_status’])?$_REQUEST[‘shipping_status’]:”;  $order_status = isset($_REQUEST[‘order_status’])?$_REQUEST[‘order_status’]:”;  $where =””;  if($order_sn){  …
2025-04-24 阅读全文 →
FWQ
网站开发
ecshop首页促销商品添加促销开始与结束时间
在后台设置了 ecshop 促销商品,在前台也正常显示了,但突然发现促销商品没有显示促销的开始与结束时间,没有显示这个时间段,只显示了促销商品的图片,对于消费者来说,这样的体验并不太好,很容易让消费者错过促销时间,也不容易记住,所以我们有必要给自己的促销商品添加一个促销开始与结束时间这样一个促销时间段。 首先我们先来看一下什么是促销时间段吧,这个很好理解,如下所示: 促销开始时间:xxxx年xx月xx日xx时xx分 促销结束时间:xxxx年xx月xx日xx时xx分 就是类似于这样的了,很明确的告诉消费者这款促销商品什么时间开始促销,什么时间结束促销,是不是很给力呢,下面夏日博客就来告诉大家怎么进行修改吧。 第一步,打开 /includs/lib_goods.php 文件,找到 function get_promote_goods($cats = ”) 函数部分,在 $goods[$idx][‘name’] = $row[‘goods_name’]; 下边增加如下的代码:   $goods[$idx][‘promote_start_date’]      = local_date($GLOBALS[‘_CFG’][‘date_format’], $row[‘promote_start_date’] );   $goods[$idx][‘promote_end_date’]      = local_date($GLOBALS[‘_CFG’][‘date_format’], $row[‘promote_end_date’] );   第二步,好了,我们开始在模板里面进行调用促销时间段就可以了,打开 /themes/模板文件夹/library/recommend_promotion.lbi 文件,在 foreach 循环里面适当的位置添加如下的标签即可。 开始时间:{$goods.promote_start_date}  …
2025-04-24 阅读全文 →
FWQ
网站开发
ecshop商品详情页动态库存调用
ECShop 2.7.2版本提供了一个新的特性:货品。 具有不同属性的商品类型可以根据不同属性录入相应的货号以及库存数量,这对于一些商家是很有用处了,特别是在ERP中,有着严格库存控制需求的环境下。 但是前台部分却还没有跟上这一新特性的步伐,选择了不同属性的时候库存依然是商品的总库存,虽然点击购买的时候是根据货品的库存来判断的。 所以这一点上是没有足够好的用户体验,我们有必要改善,为ECShop商品详情页添加动态库存动态货号的功能。   主要是通过原有的json来实现 在goods.php的 if (!empty($_REQUEST[‘act’]) && $_REQUEST[‘act’] == ‘price’) 这一处理中添加一个调用货品库存/货号的语句 通过js动态更新到ecshop商品详情页面上去。 具体语句: //$goods_tinfo = $GLOBALS[‘db’]->getRow($sql); $goods_tinfo = get_goods_info($goods_id);   $goods_sn = $goods_tinfo[‘goods_sn’]; $sql…
2025-04-24 阅读全文 →
FWQ
网站开发
ecshop退出网页后不能保留上一次已添加到购物车中的商品
经常有不同用户留言,ecshop偶很猥琐悄然无声的将浏览器窗口关闭了,俺多年积累到到购物车的商品瞬间灰飞烟灭,此刻你叫我怎么淡定,比火球还火的怒火就在这一刻爆发了,亲爱的管理员,客户悄然流失,订单一天比一天少,你还如此淡定吗?想挽回这一切损失吗?赶紧跟着我来一步一步往下做吧,客户不断,掌声响起,闲来蛋疼,先闭嘴,废话少说,进入主题,开始修改了喽 找到includes/cls_session.php大约在268行查找下面代码: 复制内容到剪贴板 折叠 PHP 代码 if (!emptyempty($GLOBALS[‘ecs’]))   {       $this->db->query(‘DELETE FROM ‘ . $GLOBALS[‘ecs’]->table(‘cart’) . ” WHERE session_id = ‘$this->session_id'”);   }   替换为: 复制内容到剪贴板 折叠 XML/HTML 代码 if (!empty($GLOBALS[‘ecs’]))   {       $this->db->query(‘DELETE FROM ‘ . $GLOBALS[‘ecs’]->table(‘cart’) . ” WHERE session_id = ‘$this->session_id’ and user_id =”“);   }   接下来,在同目录下找到lib_main.php定位到页面的最后,新增加一段代码以完成购物车不再被清空的烦恼。 复制内容到剪贴板 折叠 PHP 代码 /* 更新用户购物车退出不清空购物车*/    $sql = “update “.$GLOBALS[‘ecs’]->table(‘cart’).” set user_id =”.$_SESSION[‘user_id’].” where session_id = ‘”.SESS_ID.“‘”;    $GLOBALS[‘db’] -> query($sql);   l1 = “update “.$GLOBALS[‘ecs’]->table(‘cart’).” set session_id ='”.SESS_ID.“‘ where user_id = ‘”.$_SESSION[‘user_id‘].”‘“;  …
2025-04-24 阅读全文 →
FWQ
网站开发
去除ecshop后台最新版本提示信息
打开  admin/index.php 删除如下   /* 如果管理员的最后登陆时间大于24小时则检查最新版本 */     if (gmtime() – $_SESSION[‘last_check’] > (3600 * 12))     {         include_once(ROOT_PATH . ‘includes/cls_transport.php’);         $ecs_version = VERSION;         $ecs_lang…
2025-04-24 阅读全文 →
FWQ
网站开发
ECSHOP按属性货号搜索
 ECSHOP前台可按商品名称关键字、商品货号关键字等搜索商品,但不能按属性货号搜索。属性货号是ECSHOP属性库存的唯一识别号,建立属性库存后,属性货号保存在products表中,下面介绍如何开发按属性货号关键字搜索。 编辑/search.php 一、修改搜索关键字变量,添加属性货号关键字product_sn。 $keywords  .= "(goods_name LIKE '%$val%' OR goods_sn LIKE '%$val%' OR keywords LIKE '%$val%' $sc_dsad)";  修改为 $keywords  .= "(goods_name LIKE '%$val%' OR goods_sn LIKE '%$val%' OR product_sn LIKE '%$val%' OR keywords LIKE '%$val%' $sc_dsad)";  //添加按属性货号product_sn查询  二、修改商品总数SQL语句,添加goods表与products表连接查询。 /* 获得符合条件的商品总数 */  $sql   = "SELECT COUNT(*) FROM " .$ecs->table('goods'). " AS g ".      "WHERE g.is_delete = 0 AND g.is_on_sale = 1 AND g.is_alone_sale = 1 $attr_in ".      "AND (( 1 " . $categories . $keywords . $brand . $min_price . $max_price . $intro . $outstock ." ) ".$tag_where." )";  修改为: /* 获得符合条件的商品总数 */  $sql   = "SELECT COUNT(*) FROM " .$ecs->table('goods'). " AS g ".      "LEFT JOIN " . $GLOBALS['ecs']->table('products') . " AS p ".          "ON g.goods_id = p.goods_id ".      "WHERE g.is_delete = 0 AND g.is_on_sale = 1 AND g.is_alone_sale = 1 $attr_in ".      "AND (( 1 " . $categories . $keywords . $brand . $min_price . $max_price . $intro . $outstock ." ) ".$tag_where." )";  三、修改商品查询SQL语句,添加goods表与products表连接查询。 /* 查询商品 */  $sql = "SELECT g.goods_id, g.goods_name, g.market_price, g.is_new, g.is_best, g.is_hot, g.shop_price AS org_price, ".              "IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, ".              "g.promote_price, g.promote_start_date, g.promote_end_date, g.goods_thumb, g.goods_img, g.goods_brief, g.goods_type ".          "FROM " .$ecs->table('goods'). " AS g ".          "LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".                  "ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' ".          "WHERE g.is_delete = 0 AND g.is_on_sale = 1 AND g.is_alone_sale = 1 $attr_in ". …
2025-04-24 阅读全文 →
FWQ
网站开发
让ecshop管理员登录后台同时支持邮箱与用户名
ecshop管理员邮箱的唯一作用是用来找回密码,默认只能使用用户名(不区分大小写)和密码登录,在验证用户名和密码之前,对提交的表单域进行判断,如果输入的是邮箱,则查询邮箱对应的用户名并进行转换,从而登录系统。 实现方法: 编辑/admin/privilege.php,查找:   $_POST [ ‘username’ ] = isset ( $_POST [ ‘username’ ] ) ? trim ( $_POST [ ‘username’ ] ) : ” ; $_POST…
2025-04-24 阅读全文 →
FWQ
网站开发
给ecshop订单流程增加拣货状态
针对ecshop订单中的物品,需要支持拣货的状态,比如未拣货、拣货中、拣货完成,以及显示拣货人姓名。 -- ---------------------------- -- Table structure for `order_picking_status` -- ---------------------------- DROP TABLE IF EXISTS `order_picking_status`; CREATE TABLE `order_picking_status` ( `order_id` mediumint(8) NOTNULL, `user_name` varchar(60)DEFAULT NULL, `order_picking_status`smallint(5) NOT NULL…
2025-04-24 阅读全文 →