XOOPS WAP Mobile
Notícias
Detalhes:
Título: Módulo com Search em HTML
Autor: ucp
Data: 2004-04-11 02:21:30
Conteúdo:
Estou começando no XOOPS agora e por isso optei por utilizar páginas estáticas e não dados oriundos do mysql. Primeiramente tentei usar o tinycontent, cjaycontent e etc, mas não era o que eu queria. Então observando outros códigos implementei um módulo que exibe as minhas páginas html. O problema foi quando dei por conta que o SEARCH não funcionava. Procurei em vários forums. Alguns diziam que não existia solução, outros diziam para utilizar tinycontent e etc. Pois bem, não me dando por satisfeito resolvi eu mesmo implementar o meu SEARCH em HTML. A solução é adotada é simples consiste em:

1 - Definir tags auxiliares da pesquisa nas páginas htmls. São elas:

[code]



O texto a ser procurado vai AQUI.

[/code]

O que deve ser feito é incluir essas tags na página HTML, pode-se incluir quantos blocos forem necessários. Só observar que ele deve ter um Título (HTMLSEARCH-TITLE), um Link (HTMLSEARCH-LINK) e estar definido o início (HTMLSEARCH-BEGIN-SEARCH) e o fim (HTMLSEARCH-END-SEARCH) do texto onde se realizará a pesquisa.

2 - Incluir no arquivo xoops_version.php do módulo em questão as informações necessárias para o SEARCH.

[code]
// Search
$modversion['hasSearch'] = 1;
$modversion['search']['file'] = "include/search.inc.php";
$modversion['search']['func'] = "seumodulo_search";
[/code]
3 - Criar dentro do diretório include do seu módulo o arquivo search.inc.php. Dentro ele deve conter a função seumodulo_search(). Está função deve retornar um array onde cada linha do array é um item encontrado.

[code]
$ret[$i]['image'] = $image;
$ret[$i]['link'] = $link;
$ret[$i]['title'] = $title;
$ret[$i]['uid'] = 1;
$ret[$i]['time'] = filemtime($dir . $file);
[/code]

A função seumodulo_search() percorre os arquivos HTML identifica as tags do item 1. E retorna o resultado no array.

Abaixo segue a minha função de search. Ela verifica todos os arquivos de um diretório.

[code]

function produtos_search($queryarray, $andor, $limit, $offset, $userid){

$ret = array();
$i = 0;
$k = 0;

// diretório a ser pesquisado
$dir = "modules/produtos/templates/";

// local onde se encontra o ícone que ficará ao lado do item pesquisado
$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);
if ( is_array($queryarray) && $count = count($queryarray) ) {
if (strpos($text2search,strtoupper(htmlentities($queryarray[0]))) || strpos(strtoupper(htmlentities($title)),strtoupper(htmlentities($queryarray[0]))))
$found = true;
for($j=1;$j<$count;$j++){
if ($andor == 'AND') {
if (strpos($text2search,strtoupper(htmlentities($queryarray[$j]))) || strpos(strtoupper(htmlentities($title)),strtoupper(htmlentities($queryarray[$j]))))
$found = $found && true;
else
$found = $found && false;
} else { // OR
if (strpos($text2search,strtoupper(htmlentities($queryarray[$j]))) || strpos(strtoupper(htmlentities($title)),strtoupper(htmlentities($queryarray[$j]))))
$found = $found || true;
else
$found = $found || false;
}
}
}
$beginsearch = false;
}

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

if ($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;
if ($i >= $limit)
break;
}
}
unset($array_tmp);
}
}
closedir($dh);
}
}
return $ret;
}
?>
[/code]

Se quiserem ver o Módulo em ação é só ir no link:
http://ciaandarilhos.cordeiropereira.com.br
o módulo de Produtos tem esse código implementado. Vejam o código das páginas em HTML se tiverem dúvidas como colocar as tags.

Aguardo sugestões para otimizar o código, como, por exemplo, a página do htmlentities ficou muito ruim, talvez utilizar expressões regulares para encontrar as tags e as palavras a serem pesquisadas seria melhor. Bem, mais ai está à idéia agora é só compartilhar para poder melhora-la image Sugestões serão bem vindas.

Ulisses


<< 1 ..159 (160) 161 ..335 >>