原文地址:http://www.xoops.org/modules/mediawiki/index.php?title=Dev:search_function&curid=355&oldid=1067
注意:我是一个新的xoops开发者,请时刻留意这一点
记录一下我开发myguestBook模块时候学到的搜索功能
1. 第一,向xoops_version.php文件加入以下的代码
Search $modversion['hasSearch'] = 1;
$modversion['search']['file'] = "include/search.inc.php";
$modversion['search']['func'] = "guestbook_search";
2.第二,按照以上的设定添加文件,并写代码:
=====
翻译者:Surance Yin (Suranceyin@yahoo.com.cn)
©:http://www.fltek.com.cn
=====
Code
<?php
// 这些代码是从newbb借鉴的
// 函数名是在xoops_version.php里面定义的
// 加入参数 "$queryarray, $andor, $limit, $offset, $userid"
// 注意: $andor 默认值为 AND, 可以设置为 'AND', 'OR' or 'exact', 取决于高级搜索界面的三个选项。你的搜索逻辑必须考虑以上的三个值
function guestbook_search($queryarray, $andor, $limit, $offset, $userid){
global $xoopsDB;
// 开始构造sql语句
$sql = "SELECT id,name,title,message,time FROM ".$xoopsDB->prefix("myguestbook")."";
// 如果$queryarray不是一个数组,count()函数也会返回1. 因此要使用is_array()检查是否是数组
if ( is_array($queryarray) && $count = count($queryarray) ) {
$sql .= " WHERE ((name LIKE '%$queryarray[0]%' OR title LIKE '%$queryarray[0]%' OR message LIKE
%$queryarray[0]%')";
for($i=1;$i<$count;$i++){
$sql .= " $andor ";
$sql .= "(name LIKE '%$queryarray[$i]%' OR title LIKE '%$queryarray[$i]%' OR message LIKE
'%$queryarray[$i]%')";
}
$sql .= ") ";
} // end if
$sql .= "ORDER BY id DESC";
// 因为Gusetbook的index.php显示了我需要知道的实体
// 既然用index.php代码
$query = $xoopsDB->query("SELECT COUNT(*) FROM ".$xoopsDB->prefix("myguestbook")." WHERE id>0");
list($numrows) = $xoopsDB->fetchrow($query);
// 假设sql获取到数据
$result = $xoopsDB->query($sql,$limit,$offset);
$ret = array();
$i = 0;
// 使用搜索结果创建到query的连接对象
while($myrow = $xoopsDB->fetchArray($result)){
// 你可以用任何图片
$ret[$i]['image'] = "images/url.gif";
// 设置结果查看明细的信息
$ret[$i]['link'] = "index.php?start=".($numrows-$myrow['id']);
$ret[$i]['title'] = $myrow['name'];
$ret[$i]['time'] = $myrow['time'];
// guestbook中,id没有用
$ret[$i]['uid'] = "";
$i++;
}
return $ret;
}
// 注意: 象上面声明的一样, $ret 是一个多维数组,这个多维数组的第一维是一个顺序号,第二维是图片、连接、标题、uid和时间。这些属性指向搜索到的一个实体。 image, uid and time 是可选的,time 是一个unix的标准时间戳
// 参见xoops中的 search.php . 路径为: kernel/module.php 调用了各个模块的搜索方法?>