织梦++高级搜索php,织梦CMS前台搜索和高级搜索容易剖析

搜索作为网站上迅速查看内容的工具,必不可少,织梦DEDE里面的搜索有好几种,例如,大家用织梦CMS进行仿站或进行二次开发,常常用到的有高级搜索、前台搜索和织梦CMS后台自概念搜索,这个教材主要简剖析一下,前台搜索功能,织梦DEDE前台搜索功能与自概念搜索功能,大同小异,处置过程也差不多。 前台搜索和高级搜索如下图所示。

前台搜索

高级搜索 前台搜索可以说是高级搜索的一个容易化版,言外之意就是处置这二个提交表单的搜索关键词程序是一样的,没有错,处置搜索的程序文件都是plus/search.php。前台搜索模板是织梦CMS模板头部模板head.htm,高级搜索对应的模板是,DEDE模板里面的heightsearch.htm,它们的搜索结果页都是templets/default/search.htm,检测是不是这一个模板页,可以查询“搜索视图类”文件arc.searchview.class.php,在131行,找到:

$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/search.htm"; 这里就是概念了,高级搜索和前台搜索的搜索结果页模板,知道这个原理,大家就可以在这里自身概念自身喜爱的模板名称文件了。还可以用另一种办法来检测,高级搜索和这个前台搜索的结果模板是不是用的这个模板文件,大家仅需在这个模板search.htm里面随便写点东西,在大家搜索后,看看有没有大家刚写的东西,假如有说明,这二个都是用的同一个搜索结果页模板文件,这也是一种办法。

大家知道DEDE模板都是通过织梦DEDE标签来调用数据的,但是在织梦DEDE插件里面,一般都不需要织梦DEDE标签,而是用php代码,这个前后台搜索也是如此,特别是高级搜索。大家先看一下前台搜索,下面是搜索代码form表单。 这个表单里面,只用了{dede:global.cfg_cmsurl/}这么一个标签,其它都是html原生态的标签,这些没有哪些好说的,最主要的是看action里面的文件search.php,这是重点,再看一下这个表单的name值,这点尤为重要,由于,当用户输入重要搜索后,这些name值要一起发送到search.php里面的。 再看一下高级搜索模板heightsearch.htm里面的表单,大家会发现完全没有织梦DEDE表单,而是html标签和php程序,注意,它的action 也是search.php,这就可以必定了,前台搜索和高级搜索都是通过search.php来处置,用户输入的关键词的。 由于前台搜索是高级搜索的简化版本,所以,大家仅需剖析高级搜索,就好了。 在剖析高级搜索前,大家应该注意一个问题:只须在php里require,include等包括了一个模板(或其它php文件),就等于把这个模板(或其它php文件)里的代码复制到这个php文件,而模板文件(或其它php文件)就等于,把这个php文件,通过require,include等作为联系,从php分害出来的一部分,虽然,分割出来了,但是由于require,include等,使得这个模板文件(或其它php文件)仍然是这个php文件的一部分,只是为了便捷处置,才把它们分开的。这在php里面都是通用的,而不是织梦DEDE专有的。 就像在大家做模板时,把一个模反分成三部分:头部、中间和尾部,便于管理,试想假如一个程序文件,不分开的话,有可能,这个文件使它里面的全部代码,而另一个文件只采用它里面的部分代码,这样就使得不采用的代码也要加载一次,浪费服务器资源,也不便捷。 知道上面的原理,大家打开heightsearch.php文件,你会发现只有三行代码,重点看下面这二个文件: require_once(DEDEINC.'/typelink.class.php');

require_once(DEDETEMPLATE.'/plus/heightsearch.htm'); 第一个是“栏目连接类”typelink.class.php文件,它的用途就是处置栏目的连接,例如像这样的当今位置: 主页 > 网页基础 > HTML > 连接,以及高级搜索里面的“网站栏目”、“种类”等。对于这个类文件,今天不是自己的重点,大家仅需知道,大家调用里面的一个办法GetOptionArray(0,0,0),这个办法的用途就是:获得类别列表,这里所说的类别就是栏目。对于这个办法,有兴趣的可以去研究一下。 打开高级搜索模板,heightsearch.htm,大家一一剖析: 第一项:同站栏目,上面的们剖析了用的是GetOptionArray(0,0,0)办法,把数据库里面的栏目表dede_arctype里面的,所有栏目都筛选出来。 第四项:内容种类,这个是把数据库里面的模型表dede_channeltype,里面的所有模型都循环出来,这种原生态的php代码调用在模板插件里面的常常用到,假如目前想调用其它的表里面的数据,大家可以通过种办法来调用。 第二项:关键词,不知道大伙遇到过这种状况没有,当大家在网站上搜索时,有时候只输入了一个符号,例如:只输入了一个字母a,点搜索后,程序会提示“关键词不可以小于2个字节!”,有时候大家需要一个字节的搜索,怎么样改呢?

修改办法:在文件search.php里面的第79行,找到if(($keyword=='' || strlen($keyword)<2) && empty($typeid)),把里面的小于2,改成小于1或者直接把strlen($keyword)<2) && 这一句去掉即可,搜索一个关键词节了。 在这个search.php文件里面,上面大多数是处置大家在高级搜索里面的搜索时,选择的条件,全是为下面这三行代码服务的:$sp = new SearchView($typeid,$keyword,$orderby,$channeltype,$searchtype,$starttime,$pagesize,$kwtype,$mid);

$keyword = $oldkeyword;

$sp->Display(); 这三行代码,就是对“搜索视图类”arc.searchview.class.php进行实例化,即创建对象,然后,把用户要搜索的关键词以及选择的条件,进行真正的处置,并显示到搜索结果页里面。在这个类里面涉及到了数据库操作,而search.php文件,则只是对搜索提交过来的参考进行基本的检验,例如输入的关键词有合不合法等。这个文件不直接与数据库打交道,而是让这个文件后面的类,进行数据库操作,这样就愈加保证了程序的安全性,提升了效率。在php中mvc里面大家称search.php为控制器,即里面的c。 这种办法大家在写程序时,也要参考一下,就是对于search.php接收到的数据,大家第一要处置,然后,再把处置后的数据交给更底层的模块处置,处置后再还给search.php,通过search.php显示到用户前面,这种思想就是mvc。 这个教材只是容易的剖析了一下,高级搜索的处置过程,即对提交的搜索需要进行基本的数据检验,然后,提交给实例化的对象进行处置,对象才是真正是数据库打交道的代码,而这些代码往往都比较复杂,看上去,但假如大家细细剖析一下,其实也不是多么难。 最后,要说的是,织梦CMS 自概念搜索文件是advancedsearch.php,织梦DEDE可能写错了,这个也叫高级搜索,其实,这个叫自概念搜索文件,它对应的模板是advancedsearch.htm。对于自概念搜索大家会在另一个教材里剖析。(责任编辑:酱油妹)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值