您现在的位置是:首页 > cms教程 > Ecshop商城教程Ecshop商城教程
ecshop分词搜索和商品关键字红色的实现方法
平安2024-12-25Ecshop商城教程已有人查阅
导读最近在用ECSHOP做一个商城,发现ECSHOP的模糊搜索要求太高,需要加入and、空格、加号等,客户搜索的时候不可能这样操作。所以想对搜索功能进行改进
最近在用ECSHOP做一个商城,发现ECSHOP的模糊搜索要求太高,需要加入and、空格、加号等,客户搜索的时候不可能这样操作。所以想对搜索功能进行改进,可是在网上没有找到这样的插件,有收费的,结果要2000大元。考虑了一下申请经费的麻烦,自己费点儿力气做一个吧。
考虑到工期的问题,采用了织梦的分词算法,搜索效果虽然不是特别理想,但是这么短的时间也只能这样了。
在此分享给没钱又着急的朋友,需要用到的文件在文章末尾提供下载,大家下载后也可以直接覆盖使用。
一、ECSHOP联想下拉框
1、修改page_header.lbi模版文件,将搜索文本框修改为:
二、分词搜索
根目录增加织梦分词算法函数和词库:lib_splitword_full.php和dededic.csv
1、修改search.php文件第196行
1、修改search.php文件第473行到480行
将显示商品名称的地方替换为:
考虑到工期的问题,采用了织梦的分词算法,搜索效果虽然不是特别理想,但是这么短的时间也只能这样了。
在此分享给没钱又着急的朋友,需要用到的文件在文章末尾提供下载,大家下载后也可以直接覆盖使用。
一、ECSHOP联想下拉框
1、修改page_header.lbi模版文件,将搜索文本框修改为:
<input name="keywords" type="text" id="keyword" value="<!--{if ($search_keywords neq "")}{$search_keywords|escape}--><!--{else}-->ecshop<!--{/if}-->" class="search-input" onfocus="if(this.value=='ecshop'){this.value='';this.style.color='#000';}" onblur="closediv();if(this.value==''){this.value='ecshop';this.style.color='#999';}" style="color:#999;" onkeyup="keyupdeal(event,this.value);" onkeydown="keydowndeal(event);" onclick="keyupdeal(event,this.value);" autocomplete="off" />
<div id="search_suggest" style onmouseover='javascript:_over();' onmouseout='javascript:_out();'></div>
嵌入js文件
<script type="text/javascript" src="/js/suggest.js"></script>
嵌入css文件
<link href="/themes/default/images/css.css" rel="stylesheet" type="text/css">
2、根目录添加php文件search_suggest.php文件二、分词搜索
根目录增加织梦分词算法函数和词库:lib_splitword_full.php和dededic.csv
1、修改search.php文件第196行
/* 检查关键字中是否有空格,如果存在就是并 */
$arr = explode(' ', $_REQUEST['keywords']);
$operator = " AND ";
改为:
/*调用织梦分词功能-start*/
require("lib_splitword_full.php");
$sp = new SplitWord();
$fenci=$sp->SplitRMM($_REQUEST['keywords']);
$sp->Clear();
/* 织梦分词后是使用空格进行划分,所以仍可使用ecshop的按照空格拆分为数组功能:检查关键字中是否有空格,如果存在就是并 */
$arr = explode(' ', $fenci);
$arr = array_reverse($arr);//将数组倒序排列,并插入完整关键字到数组末尾
$arr[count($arr)]=$_REQUEST['keywords'];
$arr = array_reverse($arr);//再次将数组倒序,使完整关键字可以第一个被检索
array_pop($arr);//删除织梦分词产生的数组之后一个元素为空格
$operator = " and ";//sql检索语句使用union联合检索
$ hong = $arr;//$arr数组在飘红的时候已经被产品列表占用了,所以另外赋值给一个数组备用。
/*调用织梦分词功能-end*/
2、修改search.php文件第382行到403行
/* 获得符合条件的商品总数 */
$sql = "SELECT COUNT(*) FROM " .$ecs->table('goods'). " AS g ".
"WHERE g.is_delete = 0 AND g.is_on_sale = 1 AND g.is_alone_sale = 1 $attr_in ".
"AND (( 1 " . $categories . $keywords . $brand . $min_price . $max_price . $intro . $outstock ." ) ".$tag_where." )";
$count = $db->getOne($sql);
$max_page = ($count> 0) ? ceil($count / $size) : 1;
if ($page > $max_page)
{
$page = $max_page;
}
/* 查询商品 */
$sql = "SELECT g.goods_id, g.goods_name, g.market_price, g.is_new, g.is_best, g.is_hot, g.shop_price AS org_price, ".
"IFNULL(mp.user_price, g.shop_price * '$_SESSION[discount]') AS shop_price, ".
"g.promote_price, g.promote_start_date, g.promote_end_date, g.goods_thumb, g.goods_img, g.goods_brief, g.goods_type ".
"FROM " .$ecs->table('goods'). " AS g ".
"LEFT JOIN " . $GLOBALS['ecs']->table('member_price') . " AS mp ".
"ON mp.goods_id = g.goods_id AND mp.user_rank = '$_SESSION[user_rank]' ".
"WHERE g.is_delete = 0 AND g.is_on_sale = 1 AND g.is_alone_sale = 1 $attr_in ".
"AND (( 1 " . $categories . $keywords . $brand . $min_price . $max_price . $intro . $outstock . " ) ".$tag_where." ) " .
"ORDER BY $sort $order";
修改为:
/*sun04zh3-20130905-调用织梦分词功能-更改ecshop的sql语句采用union方式-start*/
/*因为后面要用union生成数据集表,所以先根据拆分出的关键词,生成union所需的所有sql语句,*/
$select = "(";
foreach($arr AS $se => $t)
{
$select .= "SELECT click_count,goods_sn,is_alone_sale,is_on_sale,is_delete,goods_id, goods_name, market_price, is_new, is_best, is_hot, shop_price AS org_price, shop_price ,promote_price, promote_start_date, promote_end_date, goods_thumb, goods_img, goods_brief, goods_type FROM(select click_count,goods_sn,is_alone_sale,is_on_sale,is_delete,goods_id, goods_name, market_price, is_new, is_best, is_hot, shop_price AS org_price, shop_price ,promote_price, promote_start_date, promote_end_date, goods_thumb, goods_img, goods_brief, goods_type from".$ecs->table('goods')." where goods_name like '%$t%' order by click_count desc) AS P$se";//第一个关键词是完整关键词
if($se==0)//插入一个当所有拆分关键词在商品名称中为and时的sql语句
{
$select .= " UNION SELECT click_count,goods_sn,is_alone_sale,is_on_sale,is_delete,goods_id, goods_name, market_price, is_new, is_best, is_hot, shop_price AS org_price, shop_price ,promote_price, promote_start_date, promote_end_date, goods_thumb, goods_img, goods_brief, goods_type FROM(select click_count,goods_sn,is_alone_sale,is_on_sale,is_delete,goods_id, goods_name, market_price, is_new, is_best, is_hot, shop_price AS org_price, shop_price ,promote_price, promote_start_date, promote_end_date, goods_thumb, goods_img, goods_brief, goods_type from".$ecs->table('goods')." where 1 $keywords order by click_count desc) AS Pa";
}
if($se<count($arr)-1)//在每条select语句后增加union,之后一个不加,所以$se小于元素数量-1
{
$select.=" UNION ";
}
}
$select.=")";
if($select=="()")//当关键词为空时,没有拆分关键词,所以用于union的$select为空,仍需要调用goods表
{
$sql = "SELECT COUNT(*) FROM ".$ecs->table("goods")." AS P " .
"WHERE is_delete = 0 AND is_on_sale = 1 AND is_alone_sale = 1 " ;
}
else
{
/* 获得符合条件的商品总数 */
$sql = "SELECT COUNT(*) FROM $select AS P " .
"WHERE is_delete = 0 AND is_on_sale = 1 AND is_alone_sale = 1 " ;
}
$count = $db->getOne($sql);
$max_page = ($count> 0) ? ceil($count / $size) : 1;
if ($page > $max_page)
{
$page = $max_page;
}
if($select=="()")//当关键词为空时,没有拆分关键词,所以用于union的$select为空,仍需要调用goods表
{
/* 查询商品 */
$sql = "SELECT click_count,goods_sn,is_alone_sale,is_on_sale,is_delete,goods_id, goods_name, market_price, is_new, is_best, is_hot, shop_price AS org_price, shop_price ,promote_price, promote_start_date, promote_end_date, goods_thumb, goods_img, goods_brief, goods_type ".
"FROM ".$ecs->table("goods")." AS P " .
"WHERE is_delete = 0 AND is_on_sale = 1 AND is_alone_sale = 1 " ;
}
else
{
/* 查询商品 */
$sql = "SELECT click_count,goods_sn,is_alone_sale,is_on_sale,is_delete,goods_id, goods_name, market_price, is_new, is_best, is_hot, shop_price AS org_price, shop_price ,promote_price, promote_start_date, promote_end_date, goods_thumb, goods_img, goods_brief, goods_type ".
"FROM $select AS P " .
"WHERE is_delete = 0 AND is_on_sale = 1 AND is_alone_sale = 1 " ;
}
三、搜索出的产品列表产品关键词飘红功能:1、修改search.php文件第473行到480行
if($display == 'grid')
{
$arr[$row['goods_id']]['goods_name'] = $GLOBALS['_CFG']['goods_name_length'] > 0 ? sub_str($row['goods_name'], $GLOBALS['_CFG']['goods_name_length']) : $row['goods_name'];
}
else
{
$arr[$row['goods_id']]['goods_name'] = $row['goods_name'];
}
修改为:
/*根据分词对产品名称进行替换-start*/
$tihuan=$row["goods_name"];
foreach($ hong AS $ph_count => $ph)
{
$tihuan = str_replace($ph,"<b style='color:#d90000'>$ph</b>",$tihuan);
}
$arr[$row['goods_id']]['goods_name'] = $row['goods_name'];//因为前台用到没有替换的商品名称,所以保留goods_name值
$arr[$row['goods_id']]['tihuan'] = $tihuan;
/*根据分词对产品名称进行替换-end*/
2、修改search.dwt模板文件将显示商品名称的地方替换为:
<p><a href="{$goods.url}" title="{$goods.name|escape:html}">{$goods.tihuan}</a></p>
本文标签:
很赞哦! ()
上一篇:ecshop读写分离的方法
相关教程
- discuz的ecshop的伪静态规则apache+nginx
- ecshop整合discuz的方法
- discuz和ecshop截取字符串函数介绍
- ECShop2.7.2整合Discuz 6.0论坛的步骤方法
- Ecshop和Discuz开源产品有哪些局限性
- ecshop怎么和discuz整合
- phpcmsv9和ecshop2.3.7以及discuzx3.0整合方法
- Nginx常用Rewrite(伪静态规则)WordPress/PHPCMS/ECSHOP/ShopEX/S
- ecshop收货地址199/198号段提示手机号格式不正确!
- ecshop调用商品属性的方法实例
- ecshop支付插件开发教程
- ecshop商品怎么增加新字段
图文教程
ecshop商品批发多属性多规格多库存怎么批量购买
原创ecshop商品批发多属性多规格多库存批量快速购买仿168*商品批发,适合专门做批发商城朋友,方便客户选择多属性多规格的商品批量购买快速购买。
ecshop后台订单详情页怎么显示商品总数
有时候一个单子里面会有上百件的小东西,所以在订单详情页显示一下该单商品的总数量有时候还是有必要的,下面是修改方法(尽量不要使用记事本来修改):
ecshop数据库getRow、getAll、getOne之间的区别
ECShop没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现。这样做的好处是实现非常轻量,大大减小了分发包的文件大小。
ecshop模板更新版本的实现方法
问题一:商城首页报错 Strict Standards: Only variables should be passed by reference in D:\wamp\ecshop\includes\cls_template.php on line 422
相关源码
-
(自适应)营销型健身器材产品设备类pbootcms模板网站为健身器材企业打造的营销型网站模板,基于PbootCMS开源内核开发。采用HTML5响应式架构,PC与移动端数据实时同步,适配多终端展示场景。查看源码 -
Wordpress博客新闻主题在线商店平台betheme 21.5.6版BeTheme是一款功能丰富的WordPress主题模板,专注于为各行业提供网站建设解决方案。该模板支持WooCommerce电子商务功能,能够快速搭建在线商店平台,同时适用于博客、新闻资讯类网站建设。自2014年发布以来,该模板已经获得大量用户的使用验证。查看源码 -
(自适应)蓄电池能源智能数码科技产品pbootcms模板源码下载本款基于PbootCMS开发的网站模板为蓄电池及能源科技企业设计,特别适合锂电池、储能系统、新能源电池等产品的展示与推广。查看源码 -
(PC+WAP)蓝色电子半导体电子设备网站pbootcms源码下载本模板基于PbootCMS内核开发,为半导体和电子科技行业设计,特别适合电子元器件、集成电路、半导体设备及相关技术产品展示。查看源码 -
pbootcms(自适应)SEO优化排名服务公司网站模板核心定位为SEO排名服务商打造的营销型网站框架,集成PbootCMS开源系统的高效管理能力与SEO最佳实践方案,助力企业快速建立专业的技术服务形象。查看源码 -
(自适应响应式)环保水净化处理设备阀门等网站源码下载基于PbootCMS内核开发的响应式模板,为水处理设备、空气净化器等环保企业设计,自适应手机端浏览。通过简洁高效的后台管理系统,助力环保科技企业快速建立专业在线展示平台。查看源码
| 分享笔记 (共有 篇笔记) |
