跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

【PHP开源产品】Ecshop的商品筛选功能实现分析之一(主要对category.php进行分析)

一、首先,说明一下为什么要对category.php文件进行分析。

(1)原因如下:

①个人对商城类商品筛选功能的实现比较好奇;

②对商城中关于商品的数据表设计比较感兴趣。(该功能涉及到与数据库的交互,而且与数据库中数据表的设计好坏有一定的联系);

③多条件(属性)筛选功能在现今的很多网站都需要用到,很广泛(如:一般商城网、团购网、房产网、信息分类网站等等)。

(2)希望达到的目的是:

①能够对多条件筛选功能有一个初步的认识。(起码自己做,也能够快速实现吧);

②对多条件筛选的实现中,数据库该如何去设计才会更优化和更合理些(参考前人的经验);

立即学习“PHP免费学习笔记(深入)

”;

③对多条件筛选中的一些策略或者是技巧,能有一个了解(会总结几点)

PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。

下载

二、然后,我们首先看一下现在需求是如何的?(多条件筛选,请参考京东、苏宁、国美等)

①京东商城的商品筛选功能(截图):②苏宁商城的商品筛选功能(截图)

③国美在线的商品筛选功能(截图)

补充:其实,要对该功能的观察,还必须对地址栏,也作一番思考的,我这里就省略了,毕竟如果这样分析,会更简单一些。上面这些例子,只作一个引子吧。后续我会完善它的。

④ECSHOP的商品筛选功能实现,展示细节(截图+文字)如下:1)首先,我本地服务器,给本机安装的ecshop演示网站,配了一个虚拟主机地址:为“GSM手机”分类下的商品。如下:如果我想查看品牌为“诺基亚”的手机,那么点击“诺基亚”标签即可:

访问地址为:

结果页面为:

访问地址为:

结果页面为:

分析:从上面的地址栏的变化和截图的变化,可以初步看出ecshop的多条件搜索方法是怎么样的了。

猜想1:

随着用户每一次点击条件(属性)进行商品筛选时,搜索地址栏会变化,为什么地址栏会变化,归根结底,一定是每一个商品的属性的a标签的超链接地址被改变了。而且是每点击一次,都会随着搜索条件的不同,而改变。

从而我们知道,这个属性的超链接,是动态生成的。

ecshop后台一定是作了大量的判断过程,并最终为每一个商品属性,生成一个超链接地址,以防止上一次的搜索条件丢失。

猜想2:商品的价格区间,是根据什么来计算的呢?

还是人工后台设置的,京东的商品价格区间,好像都是很有规律的,和ecshop的价格区间,有比较大的区别。别管这么多了,我们还是先研究ecshop的再说。

猜想3:

参数filter_attr=163.0.160.0中的几个数字,一定代表着下面:颜色、屏幕大小 、手机制式、外观样式属性下,都选择了哪一些值了。

----> 带着这样一些疑问,那我们直接去研究一下ecshop是如何实现上面的多条件搜索功能啦。。。GO。。。

首先,我们到ecshop的网站更目录,找到category.php文件,打开它进行研究一下。

('IN_ECS',(() . '/includes/init.php'((DEBUG_MODE & 2) != 2->caching =请求地址栏:http://localhost/category.php?id=3&brand=1&price_min=200&price_max=1700&filter_attr=163.216.160.1861.获取分类id((['id'=(['id'((['category'=(['category'}ecs_header("Location: ./\n"2.首先获取所有GET和POST中,可用于搜索的参数的值。若没有此参数,则说明,并没有用此参数来搜索,默认要给它一个默认值。=(['page']) &&(['page']) > 0 ?(['page']) : 1=(['page_size']) &&(['page_size']) > 0 ?(['page_size']) : 10=(['brand']) &&(['brand']) > 0 ?(['brand']) : 0=(['price_max']) &&(['price_max']) > 0 ?(['price_max']) : 0=(['price_min']) &&(['price_min']) > 0 ?(['price_min']) : 0=(['filter_attr']) ?((['filter_attr'])) : '0'=(=() ? '' :('.',(=['show_order_type'] == '0' ? 'list' : (['show_order_type'] == '1' ? 'grid' : 'text'=['sort_order_method'] == '0' ? 'DESC' : 'ASC'=['sort_order_type'] == '0' ? 'goods_id' : (['sort_order_type'] == '1' ? 'shop_price' : 'last_update'= ((['sort']) &&(((['sort'])),('goods_id', 'shop_price', 'last_update'))) ?(['sort']) := ((['order']) &&(((['order'])),('ASC', 'DESC'))) ?(['order']) := ((['display']) &&(((['display'])),('list', 'grid', 'text'))) ?(['display']) : ((['ECS']['display']) ?['ECS']['display'] :=(,('list', 'grid', 'text')) ?: 'text'('ECS[display]',, gmtime() + 86400 * 7=('%X',(. '-' .. '-' ..'-' ..'-' .. '-' .. '-' .['user_rank'] . '-' .['lang'] .'-'.. '-' .. '-' .. '-' .(!->is_cached('category.dwt',3.把该栏目下的所有子栏目id获取,如果没有子栏目,则是自身。

相关文章