dedecms实现字母索引搜索功能

DEDE系统带“字母索引”功能 
实现方法如下  
第一步:首先必须修改数据库结构,增加存放拼音的的字段。
修改dede_archives表,新增pytitle,varchar(250),允许为空。下面是创建表的SQL,仅供参考,红色部分为新增的部分,可以用phpmyadmin直接修改表结构实现。
CREATE TABLE dede_archives (
ID int(11) unsigned NOT NULL auto_increment,
typeid int(11) unsigned NOT NULL default ‘0′,
typeid2 int(11) unsigned NOT NULL default ‘0′,
sortrank int(11) NOT NULL default ‘0′,
iscommend smallint(6) NOT NULL default ‘0′,
ismake smallint(6) NOT NULL default ‘0′,
channel int(11) NOT NULL default ‘1′,
arcrank smallint(6) NOT NULL default ‘0′,
click int(11) unsigned NOT NULL default ‘0′,
money smallint(6) NOT NULL default ‘0′,
title varchar(80) NOT NULL default ”,
shorttitle varchar(36) NOT NULL default ”,
color varchar(10) NOT NULL default ”,
writer varchar(30) NOT NULL default ”,
source varchar(50) NOT NULL default ”,
litpic varchar(100) NOT NULL default ”,
pubdate int(11) NOT NULL default ‘0′,
senddate int(11) NOT NULL default ‘0′,
arcatt smallint(6) NOT NULL default ‘0′,
adminID int(11) NOT NULL default ‘0′,
memberID int(11) unsigned NOT NULL default ‘0′,
description varchar(250) NOT NULL default ”,
keywords varchar(60) NOT NULL default ”,
templet varchar(60) NOT NULL default ”,
lastpost int(11) NOT NULL default ‘0′,
postnum int(11) NOT NULL default ‘0′,
redirecturl varchar(150) NOT NULL default ”,
mtype int(11) NOT NULL default ‘0′,
userip varchar(20) NOT NULL default ”,
locklikeid smallint(6) NOT NULL default ‘0′,
likeid varchar(240) default ”,
pytitle varchar(250) default NULL,
PRIMARY KEY (ID),
KEY click (click),
KEY senddate (senddate),
KEY typeid (typeid),
KEY arcrank (arcrank),
KEY sortrank (sortrank),
KEY pubdate (pubdate),
KEY litpic (litpic),
KEY typeid2 (typeid2)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
第二步:获取文章标题的拼音首字母,并保存到数据库。
需要修改的文件有:
article_add.php、article_add_action.php、article_edit.php、article_eidt_action.php
分别为新增文章和修改文章控制的四个文件。
修改article_add.php为:
        <td> <input name=”iscommend” type=”checkbox” id=”iscommend” value=”11″>
        推荐
        <input name=”isbold” type=”checkbox” id=”isbold” value=”5″>
        加粗
        <input name=”isjump” type=”checkbox” id=”isjump” value=”1″ onClick=”ShowUrlTr()”>
        跳转网址
        <input name=”upinyin” type=”checkbox” id=”upinyin” value=”1″ checked=”checked”>保存拼音 </td>
增加一个保存拼音的选项。
修改article_edit.php为:
        <td> <input name=”iscommend” type=”checkbox” id=”iscommend” value=”11″<?php if($arcRow["iscommend"]>10) echo ” checked”;?>>
        推荐
        <input name=”isbold” type=”checkbox” id=”isbold” value=”5″<?php if($arcRow["iscommend"]==5||$arcRow["iscommend"]==16) echo ” checked”;?>>
        加粗
          <input name=”isjump” onClick=”ShowUrlTrEdit()” type=”checkbox” id=”isjump” value=”1″<?php echo $arcRow["redirecturl"]==”" ? “” : ” checked”;?>>
        跳转网址
        <input name=”upinyin” type=”checkbox” id=”upinyin” value=”1″<?php if($arcRow["pytitle"]<>”") echo ” checked”;?>>
保存拼音 </td>
道理同上。
修改article_add_action.php为:
//获得标题的拼音码
if($upinyin==1) $pytitle = str_replace(“_”,”",GetPinyin($title,1));
//加入数据库的SQL语句
//———————————-
$inQuery = “INSERT INTO dede_archives(
typeid,typeid2,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’,'$typeid2′,’$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==1) $pytitle = str_replace(“_”,”",GetPinyin($title,1));
//更新数据库的SQL语句
//———————————-
$inQuery = ”
update dede_archives set
typeid=’$typeid’,
typeid2=’$typeid2′,
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’
where ID=’$ID’; “;
第三步,修改首页模板,或者其它需要使用这个功能的模板。
<div>中文按声母排列:<a href=”/plus/search.php?keyword=a&searchtype=pytitle”>A</a> – <a href=”/plus/search.php?keyword=b&searchtype=pytitle”>B</a> – <a href=”/plus/search.php?keyword=c&searchtype=pytitle”>C</a> – <a href=”/plus/search.php?keyword=d&searchtype=pytitle”>D</a> – <a href=”/plus/search.php?keyword=e&searchtype=pytitle”>E</a> – <a href=”/plus/search.php?keyword=f&searchtype=pytitle”>F</a> – <a href=”/plus/search.php?keyword=g&searchtype=pytitle”>G</a> – <a href=”/plus/search.php?keyword=h&searchtype=pytitle”>H</a> – <a href=”/plus/search.php?keyword=j&searchtype=pytitle”>J</a> – <a href=”/plus/search.php?keyword=k&searchtype=pytitle”>K</a> – <a href=”/plus/search.php?keyword=l&searchtype=pytitle”>L</a> – <a href=”/plus/search.php?keyword=m&searchtype=pytitle”>M</a> – <a href=”/plus/search.php?keyword=n&searchtype=pytitle”>N</a> – <a href=”/plus/search.php?keyword=o&searchtype=pytitle”>O</a> – <a href=”/plus/search.php?keyword=p&searchtype=pytitle”>P</a> – <a href=”/plus/search.php?keyword=q&searchtype=pytitle”>Q</a> – <a href=”/plus/search.php?keyword=r&searchtype=pytitle”>R</a> – <a href=”/plus/search.php?keyword=s&searchtype=pytitle”>S</a> – <a href=”/plus/search.php?keyword=t&searchtype=pytitle”>T</a> – <a href=”/plus/search.php?keyword=w&searchtype=pytitle”>W</a> – <a href=”/plus/search.php?keyword=x&searchtype=pytitle”>X</a> – <a href=”/plus/search.php?keyword=y&searchtype=pytitle”>Y</a> – <a href=”/plus/search.php?keyword=z&searchtype=pytitle”>Z</a> <- 中文软件名按第一汉字声母排列</div>
其中关键部分为keyword=字母&searchtype=pytitle。
第四步,我们通过search.php实现搜索,dedecms不允许小于3个字符的搜索,因此我们要修改它。
修改/plus/search.php文件,修改的部分为红色:
//判断是否为声母搜索
if($searchtype<>”pytitle”){
if($keyword==”"||strlen($keyword)<3){
ShowMsg(“关键字不能小于3个字节!”,”-1″);
exit();
}
}
第五步,修改并实现搜索。
修改/include/inc_arcsearch_view.php,目标:
获得字母关键字,生成新的检索条件,获取搜索类型关键字($searchtype),调用不同的显示模板。
好的,我们继续修改,修改如下,红色部分为新增或者修改的部分。
修改function GetKeywordSql()函数,新增:
//声母搜索支持
if($this->SearchType==”pytitle”){
  $kwsql .= ” And dede_archives.pytitle like ‘$this->Keywords%’ “;
}
建议放在foreach($ks as $k){…}下面
第六步,通过上面,已经实现了按字母索引,但是调用的是系统的搜索模板,不适合按照字母索引的特点,因此我们需要更进一步,增加新的模板支持。
1、修改/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定义的模板。
2、修改include/config_hand.php文件。增加全局变量cfg_templets_pysearch。
//拼音搜索模板
$cfg_templets_pysearch = ‘pylist.htm’;
然后就可以在模板文件夹里面新增pylist.htm模板,来显示字母列表的结果了。
第七步,事情还没结束呢。要是我希望限制显示的范围怎么办?例如我只想显示软件的,或者某个栏目的这么显示,更进一步。
其实search支持很多参数,例如$typeid(栏目编号)、$channeltype(文章类型编号)、$orderby(排序方法)等,现在你知道怎么办了吧?还不知道,下面是一个例子:
<a href=”/plus/search.php?keyword=a&searchtype=pytitle&typeid=2&$channeltype=3&$orderby=title”>A</a>

①本站所有织梦模板资源均来自用户分享和网络收集,如果侵犯了您的权益,请联系网站客服处理
②本站提供的织梦源码,均带数据及演示地址。可以在任一源码详情页查看演示地址。
③由于博主时间紧缺,所有模板源码不提供技术支持。仅部分收费原创源码提供售后
④如遇模板源码下载链接打不开或者有错误,请联系网站客服QQ指出纠正。
人民币与金币汇率为1比1,即1元=1金币
织梦楼 » dedecms实现字母索引搜索功能

发表回复

加入织梦楼永久VIP 海量资源免费下载

目前为止共有 3653 位会员加入