ECshop--搜索模块细究
ecshop细究
今天看了下ecshop搜索这块,前台数据一直到后台查询再返回前台。大致是这么个过程,首先,在index.dwt文件内,body下面引入了
<!-- #BeginLibraryItem "/library/page_header.lbi" --><!-- #EndLibraryItem -->
即可重用的搜索模块代码,拼接在body下面,我们可以进入这个文件看看,在50行左右
<div class="serach-box"><form id="searchForm" name="searchForm" method="get" action="search.php" onSubmit="return checkSearchForm()" class="f_r"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="135"><input name="keywords" type="text" id="keyword" value="{$search_keywords|escape}" class="B_input" /></td><td><input name="imageField" type="submit" value="搜索" class="go" style="cursor:pointer;" /></td></tr></table></form>
</div>
这样就很清楚了,url对应的是根目录下php,文本框里面设置
<span style="font-size:18px;">value="{$search_keywords|escape}"</span>
即保留搜索值,form表单里面的action指向php,但是在检索之前,也即表单提交的同时,通过checkSearchForm()验证输入合法,然后我们到根目录下search.php中看看,代码非常多,需要检索的东西有点复杂,但可以找到通过表单提交过来的keywords
/* 初始化搜索条件 */$keywords = '';$tag_where = '';if (!empty($_REQUEST['keywords'])){$arr = array();if (stristr($_REQUEST['keywords'], ' AND ') !== false){/* 检查关键字中是否有AND,如果存在就是并 */$arr = explode('AND', $_REQUEST['keywords']);$operator = " AND ";}elseif (stristr($_REQUEST['keywords'], ' OR ') !== false){/* 检查关键字中是否有OR,如果存在就是或 */$arr = explode('OR', $_REQUEST['keywords']);$operator = " OR ";}elseif (stristr($_REQUEST['keywords'], ' + ') !== false){/* 检查关键字中是否有加号,如果存在就是或 */$arr = explode('+', $_REQUEST['keywords']);$operator = " OR ";}else{/* 检查关键字中是否有空格,如果存在就是并 */$arr = explode(' ', $_REQUEST['keywords']);$operator = " AND ";}$keywords = 'AND (';$goods_ids = array();foreach ($arr AS $key => $val){if ($key > 0 && $key < count($arr) && count($arr) > 1){$keywords .= $operator;}$val = mysql_like_quote(trim($val));$sc_dsad = $_REQUEST['sc_ds'] ? " OR goods_desc LIKE '%$val%'" : '';$keywords .= "(goods_name LIKE '%$val%' OR goods_sn LIKE '%$val%' OR keywords LIKE '%$val%' $sc_dsad)";$sql = 'SELECT DISTINCT goods_id FROM ' . $ecs->table('tag') . " WHERE tag_words LIKE '%$val%' ";$res = $db->query($sql);while ($row = $db->FetchRow($res)){$goods_ids[] = $row['goods_id'];}$db->autoReplace($ecs->table('keywords'), array('date' => local_date('Y-m-d'),'searchengine' => 'ecshop', 'keyword' => addslashes(str_replace('%', '', $val)), 'count' => 1), array('count' => 1));}$keywords .= ')';$goods_ids = array_unique($goods_ids);$tag_where = implode(',', $goods_ids);if (!empty($tag_where)){$tag_where = 'OR g.goods_id ' . db_create_in($tag_where);}}
在上面的代码中通过
<span style="font-size:18px;">$_REQUEST['keywords']</span>
来获取关键值,之后进行一些其他处理,然后拼接sql语句,查询返回的结果通过
$smarty->assign('goods_list', $arr);
注入值,最后在search.dwt文件中还原整个页面
<span style="font-size:18px;"><!-- {if $action eq "form"} --></span>
这里我也不是太清楚,网上搜了下,没有相关的回答,大体上就是这样注入数据,仔细看看会发现嵌套使用蛮多的,search.dwt文件里面表单也会调用search.php文件,然后不断循环,我就感觉这样很复杂,模块化并不好。
转载于:https://www.cnblogs.com/yefengCrazy/p/5636616.html
ECshop--搜索模块细究相关推荐
- php %3ch1%3e字体,phpWebSite搜索模块跨站脚本执行漏洞
受影响系统: Appalachian State Universit phpWebSite 1.4.0 描述: BUGTRAQ ID: 27090 phpWebSite是一款网站内容管理系统(CMS) ...
- 58 同城 iOS 客户端搜索模块组件化实践
[编者按]58 同城 App 自从 1.0 版本开始,便已经提供了搜索功能.随着版本的迭代.业务的复杂,搜索框架也在不断受到挑战.诸如代码不能复用.耦合度高.业务功能接入成本高等问题日积月累,成为需要 ...
- java电商商品搜索_Java生鲜电商平台-搜索模块的设计与架构
说明:搜索模块针对的是买家用户,在找菜品找的很费劲下的一种查询方面.目前也是快速的检索商品. 对于移动端的APP买家用户而言,要求的速度在3秒内完成.支持模糊查询,由于业务实战表面,整个搜索频率不到1 ...
- 电商平台-搜索模块的设计与架构
说明:搜索模块针对的是买家用户,在找菜品找的很费劲下的一种查询方面.目前也是快速的检索商品. 对于移动端的APP买家用户而言,要求的速度在3秒内完成.支持模糊查询,由于业务实战表面,整个搜索频率不到1 ...
- 魔众文章投稿系统 v1.3.0 菜单快捷搜索 模块市场升级
魔众文章投稿系统是一个多用户文章管理系统,支持用户文章投稿.文章审核,通过评论.打赏等模块可以轻松支持多种用户营销功能. 魔众文章投稿系统发布v1.3.0版本,新功能和Bug修复累计7项,菜单快捷搜索 ...
- python gridsearch_Python超参数自动搜索模块GridSearchCV上手
1. 引言 当我们跑机器学习程序时,尤其是调节网络参数时,通常待调节的参数有很多,参数之间的组合更是繁复.依照注意力>时间>金钱的原则,人力手动调节注意力成本太高,非常不值得.For循环或 ...
- 医疗项目的一个讲解(医疗项目)搜索模块 药品添加模块 订单生成 注册模块 支付模块
架构: 我们这个项目是由Maven搭建的项目,前后端分离,使用的springcloud微服务架构,结合了springboot搭建.前台页面使用了VUE,持久层用的是Mybatis框架,图片上传使用的f ...
- 电商项目商品搜索模块 - ESik分词器安装
2019独角兽企业重金招聘Python工程师标准>>> 洋鼹鼠-满足国人一切海外需求! 洋鼹鼠PC端搜索商品 com.ningpai.site.goods.controller.Go ...
- ecshop 搜索热词推荐_多多搜索自定义关键词推广的基础点:如何选对致命的关键词...
很多商家可能会疑惑我为什么不讲点击率,点击率固然重要,但其实多多搜索是围绕关键词展开的.正所谓万丈高楼平地起,关键词才是多多搜索的基础,没有这个基础,买家都搜不到你,或者搜到了却不是精准人群,点击率也 ...
最新文章
- 在写游戏时钟类时,应确保时钟的计算是以某个固定的CPU为标准的
- 开发人员学Linux(10):CentOS7安装配置代码质量管理平台SonarQube6.4
- 从源码分析DEARGUI之add_label_text
- 3亿美元,腾讯第三次领投行业AI独角兽明略,这次还有淡马锡领投,快手跟投...
- L3-015 球队“食物链”(dfs)
- 汽车abs matlab仿真模糊pid控制
- 关掉windows自动更新
- C语言面试题分享(3)
- 关于错误	1	error C4996: 'getch': The POSIX name for this item is deprecated.问题解决方式
- 这些Intel Atom处理器千万别升Windows 10创意者更新:不兼容
- 删除Windows Service
- 我使用的Chrome插件列表
- 编程 态度目标_对目标持开放态度,从而推动事业发展
- 【结巴分词】浅谈结巴分词算法原理
- 逻辑回归(Logistic Regression)学习笔记
- Java实现Unicode编码和中文互转
- 视频教程_Mastercam2017车削视频教程,数控车床编程视频教程,vericut车床仿真视频...
- 电子签名、数字签名、数字证书、电子签章、电子印章的概念和区别
- 交换机crc错误是什么意思_OSN1800设备LDX对接S9706交换机,交换机持续有CRC错误告警...
- stm32 步进电机控制,S曲线加减速,匀加速运动
热门文章
- python创造者_python 设计模式-建造者模式
- 品牌网络推广方案浅析在编写文章标题时都有什么技巧?
- 长沙网络推广浅析新站怎么做会对排名提升更有帮助?
- 2019计算机科学与技术全日制调济,华侨大学2019计算机科学与技术学院非全日制考研调剂信息(第二批)...
- startuml如何画流程图_因为流程图没画好SCI被拒稿!看完师姐的攻略后我被吊打了!...
- vb串口 任意波特率_C#与单片机串口通讯,实现简单的计数功能
- ubuntu mysql 驱动_怎么在Ubuntu下为MySQL添加ODBC驱动?
- 开发日记-20190528 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》.desktop创建
- leetcode 231. Power of Two
- leetcode 349. Intersection of Two Arrays