目前织梦dedecms v5.7已正式发布,但在实际的使用环境中往往我们需要进行一些特定功能的实现,比如按照字母搜索等,下面我们来说一下该功能是如何实现的,主要的方法就是提取发布资源中第一个字母,存储到数据表中,然后进行索引。

DedeCMS 基于PHP和MySQL技术开发,可同时使用于Windows、Linux、Unix平台,环境需求如下:

1、Windows 平台:
IIS/Apache + PHP4/PHP5 + MySQL3/4/5
如果在windows环境中使用,建议用DedeCMS提供的DedeAMPZ套件以达到最佳使用性能。

2、Linux/Unix 平台
Apache + PHP4/PHP5 + MySQL3/4/5 (PHP必须在非安全模式下运行)

建议使用平台:Linux + Apache2.2 + PHP5.2 + MySQL5.0

织梦版本为5.7 GBK 其他没有测试
在进行本操作之前 要先备份数据库
首先 要添加数据库字段
ALTER TABLE `dede_archives` ADD `fpy` VARCHAR( 40 ) NOT NULL AFTER `weight` ;
用于保存标题的第一个字母的拼音
打开dede/templets/article_add.htm大概在136行 (</td>上面)添加以下代码提示是否保存
<input name="F_PY" type="checkbox" id="S_PY" class="np" value="1" checked="checked">保存拼音
同理在article_edit.htm也需要添加
打开dede/article_add.php 在102行以下添加$fpy=$F_PY==1 ? str_replace('_','',GetPinyin(stripslashes

($title),1)) : '';用于获得标题的拼音 找到191行 ,对刚新建的字段进行赋值,相信大家都会的:
将原来的 $query = "INSERT INTO `dede_archives`

(id,typeid,typeid2,sortrank,flag,ismake,channel,arcrank,click,money,title,shorttitle,color,writer,sour

ce,litpic,pubdate,senddate,mid,voteid,notpost,description,keywords,filename,dutyadmin,weight) VALUES

('$arcID','$typeid','$typeid2','$sortrank','$flag','$ismake','$channelid','$arcrank','$click','$money'

,'$title','$shorttitle','$color','$writer','$source','$litpic','$pubdate','$senddate','$adminid','$vot

eid','$notpost','$description','$keywords','$filename','$adminid','$weight');";
改为
$query = "INSERT INTO dede_archives`

(id,typeid,typeid2,sortrank,flag,ismake,channel,arcrank,click,money,title,shorttitle,color,writer,sour

ce,litpic,pubdate,senddate,mid,voteid,notpost,description,keywords,filename,dutyadmin,weight,fpy)

VALUES

('$arcID','$typeid','$typeid2','$sortrank','$flag','$ismake','$channelid','$arcrank','$click','$money'

,'$title','$shorttitle','$color','$writer','$source','$litpic','$pubdate','$senddate',

'$adminid','$voteid','$notpost','$description','$keywords','$filename','$adminid','$weight','$fpy');";

你应该能看懂的。

到此 在你添加文章的时候 标题拼音会自动保存的。

接下来 就要看search.php了
为了 调用方便 我写了个标签 只需要在调用的地方添加 {dede:letter /} (include/tablib) 新建letter.lib.php
<?php
if(!defined('DEDEINC'))
{
exit("Request Error!");
}
function lib_letter(&$ctag,&$refObj)
{
global $dsql,$sqlCt,$cfg_soft_lang,$cfg_indexurl;
$attlist="letter|A,row|26";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);

$letter='';
$le_end=64+$row;
for($i=65;$i<=$le_end;$i++){
$letter.="<a href='$cfg_indexurl/plus/search.php?keyword=".strtolower(chr

($i))."&searchtype=pytitle'>".chr($i)."</a> ";
}
return $letter;
}
?>

最后也是最关键的一部 更改search.php 默认的是不能小于2个字符的
找到plus/search.php
将if(($keyword=='' || strlen($keyword)<2) && empty($typeid))
{
ShowMsg('关键字不能小于2个字节!','-1');
exit();
}改为if($searchtype<>'pytitle'){
if(($keyword=='' || strlen($keyword)<2) && empty($typeid))
{
ShowMsg('关键字不能小于2个字节!','-1');
exit();
}
}即可

找到include/arc.searchview.class.php
首先要设置sql语句 函数GetKeywordSql
找到if($this->SearchType=="title"){
$kwsqls[] = " arc.title LIKE '%$k%' ";
}else{
$kwsqls[] = " CONCAT(arc.title,' ',arc.writer,' ',arc.keywords) LIKE '%$k%' ";
}改为:
if($this->SearchType=="title"){
$kwsqls[] = " arc.title LIKE '%$k%' ";
}else if($this->SearchType=='pytitle'){
$kwsqls[] = " CONCAT(arc.title,' ',arc.keywords,' ',arc.fpy) LIKE '%$k%' ";
}else{
$kwsqls[] = " CONCAT(arc.title,' ',arc.writer,' ',arc.keywords) LIKE '%$k%' ";
}

在此函数下 添加函数:
function Getletter($num=26,$t,$k){
global $cfg_indexurl;
$le_end=64+$num;
for($i=65;$i<=$le_end;$i++){
if(ord(strtoupper($k))==$i){
$letter.="<a style='background:#000;color:#fff'

href='$cfg_indexurl/plus/search.php?keyword=".strtolower(chr($i))."&searchtype=pytitle'>".chr

($i)."</a> ";
continue;
}
$letter.="<a href='$cfg_indexurl/plus/search.php?keyword=".strtolower(chr

($i))."&searchtype=pytitle'>".chr($i)."</a> ";
}
return $letter;
}
作用就是 让当前搜索的字母 加亮显示

