Hacks: 在HTML中使用搜索模块

发布者: ulisses 在 2004/4/12 20:01:26 4390次阅读
我现在刚刚开始使用XOOPS,因此我选择了使用静态页面和从myslq中获取数据。首先我没有使用tinycontent,cjaycontent等,但不是我想的效果。然后观察其他代码,我实现了一个显示我的HTML页面的模块。问题是在我给account时,SEARCH无法使用。我在几个论坛上搜索,有人说解决方案不存在,有的说使用tinycontent等。然后,由于我对解决方案满意,我没有自己实现HTML的SEARCH。解决方案是简单的,由以下组成



1 - 在html页面中定义搜索辅助标签。它们






要搜索的文本放在这里




需要做的是将这些标签包含在HTML页面中,可以包含多少个块都行。注意,它必须包含标题(HTMLSEARCH-TITLE)、链接(HTMLSEARCH-LINK),并仅确定搜索文本的开始(HTMLSEARCH-BEGIN-SEARCH)和结束(HTMLSEARCH-END-SEARCH)。

2 - 在相关模块的xoops_version.php存档中包含必要的SEARCH信息。


// 搜索
$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;
遍历($array_tmp 中)$v {\n


if (mb_substr_count($v,'HTMLSEARCH-TITLE') >= 1) {\n
$begin = strpos($v,
'"')+1;
$end = strrpos($v, '"');

$title =\n
trim(mb_substr($v,$begin,$end-$begin));\n
} elseif (mb_substr_count($v,'HTMLSEARCH-LINK') >= 1) {\n

$begin = strpos($v, '"')+1;\n
$end = strrpos($v, '"');

$link =\n
trim(mb_substr($v,$begin,$end-$begin));\n
} elseif (mb_substr_count($v,'HTMLSEARCH-BEGIN-SEARCH') >= 1) {\n

$text2search = "";\n
$k++;\n
if ($k > $offset) {\n
$beginsearch =\n
true;\n
} elseif ((mb_substr_count($v,'HTMLSEARCH-END-SEARCH') >= 1) && $beginsearch) {\n

$text2search = strtoupper($text2search);\n
if ( is_array($queryarray) && $count = count($queryarray) ) {\n

if (strpos($text2search,strtoupper(htmlentities($queryarray[0]))) ||\n
strpos(strtoupper(htmlentities($title)),strtoupper(htmlentities($queryarray[0]))))\n
$found = true;\n

for($j=1;$j<$count;$j++) {\n
if ($andor == 'AND') {\n
if\n
(strpos($text2search,strtoupper(htmlentities($queryarray[$j]))) ||\n
strpos(strtoupper(htmlentities($title)),strtoupper(htmlentities($queryarray[$j]))))\n
$found = $found && true;\n

else\n
$found = $found && false;\n
} else { // OR\n

if (strpos($text2search,strtoupper(htmlentities($queryarray[$j]))) ||\n
strpos(strtoupper(htmlentities($title)),strtoupper(htmlentities($queryarray[$j]))))\n
$found = $found || true;\n

else\n
$found = $found || false;\n
}

}
}
$beginsearch = false;
}


if ($beginsearch) {\n
$text2search = $text2search.$v;\n
}


if ($found) {\n
$ret[$i]['image'] = $image;
$ret[$i]['link'] = $link;

$ret[$i]['title'] = $title;\n
$ret[$i]['uid'] = 1;

$ret[$i]['time'] = filemtime($dir . $file);
$i++;\n
$found = false;

if ($i >= $limit) {\n
break;\n
}
}
unset($array_tmp);\n

}
}
closedir($dh);\n
}
}
return\n
$ret;\n
}
?>



如果想要查看模块的实际运行情况,请点击链接:[http://ciaandarilhos.cordeiropereira.com.br](http://ciaandarilhos.cordeiropereira.com.br) “产品”模块实现了此代码。在HTML页面中查看代码时,可能会有关于标签位置的疑问。我期待您的建议以提高代码,例如,initializes htmlentities 代码非常糟糕,考虑使用正则表达式查找标签及其要搜索的词汇会更好。现在,更加重要的是共享以便改进。您的建议将非常受欢迎。

乌利西斯