织梦Dedecms系统实现按字母检索”搜索功能
DEDE系统带字母索引"功能.
实现方法
更多精彩就在: 51免费论文网|www.jxszl.com
如下(稍微麻烦I.点):注意看红色文字
第I.步:首先必须修改数据库结构,增加存放拼音的的字段.
修改dede_archives表,新增pytitle,varchar(IIV0),允许为空.下面是创建表的SQL,仅供参考,红色部分为新增的部分,可以用phpmyadmin直接修改表结构实现.
CREATETABLE`dede_archives`(
`ID`int(I.I.)unsignedNOTNULLauto_increment,
`typeid`int(I.I.)unsignedNOTNULLdefault0,
`typeidII`int(I.I.)unsignedNOTNULLdefault0,
`sortrank`int(I.I.)NOTNULLdefault0,
`iscommend`smallint(VI)NOTNULLdefault0,
`ismake`smallint(VI)NOTNULLdefault0,
`channel`int(I.I.)NOTNULLdefaultI.,
`arcrank`smallint(VI)NOTNULLdefault0,
`click`int(I.I.)unsignedNOTNULLdefault0,
`money`smallint(VI)NOTNULLdefault0,
`title`varchar(VIII0)NOTNULLdefault,
`shorttitle`varchar(IIIVI)NOTNULLdefault,
`color`varchar(I.0)NOTNULLdefault,
`writer`varchar(III0)NOTNULLdefault,
`source`varchar(V0)NOTNULLdefault,
`litpic`varchar(I.00)NOTNULLdefault,
`pubdate`int(I.I.)NOTNULLdefault0,
`senddate`int(I.I.)NOTNULLdefault0,
`arcatt`smallint(VI)NOTNULLdefault0,
`adminID`int(I.I.)NOTNULLdefault0,
`memberID`int(I.I.)unsignedNOTNULLdefault0,
`description`varchar(IIV0)NOTNULLdefault,
`keywords`varchar(VI0)NOTNULLdefault,
`templet`varchar(VI0)NOTNULLdefault,
`lastpost`int(I.I.)NOTNULLdefault0,
`postnum`int(I.I.)NOTNULLdefault0,
`redirecturl`varchar(I.V0)NOTNULLdefault,
`mtype`int(I.I.)NOTNULLdefault0,
`userip`varchar(II0)NOTNULLdefault,
`locklikeid`smallint(VI)NOTNULLdefault0,
`likeid`varchar(IIIV0)default,
`pytitle`varchar(IIV0)defaultNULL,
PRIMARYKEY(`ID`),
KEY`click`(`click`),
KEY`senddate`(`senddate`),
KEY`typeid`(`typeid`),
KEY`arcrank`(`arcrank`),
KEY`sortrank`(`sortrank`),
KEY`pubdate`(`pubdate`),
KEY`litpic`(`litpic`),
KEY`typeidII`(`typeidII`)
)ENGINE=MyISAMDEFAULTCHARSET=gbk;
第II步:获取文章标题的拼音首字母,并保存到数据库.
需要修改的文件有:
article_add.php.article_add_action.php.article_edit.php.article_eidt_action.php
分别为新增文章和修改文章控制的IV个文件.
修改article_add.php为:
推荐
加粗
跳转网址
增加I.个保存拼音的选项.
修改article_edit.php为:
推荐
加粗
跳转网址
保存拼音
道理同上.
修改article_add_action.php为:
//获得标题的拼音码
if($upinyin==I.)$pytitle=str_replace("_","",GetPinyin($title,I.));
//加入数据库的SQL语句
//----------------------------------
$inQuery="INSERTINTOdede_archives(
typeid,typeidII,sortrank,iscommend,ismake,channel,
arcrank,click,money,title,shorttitle,color,writer,source,litpic,
pubdate,senddate,arcatt,adminID,memberID,description,keywords,templet,redirecturl,pytitle)
VALUES($typeid,$typeidII,$sortrank,$iscommend,$ismake,$channelid,
$arcrank,0,$money,$title,$shorttitle,$color,$writer,$source,$litpic,
$pubdate,$senddate,$arcatt,$adminID,0,$description,$keywords,$templet,$redirecturl,$pytitle);";
通过系统函数GetPingyin获得文章标题的拼音首字母,并生成insert语句,保存标题拼音首字母到pytitle字段.
类似,修改article_eidt_action.php为:
//用拼音命名
if($upinyin==I.)$pytitle=str_replace("_","",GetPinyin($title,I.));
//更新数据库的SQL语句
//----------------------------------
$inQuery="
updatedede_archivesset
typeid=$typeid,
typeidII=$typeidII,
sortrank=$sortrank,
redirecturl=$redirecturl,
iscommend=$iscommend,
ismake=$ismake,
arcrank=$arcrank,
money=$money,
title=$title,
color=$color,
writer=$writer,
source=$source,
litpic=$litpic,
pubdate=$pubdate,
description=$description,
keywords=$keywords,
templet=$templet,
shorttitle=$shorttitle,
arcatt=$arcatt,
pytitle=$pytitle
whereID=$ID;";
第III步,修改首页模板,或者其它需要使用这个功能的模板.
中文按声母排列:A-B-C-D-E-F-G-H-J-K-L-M-N-O-P-Q-R-S-T-W-X-Y-Z<-中文软件名按第I.汉字声母排列
其中关键部分为keyword=字母&searchtype=pytitle.
第IV步,我们通过search.php实现搜索,dedecms不允许小于III个字符的搜索,因此我们要修改它.
修改/plus/search.php文件,修改的部分为红色:
//判断是否为声母搜索
if($searchtype<>"pytitle"){
if($keyword==""||strlen($keyword)
exit();
}
}
第V步,修改并实现搜索.
修改/include/inc_arcsearch_view.php,目标:
获得字母关键字,生成新的检索条件,获取搜索类型关键字($searchtype),调用不同的显示模板.
好的,我们继续修改,修改如下,红色部分为新增或者修改的部分.
修改functionGetKeywordSql()函数,新增:
//声母搜索支持
if($this->SearchType=="pytitle"){
$kwsql.="Anddede_archives.pytitlelike$this->Keywords%";
}
仿站建议放在foreach($ksas$k){...}下面
第VI步,通过上面,已经实现了按字母索引,但是调用的是系统的搜索模板,不适合按照字母索引的特点,因此我们需要更进I.步,增加新的模板支持.
I..修改/include/inc_arcsearch_view.php,修改function_construct()构造函数.为:
if($this->SearchType=="pytitle")$tempfile=$GLOBALS[cfg_basedir].$GLOBALS[cfg_templets_dir]."/".$GLOBALS[cfg_df_style]."/".$GLOBALS[cfg_templets_pysearch];
else$tempfile=$GLOBALS[cfg_basedir].$GLOBALS[cfg_templets_dir]."/".$GLOBALS[cfg_df_style]."/search.htm";
目标是判断当$searchtype==pytitle的时候,调用全局变量cfg_templets_pysearch定义的模板.
II.修改include/config_hand.php文件.增加全局变量cfg_templets_pysearch.
//拼音搜索模板
$cfg_templets_pysearch=pylist.htm;
然后就可以在模板文件夹里面新增pylist.htm模板,来显示字母列表的结果了.
第VII步,事情还没结束呢.要是我希望限制显示的范围怎么办?例如我只想显示软件的,或者某个栏目的这么显示,更进I.步.
其实search支持很多参数,例如$typeid(栏目编号).$channeltype(文章类型编号).$orderby(排序方法)等,现在你知道怎么办了吧?还不知道,下面是I.个例子:
原文链接:http://www.jxszl.com/biancheng/dedecms/75532.html
热门阅读