您现在的位置是:首页 > 教程 > ecshop商城教程ecshop商城教程
ecshop搜索模块代码介绍
余梦茂2025-01-14 21:02:27ecshop商城教程已有人查阅
导读今天看了下ecshop搜索这块,前台数据一直到后台查询再返回前台。大致是这么个过程,首先,在index.dwt文件内,body下面引入了
今天看了下ecshop搜索这块,前台数据一直到后台查询再返回前台。大致是这么个过程,首先,在index.dwt文件内,body下面引入了<!-- #BeginLibraryItem "/library/page_header.lbi" --><!-- #EndLibraryItem -->
即可重用的搜索模块代码,拼接在body下面,我们可以进入这个文件看看,在50行左右
即可重用的搜索模块代码,拼接在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文件,然后不断循环,我就感觉这样很复杂,模块化并不好。
本文标签:
很赞哦! ()
相关文章
随机图文
-
ecshop商品详情页显示品牌LOGO的方法
ecshop商品详细页面的商品品牌默认是以文字形式显示的,能否改成以LOGO形式显示。当然可以,下面看教程。注:本教程以 ECSHOP2.7.2 + 官方默认模板 为例。 -
ecshop忘记后台登录密码了怎么办?
ecshop是一款B2C独立网店系统,适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。 -
ecshop商城任意页面添加调用显示文章代码实例
代码号讲解下在ECSHOP商城任意页面调用显示文章的方法教程。比如我想在首页添加文章显示,那就打开index.php首页文件,不同页面不同php文件 -
删除ecshop您需要激活系统的删除关闭方法
ecshop安装以后打开后台出现ecshop您需要激活系统删除关闭的方法;1.打开后台出现:您需要激活系统 没有关闭按钮,因为他们把关闭按钮注销了
留言与评论 (共有 条评论) |