文档章节

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代码的history.lbi 中有下面的用法。 {insert name='history'} ,是用来显示浏览历史的。 跟踪代码后发现,控制语句是在 includes/lib_insert.php 文件...

杨强易
2012/05/19
0
0
在ecshop商品列表页加一个购买数量输入框

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

路边拾草人
2011/12/14
0
2
如何禁用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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流量劫持是如何产生的?

流量劫持,这种古老的攻击沉寂了一段时间后,最近又开始闹的沸沸扬扬。众多知名品牌的路由器相继爆出存在安全漏洞,引来国内媒体纷纷报道。只要用户没改默认密码,打开一个网页甚至帖子,路由...

谢思华
18分钟前
0
0
Hadoop Client无法使用maven下载源码

最近在学习hadoop,使用maven的时候想看一下源码的注释,结果IDEA一直提示无法下载 搞得我一度以为maven坏掉了。 但是通过搜索,发现在maven仓库里确实没有源码.... 而2.8.1以及之前的版本是...

Iceberg_XTY
20分钟前
0
0
为什么程序员千万不要重写代码?

你所做的事情,也许暂时看不到成果,但不要灰心或焦虑,你不是没有成长,而是在扎根。 图片来自网络 0 前言 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的...

Java小铺
21分钟前
0
0
VUE集成AdminLte

1. 安装需要到插件 npm i admin-lte -Snpm i jquery -Snpm i axios -Snpm i vue-router -S 2. 配置webpack.config.js 2.1 module.exports.module.rules修改字体loader: {test: /\.(p......

Pasenger
今天
0
0
Spring Aop原理之切点表达式解析

在前面的文章(Spring AOP切点表达式详解)中,我们总结了Spring Aop切点表达式的用法,而在上文(Spring Aop原理之Advisor过滤)中我们讲到,切点表达式的解析主要是在PatternParser.parse...

爱宝贝丶
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部