zoukankan      html  css  js  c++  java
  • 织梦Dedecms系统实现按“字母检索”搜索功能

      织梦在做电影站时经常会用到按字母检索功能,很多人不能实现这个功能,所以没办法做到,其实实现这个按字母搜索功能后,无论是对用户还是对搜索引擎都是比较友好的,对网站排名很有帮助。下面dedecms模版网就给大家介绍dedecms如何实现按字母检索功能。www.weixiu3721.com
      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" class="np">
      推荐
      <input name="isbold" type="checkbox" id="isbold" value="5" class="np">
      加粗
      <input name="isjump" type="checkbox" id="isjump" value="1" class="np">
      跳转网址
      <input name="upinyin" type="checkbox" id="upinyin" class="np" value="1" checked="checked">保存拼音 </td>
      增加一个保存拼音的选项。
      修改article_edit.php为:
      <td> <input name="iscommend" type="checkbox" id="iscommend" value="11" class="np"<?php if($arcRow["iscommend"]>10) echo " checked";?>>
      推荐
      <input name="isbold" type="checkbox" id="isbold" value="5" class="np"<?php if($arcRow["iscommend"]==5||$arcRow["iscommend"]==16) echo " checked";?>>
      加粗
      <input name="isjump" type="checkbox" id="isjump" value="1" class="np"<?php echo $arcRow["redirecturl"]=="" ? "" : " checked";?>>
      跳转网址
      <input name="upinyin" type="checkbox" id="upinyin" class="np" value="1"<?php if($arcRow["pytitle"]<>"") echo " checked";?>>
      保存拼音 </td>
      道理同上。
      修改article_add_action.php为:
      //获得标题的拼音码
      if($upinyin==1) $pytitle = str_replace("_","",GetPinyin($title,1));
      //加入数据库的SQL语句www.rdredcross.org.cn
      //----------------------------------
      $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>

  • 相关阅读:
    Json对象与Json字符串互转(4种转换方式)
    Web.config配置文件详解
    jQuery BlockUI Plugin Demo 6(Options)
    jQuery BlockUI Plugin Demo 5(Simple Modal Dialog Example)
    jQuery BlockUI Plugin Demo 4(Element Blocking Examples)
    jQuery BlockUI Plugin Demo 3(Page Blocking Examples)
    jQuery BlockUI Plugin Demo 2
    <configSections> 位置引起的错误
    关于jQuery的cookies插件2.2.0版设置过期时间的说明
    jQuery插件—获取URL参数
  • 原文地址:https://www.cnblogs.com/zqw111/p/14048450.html
Copyright © 2011-2022 走看看