黑客技巧

带有HTML搜索功能的模块

ulisses  12-Apr-2004 19:29 4099 阅读数   无评论 


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
评分 0/5
评分: 0/5 (0 票)
投票已禁用!


Login

Who's Online

256 user(s) are online (22 user(s) are browsing Publisher)


Members: 0


Guests: 256


more...

Donat-O-Meter

Stats
Goal: $100.00
Due Date: Aug 31
Gross Amount: $0.00
Net Balance: $0.00
Left to go: $100.00
Make donations with PayPal!

Latest GitHub Commits

Categories