1 - 定义有关在HTML页面中进行搜索的标签助手。它们
要搜索的文本将在这里出现
要执行的操作是包括这些标签在页面HTML中,可以包括根据需要多少个块。需要注意的是必须要有标题(HTMLSEARCH-TITLE)、链接(HTMLSEARCH-LINK)以及只确定要搜索的文本的开始(HTMLSEARCH-BEGIN-SEARCH)和结束(HTMLSEARCH-END-SEARCH)。
2 - 在相关模块的xoops_version.php存档中包含搜索所需的信息。
// 搜索
$modversion['hasSearch'] = 1;
$modversion['search']['file'] =
"include/search.inc.php";
$modversion['search']['func'] = "yourmodule_search";
3 - 在其模块的include目录内创建search.inc.php存档。在其中必须包含seumodulo_search()函数。这个函数必须返回一个数组,其中每个数组行是一个连接项目。
$ret[$i]['image'] = $image;
$ret[$i]['link'] = $link;
$ret[$i]['title'] =
$title;
$ret[$i]['uid'] = 1;
$ret[$i]['time'] = filemtime($dir . $file);
yourmodule_search()函数处理存档HTML,识别1号物品的标签。它将结果返回到数组中。以下是我自己的搜索函数。它验证一个目录下所有存档。
function produtos_search($queryarray, $andor, $limit, $offset, $userid){
$ret =
array();
$i = 0;
$k = 0;
// 要搜索的目录
$dir =
"modules/produtos/templates/";
$image = "images/menu_pe15x17.gif";
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while
((($file = readdir($dh)) !== false) && ($i < $limit)) {
if (!is_dir($dir . $file)) {
$array_tmp = file($dir .
$file);
$found = false;
$beginsearch = false;
foreach($array_tmp as $v) {
if (substr_count($v,'HTMLSEARCH-TITLE')>=1) {
$begin = strpos($v,
'"')+1;
$end = strrpos($v, '"');
$title =
trim(substr($v,$begin,$end-$begin));
} elseif (substr_count($v,'HTMLSEARCH-LINK')>=1) {
$begin = strpos($v, '"')+1;
$end = strrpos($v, '"');
$link =
trim(substr($v,$begin,$end-$begin));
} elseif (substr_count($v,'HTMLSEARCH-BEGIN-SEARCH')>=1) {
$text2search = "";
$k++;
if ($k > $offset)
$beginsearch =
true;
} elseif ((substr_count($v,'HTMLSEARCH-END-SEARCH')>=1) && $beginsearch) {
$text2search = strtoupper($text2search);
如果 (is_array($queryarray) && $count = count($queryarray)) {
如果 (strpos($text2search,strtoupper(htmlentities($queryarray[0]))) ||
strpos(strtoupper(htmlentities($title)),strtoupper
$found = true;
for($j=1; $j < $count; $j++) {
如果 ($andor == 'AND') {
如果
(strpos($text2search,strtoupper(htmlentities($queryarray[$j]))) ||
strpos(strtoupper(htmlentities($title)),strtoupper(htmlentities($queryarray[$j]))))
$found = $found && true;
else
$found = $found && false;
} else { // OR
如果 (strpos($text2search,strtoupper(htmlentities($queryarray[$j]))) ||
strpos(strtoupper(htmlentities($title)),strtoupper(htmlentities($queryarray[$j]))))
$found = $found || true;
else
$found = $found || false;
}
}
}
$beginsearch = false;
}
如果 ($beginsearch) {
$text2search = $text2search . $v;
}
如果 ($found) {
$ret[$i]['image'] = $image;
$ret[$i]['link'] = $link;
$ret[$i]['title'] = $title;
$ret[$i]['uid'] = 1;
$ret[$i]['time'] = filemtime($dir . $file);
$i++;
$found = false;
如果 ($i >= $limit)
break;
}
}
unset($array_tmp);
}
}
closedir($dh);
}
}
return
$ret;
}
?>
要查看模块的实际效果,请访问链接:
http://ciaandarilhos.cordeiropereira.com.br 中的“Produtos”模块已实现此代码。他们查看HTML页面代码时,如果有关于标记位置的疑问,我期待收到优化代码的建议,例如,htmlentities的代码非常糟糕,可能使用正则表达式查找标记和要搜索的单词会更好。好吧,现在想法主要是与他人分享,以便共同改进。欢迎提出建议。
Ulisses