织梦dedecms实现字母索引搜索功能

DEDE系统带“字母索引功能 

实现方法如下  

第一步:首先必须修改数据库结构增加存放拼音字段。                             (推荐学习织梦CMS

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>
        推荐
        <input>
        加粗
        <input>
        跳转网址
        <input>保存拼音 </td>
登录后复制

增加一个保存拼音的选项。

修改article_edit.php为:

        <td> <input>10) echo ” checked”;?&gt;&gt;
        推荐
        <input>&gt;
        加粗
          <input>&gt;
        跳转网址
        <input>”") echo ” checked”;?&gt;&gt;
保存拼音 </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>A</a> – <a>B</a> – <a>C</a> – <a>D</a> – <a>E</a> – <a>F</a> – <a>G</a> – <a>H</a> – <a>J</a> – <a>K</a> – <a>L</a> – <a>M</a> – <a>N</a> – <a>O</a> – <a>P</a> – <a>Q</a> – <a>R</a> – <a>S</a> – <a>T</a> – <a>W</a> – <a>X</a> – <a>Y</a> – <a>Z</a> <p>其中关键部分为keyword=字母&amp;searchtype=pytitle。</p>
<p>第四步,我们通过search.php实现搜索dedecms不允许小于3个字符的搜索,因此我们要修改它。</p>
<p><strong>修改/plus/search.php文件,修改的部分为红色:</strong></p>
<pre class="brush:Html;toolbar:false">//判断是否为声母搜索
if($searchtype”pytitle”){
if($keyword==”"||strlen($keyword)<p><strong>第五步,修改并实现搜索。</strong></p><p>修改/include/inc_arcsearch_view.php,目标:</p><p>获得字母关键字,生成新的检索条件,获取搜索类型关键字($searchtype),调用不同的显示模板。</p><p>好的,我们继续修改,修改如下,红色部分为新增或者修改的部分。</p><p><strong>修改function GetKeywordSql()函数,新增:</strong></p><pre class="brush:html;toolbar:false">//声母搜索支持
if($this-&gt;SearchType==”pytitle”){
  $kwsql .= ” And dede_archives.pytitle like ‘$this-&gt;Keywords%’ “;
}
登录后复制

建议放在foreach($ks as $k){…}下面

第六步,通过上面,已实现按字母索,但是调用的是系统的搜索模板,不适合按照字母索引的特点,因此我们需要更进一步,增加新的模板支持。

1、修改/include/inc_arcsearch_view.php,修改function __construct()构造函数。为:

if($this-&gt;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>A</a>
登录后复制
转载请说明出处 内容投诉内容投诉
慧达seo-站长工具-seo工具-采集-发布-AI文章生成发布工具 » 织梦dedecms实现字母索引搜索功能

慧达AI专注站群seo管理工具

查看演示 官网购买