joomla搜索功能开发和结果分页探讨

    说到搜索功能,在一般系统中都可以看到,搜索是为了快速检索用户想要的内容,一般只需要输入关键字就可以检索到标题.对于数据库设计中,一般搜索的字段都需要建立索引,这样是为了加快搜索,mysql数据库设计一般都会探讨到这一点。joomla本身自带搜索功能,用起来很方便,不过今天还是要来说说自己动手开发这样一个一个功能,这样的功能我们用一个模块和组件实现,模块是为了显示输入表单,结果显示放到组件结果中,最后对结果进行分页,接下来我就分析一下步骤。

    表单我就不说了,只要一个文本框,不过还需要隐藏域代码如下

    <form action="index.php?option=com_golist&controller=golist&task=golist" method="post" name="go" id="go">
<input  type="hidden" name="option" value="com_golist">
<input  type="hidden" name="controller" value="golist">
<input type="hidden" name="task" value="golist">
<input  type="hidden" name="Itemid" value="4">
        <input type="text" value="请输入关键字" id="key" name="key" size="20"/>
        
        <input type="submit" class='btn' id='submit' value="搜    索">
    </form>

以上就是表单,简单说下,为啥action写了地址,还需要隐藏域呢,我发现如果action如果只写index.php,在分页的时候会出现分页丢失,就是第二页的时候地址栏错误,不能分页,所以两边都写上吧,隐藏域分别是组建的的名字,控制器,任务处理函数,以及菜单id,这个组件就是结果显示页面。好了,我们就去task的任务里面进行处理。因为结果需要分页,我们需要按照一个组件标准,就是控制器,模型,视图的MVC模式,数据处理也就是搜索过程卸载model里面。用post方法或者joomla自带的获取这个关键字,然后就去数据库查询,一般使用SQL语句的like关键字。不过笔者实现的是可以搜索分类和文章功能,对于不管是文章还是分类,可以使用多关键字,多关键字结果是由单个关键字合并的结果。单关键字是由可以查到具体标题的。

  对于收到的关键字,我们先处理是不是有空格,或者本身就是空白字符串,或者有特殊代码,需要进行处理,然后用分词函数转换成数组,到分类表进行查询,如果查询到该分类就返回分类id用分类id去检索该分类的文章,如果没有查到分类,说明关键字是普通关键字,只需要到文章表进行查找,最后把结果合并显示出来。有人是不是觉得做的太繁琐,一个like语句搞定的事情何必麻烦,其实这里实现的还有一个就是检索分类和检索文章合并到一个文本框里面了,你完全可以改种方法,通过下拉菜单搜索该分类文章里面含有关键字的内容,或者类似自带例子的复选,总之显示方法多种多样。

     不得不多说,这个功能并不完美,我们知道,多关键字一般是为了缩小搜索结果,更精确显示结果。不过对于搜索这个功能还在琢磨中,以后有更完美方案再分享,也欢迎高手赐教。对于结果分页,出了些小小问题,结果分页点到第二页出现分页错误,显示了所有内容分页,通过打印sql语句,发现是传递过来的关键字丢失了,没有找到完美解决方案,最终用$_SESSION['KEY'] = $key实现传递取值.听说joomla本身有解决方案,希望对分页非常了解的朋友赐教.到底出现了什么错误导致分页的获取关键字丢失,就是没有%关键字%不见了.

    学习过程中,遇到的问题真多,不过解决问题的过程也是不错的,可以对joomla和php更精通,主要还能学到数据库处理,以及字符和数组处理.以前我以为学习joomla和php关系不大,现在才发现,php基础的好坏直接决定开发过程中对joomla功能的处理.

    (原创首发 Yoby 文章旨在记录学习过程中的问题,作为笔记,都是来自实际开发中遇到问题,代码仅供参考,如果错误请留言交流.)

posted @ 2012-06-01 11:17  Yoby  阅读(2960)  评论(6编辑  收藏  举报