文档章节

ecshop中的浏览历史

adbug
 adbug
发布于 2015/06/17 09:27
字数 470
阅读 5
收藏 0

今天看了看 ecshop 中的浏览历史的代码,分析了一下,有什么不对的地方,欢迎指出纠正,不胜感激...


不难看出,在你每次浏览一件商品的同时,会在左侧中记录您的浏览记录,在ecshop中是通过cookie来记录的, 在goods.php里可以查到如下代码:


 

if (!empty($_COOKIE['ECS']['history']))

{

    $history = explode(',', $_COOKIE['ECS']['history']);

    array_unshift($history, $goods_id);

    $history = array_unique($history);


    while (count($history) > $_CFG['history_number'])

    {

        array_pop($history);

    }


    setcookie('ECS[history]', implode(',', $history), gmtime() + 3600 * 24 * 30);

}

else

{

    setcookie('ECS[history]', $goods_id, gmtime() + 3600 * 24 * 30);

}

 


每一次浏览,都会记录$good_id(商品的id),放到cookie里。


在模版里goods.dwt里是引用了<!-- #BeginLibraryItem "/library/history.lbi" --><!-- #EndLibraryItem -->在history.lbi里可以看到 {insert name='history'}, 基本上学过smarty的都知道,这是局部不缓冲用到的,那么它肯定存在一个方法: insert_history(),果然,在lib_insert.php中找到了。其实lib_insert.php 就是一个动态内容函数库。

 

function insert_history()

{

    $str = '';

 

    if (!empty($_COOKIE['ECS']['history']))

    {

        $where = db_create_in($_COOKIE['ECS']['history'], 'goods_id');

        $sql   = 'SELECT goods_id, goods_name FROM ' . $GLOBALS['ecs']->table('goods') .

                " WHERE $where AND is_on_sale = 1 AND is_alone_sale = 1 AND is_delete = 0";

        $query = $GLOBALS['db']->query($sql);

 

        $res = array();

        while ($row = $GLOBALS['db']->fetch_array($query))

        {

            $res[$row['goods_id']] = $row;

        }

 

        $tureorder = explode(',', $_COOKIE['ECS']['history']);

 

        foreach ($tureorder AS $key => $val)

        {

            $goods_name = htmlspecialchars($res[$val]['goods_name']);

            if ($goods_name)

            {

                $short_name = $GLOBALS['_CFG']['goods_name_length'] > 0 ? sub_str($goods_name, $GLOBALS['_CFG']['goods_name_length']) : $goods_name;

                $str .= '<li><a href="' . build_uri('goods', array('gid' => $val), $goods_name). '" title="' . $goods_name . '">' . $short_name . '</a></li>';

            }

        }

    }

 

    return $str;

}

 

其实该函数返回的字符串就是history.lbi里的所需内容,需要说明一下的是像代码中类似 $_CFG['history_number'],一般是系统定义的常量或是数据库中保存的字段,查了一下发现是在 ecs_shop_config表里。剩下的就是看一下代码,怎么通过商品的id ,获取商品的信息了。不再多说,提醒一下,上面用到了几个针对数据函数,如array_unshift,array_unique还是经常遇到的,顺便巩固一下。

 

好了,今天就到这里吧!

本文转载自:http://blog.csdn.net/fgdfgasd/article/details/11883095

共有 人打赏支持
adbug
粉丝 6
博文 176
码字总数 198249
作品 0
成都
在ecshop商品列表页加一个购买数量输入框

我们在使用ecshop的时候,特别是批发站。 很多时候不能在ecshop商品列表页输入购买数量,是非常不方便的。 现在如果一次性购买好几个商品,十分的不方便,只有在ecshop的商品详细页面才能输入...

路边拾草人
2011/12/14
0
2
ecshop 标签使用 非常好的例子

ecshop 标签使用 非常好的例子 在ECSHOP代码的history.lbi 中有下面的用法。 {insert name='history'} ,是用来显示浏览历史的。 跟踪代码后发现,控制语句是在 includes/lib_insert.php 文件...

杨强易
2012/05/19
0
0
如何禁用ECSHOP缓存,如何关闭ECSHOP缓存

熟悉ECSHOP的老站长们都知道,ECSHOP是有缓存机制的。 ECSHOP的缓存机制从一定程度上可以减少ECSHOP反复读取数据库的几率,从而一定程度上降低服务器负担,提高访问速度。 但是启用缓存机制,...

Surjur
2015/04/30
0
0
ecshop 实现“精品、新品、热销”板块出现选项卡效果的方法

最近做一个网络商城,直接使用ecshop的免费模板,懒得重新做,ecshop建站多日了,一直想在主页的板块中建网页选项卡鼠标经过自动切换效果,百度搜索这方面的内容也没找到合适的,今天一实验,...

小果果x
2014/12/03
0
0
ecshop语言包lang的加载原理

首先大家要明白的一点是:ecshop目录下的languages目录,这个就是ecshop语言包所在目录。 ecshop默认的语言包为中文简体即zh_cn目录. 语言包的载入过程都是通过ecshop的init.php中的require...

路边拾草人
2011/12/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

谈谈如何学Linux和它在如今社会的影响

昨天,还在农耕脑力社会,今天已经人工智能技术、大数据、信息技术的科技社会了,高速开展并迅速浸透到当今科技社会的各个方面,Linux日益成为人们信息时代的到来,更加考验我们对信息的处理程...

linuxCool
14分钟前
0
0
SpringBoot内置定时任务

springBoot内置定时任务 应用场景 业务监控,定时发送邮件,定时删除缓存等等。 Spring Boot 内置定时 pom 包配置 <dependencies> <dependency> <groupId>org.springframework.b......

Grittan
18分钟前
2
1
在 Linux 中基于密钥认证的 SSH的配置方法

什么是基于 SSH 密钥的认证? 众所周知,Secure Shell,又称 SSH,是允许你通过无安全网络(例如 Internet)和远程系统之间安全访问/通信的加密网络协议。无论何时使用 SSH 在无安全网络上发...

linuxprobe16
35分钟前
0
0
sed命令

10月17日任务 9.4/9.5 sed 1.sed(上)(下) 1.sed 匹配功能 #sed -n ‘/root/’ p test.txt 将带有root的内容打印出来 同时支持 . * 还有 + 不过需要脱译,或者在前面选项加r。 支持{ } 支...

hhpuppy
46分钟前
1
0
day120-20181018-英语流利阅读-待学习

千禧一代注意了:一大波公司正向你的钱包袭来 Daniel 2018-10-18 1.今日导读 这几年,你有没有发现,不管是在微信公众号还是在抖音,有越来越多的商家和品牌开始玩起了网络用语和表情包,从卖...

飞鱼说编程
55分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部