设置search的底层模板的标签 display函数
在 else if($tagname=="likewords")
{
$this->dtp->Assign($tagid,$this->GetLikeWords($ctag->GetAtt('num')));
}下添加
else if($tagname=='letter' and $this->SearchType=='pytitle'){
$this->dtp->Assign($tagid,$this->Getletter($num=26,$this->SearchType,$this-

>Keyword));
}

到此 结束,哈哈,,其实也不是很难的。记住千万要记得备份你原来的程序啊!

相关文章:http://www.ithov.com/master/115647.shtml

织梦dedecms实现按照字母搜索的实现方法相关推荐

  1. 织梦搜索页是那个php,织梦dedecms仿站之搜索框、搜索页制作

    这次我们说一下怎样把织梦dedecms 默认搜索框修改成自己的搜索框,以仿站为例,我们在仿别人站时,通常在新闻中心(文章列表页).产品中心(图片列表页)会有搜索框,如下图: 1.为了在调整好搜索框后, ...

  2. 织梦php版本图片不能上传,织梦Dedecms会员中心无法上传图片的解决方法

    织梦Dedecms会员中心,由于为了安全性问题,限制了注册会员在会员中心发布信息的时候上传图片,但是管理员登录会员中心发布信息的时候上传图片却不受影响.那该如何解决呢?下面我们来说明一下具体的解决方案 ...

  3. 织梦DedeCMS简略标题字数限制的修改方法

    修改简略标题字符长度的解决办法在你的服务器或者虚拟空间管理页面用phpmyadmin登录数据库,找到dede_archives这个数据库表,再找到shorttitle字段即为dedecms的简略标题字 ...

  4. 织梦dedecms移动版设置二级域名的方法 织梦如何设置m.开头的域名

    dedecms/' target='_blank'>织梦dedecms建站系统自从2015.06.18号升级后,系统增加了最强的手机站功能,模板与PC模板分开,标签90%类似,数据同步,很牛很强 ...

  5. 织梦html2text( me),织梦dedecms中function='Html2Text(@me)的使用方法

    本文主要通过实例为大家讲解织梦dedecms中首页.列表页及内容页通过 function='Html2Text(@me) 过滤html代码调用纯文本的方法 示例1: 调用文章body中内容,过滤htm ...

  6. u8 附件上传后存放路径_织梦DedeCms附件按月份保存的修改方法

    正常情况下,dedecms织梦系统的图片附件是按日保存的,一天一个文件夹, 时间长了, 这样在allimg中就会生成很多文件夹, 不方便管理. 虽然,dedecms织梦的后台设置有"附件保存 ...

  7. 织梦dedecms百度PHP主动推送设置方法

    及时发现:可以缩短百度爬虫发现你网站新链接的时间,让新发布的页面第一时间被百度收录. 保护原创:对于网站最新的原创内容,可以利用主动推送功能快速通知百度,让内容得以转发之前被百度发现. 织梦百度php ...

  8. 织梦的网站地图怎么做html,织梦(dedecms)网站地图改变生成目录的方法

    很多用DEDECMS做站的朋友,为避免将data目录内的东西随便外泄,在robots中将data目录屏蔽了,但是DEDE默认的网站地图 却是在 data下,屏蔽掉这个文件夹的话搜索引擎就无法抓取到网站 ...

  9. 织梦php调用底部,如何去掉织梦dedecms底部调用cfg_powerby的power by dedecms

    我们都知道,使用dedecms做网站,都会在底部调用cfg_powerby的时候出现power by dedecms的链接信息. 在之前版本我们的解决方法是: 1.去掉{dede:global nam ...

最新文章

  1. 44种模型、1200种子网,RobustART评测CNN、Transformer、MLP-Mixer谁最鲁棒?
  2. html选择器_HTML的id选择器类选择器
  3. virtualbox4 剪贴板(共享粘贴板)失效之原因
  4. 第一章 计算机系统概述 1.3 计算机的性能指标 [计算机组成原理笔记]
  5. 【python笔记】:python简介
  6. 记在thinkPHP中一个创建模型的小错误
  7. Android开发学习总结(五)——Android应用目录结构分析(转)
  8. adb for linux 工具包,Linux(Ubuntu)下配置安装adb工具
  9. ngrok转发mysql连接_使用小米球 -Ngrok 实现内网转发
  10. 【LaTex】Vscode+LaTex模板的使用
  11. umi封装request方法 ts版
  12. linux locale字符集设置,Linux下通过locale来设置字符集
  13. tweenmax笔记
  14. mongodb java api chm_MongoDB中文手册chm版
  15. 你是部门经理,老板对你说公司要裁员,你该怎么办?
  16. 2019阿里java面试题
  17. 1913. 查询学生学籍信息
  18. linux最新内核4.19,Linux Kernel 4.19发布,初步支持Wi-Fi 6, 新EROFS文件系统
  19. 【案例3-1】(基于控制台的购书系统)
  20. 冲击python二级——布尔操作符,比较操作符,控制流的基础

热门文章

  1. java 并行 执行进度_关于java:Java8流的顺序执行和并行执行产生不同的结果?
  2. 麒麟操作系统配置网络_讲解银河麒麟桌面操作系统
  3. 【文档】软件版本发布说明
  4. Navicat连接Oracle数据库以及Oracle library is not loaded的解决方法
  5. C#中怎样获取默认配置文件App.config中配置的键值对内容
  6. C#中怎样跨窗体调用事件-从事件订阅实例入手
  7. Pytyon3中实现十进制转不同进制
  8. mybatis中使用XML配置文件方式实现CRUD模板流程
  9. Vue使用v-bind绑定动态数据
  10. 微信小程序从入门到飞起(各个组件)