Palavra:   

Revista PHP / PHP

Douglas Lira

Sistema Auto Completar

Estava desenvolvendo um sistema de busca para um cliente, que necessitava buscar seus produtos por referência, de imediato parecia ser fácil, logo veio alguns problemas: alguns produtos tinha referencia difícil de memorizar e vários produtos tinha quase a mesma referencia apenas um ou outro caractere que diferenciava. Pesquisei a melhor forma de solucionar o problema e encontrei o “AutoSuggest” vi alguns exemplos muito bons (complexos de aplicar) outros nem tanto, decidi criar e postar aqui vamos ao que interessa!!

Arquivos necessários
    http://xajaxproject.org/download.php

Indice

  1. Criando o arquivo COMPLETAR.PHP
  2. Criando o JavaScript
  3. Criando o arquivo INDEX.PHP
  4.  Considerações Finais

 
1 – Criando o Arquivo COMPLETAR.PHP

PHP
  1. <?php
  2. function autocompletar($formulario) {
  3. // Iniciando a Classe
  4. $objResponse = &new xajaxResponse('ISO-8859-1');
  5. // Iniciando a Conexao
  6. mysql_connect("localhost","root","");
  7. mysql_select_db("autocompletar");
  8. // Contador
  9. $i = 0;
  10.  
  11. // Criando o SQL
  12. $sqlBusca = "SELECT * FROM tb_produto WHERE referencia LIKE '".$formulario["referencia"]."_%' ";
  13. // Executando o SQL
  14. $queryBusca = mysql_query($sqlBusca);
  15. // Quantidade de Registro
  16. $check = mysql_num_rows($queryBusca);
  17.  
  18. // Verificando se é diferente de Nulo
  19. if($formulario["referencia"] != "") {
  20.  
  21. // Verifica se é maior que zero
  22. if($check > 0) {
  23. // Fazendo a listagem
  24. while($list = mysql_fetch_array($queryBusca)) {
  25. // Armazenando na variavel $opcao
  26. $opcao .= "<div id=\"div_".$i."\">".$list["referencia"]."</div><br>";
  27. // Incrementa o Contador
  28. $i++;
  29. }
  30. } else {
  31. // Mensagem de não encontrado
  32. $opcao = "Nenhuma Referencia encontrada...";
  33. // Numero de Itens
  34. $check = 0;
  35. }
  36.  
  37. // Adicionando a DIV autocomplete
  38. $objResponse->addAssign("autocomplete","innerHTML",$opcao);
  39. // Armazenando o numero de Registros
  40. $objResponse->addAssign("nItens","value",$check);
  41.  
  42. } else {
  43.  
  44. // Adicionando a DIV autocomplete
  45. $objResponse->addClear("autocomplete","innerHTML");
  46. // Armazenando o numero de Registros
  47. $objResponse->addClear("nItens","value");
  48. }
  49.  
  50. // Retornando a Resposta
  51. return $objResponse->getXML();
  52.  
  53. }
  54. ?>
www.revistaphp.com.br

2 – Criando o JavaScript

JavaScript
  1. <script>
  2. var POS = -1;
  3.  
  4. function setUpDown(palavra,valor,event) {
  5.  
  6. // Pegando o valor da Tecla
  7. var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
  8. var nITEM = document.getElementById("nItens").value; // Pegando o Numero de Itens da Busca
  9. var ref = document.getElementById("referencia");
  10.  
  11. // Declarando a Variavel Anterior
  12. var ANT;
  13.  
  14. // Se a tecla pressionada for down arrow (Seta para baixo)
  15. if(keyCode == 40) {
  16.  
  17. if(POS >= (nITEM-1)) {
  18. POS = (nITEM-1);
  19. } else {
  20. POS++;
  21. }
  22.  
  23. // Seleciona a DIV
  24. document.getElementById("div_"+POS).style.background = "#000066";
  25. // Armazena a posição da DIV que será deselecionada
  26. ANT = eval(POS-1);
  27. // Se posição da DIV selecionada for diferente de -1 (Posição Inicial)
  28. if(ANT != -1) {
  29. // Deseleciona a DIV
  30. document.getElementById("div_"+ANT).style.background = "#FFFFFF";
  31. }
  32.  
  33. // Armazena o conteudo dela na variavel TEMP
  34. var TEMP = document.getElementById("div_"+POS).innerHTML;
  35. // Atribui o valor da TEMP ao campo REFERENCIA
  36. ref.value = TEMP;
  37.  
  38. // Se a tecla pressionada for up arrow (Seta para cima)
  39. } else if(keyCode == 38) {
  40.  
  41. if(POS <= 0) {
  42. POS = 0;
  43. } else {
  44. POS--;
  45. }
  46.  
  47. // Seleciona a DIV
  48. document.getElementById("div_"+POS).style.background = "#000066";
  49. // Armazena a posição da DIV que será deselecionada
  50. ANT = eval(POS+1);
  51.  
  52. // Deseleciona a DIV
  53. document.getElementById("div_"+ANT).style.background = "#FFFFFF";
  54. // Armazena o conteudo dela na variavel TEMP
  55. var TEMP = document.getElementById("div_"+POS).innerHTML;
  56. // Atribie o valor da TEMP ao campo REFERENCIA
  57. ref.value = TEMP;
  58.  
  59. } else {
  60. // Executa a BUSCA
  61. xajax_autocompletar(palavra);
  62. }
  63. }
  64. </script>
www.revistaphp.com.br

3 – Criando o arquivo INDEX.PHP

PHP
  1. <?php
  2. // Incluindo o AJAX
  3. require_once("xajax_0.2.4/xajax.inc.php");
  4. require_once("completar.php");
  5.  
  6. // Iniciano a Classe
  7. $xajax = &new xajax();
  8.  
  9. // Registrando a Função
  10. $xajax->registerFunction("autocompletar");
  11.  
  12. // Configurações exclusiva do AJAX
  13. $xajax->decodeUTF8InputOn();
  14. // Usando codificação ISO-8859-1
  15. $xajax->setCharEncoding("ISO-8859-1");
  16. $xajax->processRequests();
  17. ?>
  18. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  19. <html xmlns="http://www.w3.org/1999/xhtml">
  20. <head>
  21. <?php $xajax->printJavascript("xajax_0.2.4/"); ?>
  22. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  23. <title>:: Auto Completar - By Douglas Lira ::</title>
  24.  
  25. [ inserir o código javascript aqui!! ]
  26.  
  27. </head>
  28. <body>
  29. <form id="formulario" name="formulario" method="post">
  30. <input type="hidden" name="tempPos" id="tempPos" />
  31. <input type="hidden" name="nItens" id="nItens" />
  32. <input name="referencia" type="text" id="referencia" onkeyup="setUpDown(xajax.getFormValues('formulario'),this.value, event);" />
  33. <div id="autocomplete" style="width:150px;"></div>
  34. </form>
  35. </body>
  36. </html>
www.revistaphp.com.br

4 – Considerações Finais

Bom, espero que gostem... esses código também encontra-se na sessão de CÓDIGOS / SCRIPTS do site.
É uma forma simples e fácil de aplicar, lógico que necessita de mais detalhes e um retoque final de Design, como é apenas para ensino deixei na forma “bruta” mesmo. Qualquer coisa estou on-line sempre no MSN e GTALK abraços!! =D

Opções de Interação

Comentários

Re: Nâo reconhece o mouse
Por: Douglas, 31/08/2008   22:41:45
Da uma olhada no Autocomplete v2.0, fim uma funcionalidade para isso, se eu não me engano, caso contrario entra em contato pelo MSN abraços!
Nao reconhece o mouse
Por: cleison, 30/08/2008   10:45:42
douglas, vc pode me passar alguma dica de como posso fazer funcionar o mouse nesse seu codigo?
RE: Sistema AutoCompletar
Por: Douglas, 31/07/2008   23:46:50
Agente pode tentar fazer isso, porem preciso que esclareça melhor a sua necessidade!!
Sistema AutoCompletar
Por: Roberto, 31/07/2008   22:57:46
Olá...este topico é show de bola...porém estou com a seguinte duvida.

Tenho um sistema com cadastros de clientes e funcionarios ambos herdam da classe pessoa, o problema é:
Fazer um auto completar na tablea cliente para listar os funcionarios cadastrados e os dados sejam mostrados nos inputs para que os mesmos façam parte da tabela cliente.

Tem como???

Caso alguem souber e puder me ajudar, ficarei grato, pois sou iniciante e não sei como resolver este probleminha...

Abraço galera e desculpe pelo texto grande demais...
RE: Estrutura
Por: Douglas, 03/07/2008   10:21:06
Bom galera, realmente preciso modificar esse tutorial, porem disponibilizei uma versão 2.0 desse autocompletar, nele segue a estrutura SQL e todas as suas funcionalidades. grande abraço a todos!
Erro no retorno
Por: Caballerus, 03/07/2008   00:38:38
Error: the xml response that was returned from the server is invalid Received:...
Eu tentei usar a versão 2.0 conforme indicado e não deu certo. Alguém tem a solução ou teve este problema também ?
Resposta
Por: Douglas, 16/04/2008   23:23:01
Olá Flávio, de fato esqueci algumas coisas nesse tutorial, estou tentando alterar mas não consigo, se possivel vá até a parte de códigos que tem a versão 2.0 do AutoCompletar está funcionando 100%
XML
Por: FLÁVIO, 16/04/2008   19:24:41
Boa noite Douglas.
Muito bom seu artigo.
No meu está dando a seguinte mensagem:
No XML Response Was Returned By Function autocompletar.
Vc saberia pq não está tendo um retorno XML da função?
Desde já agradeço.
Tabela...
Por: Edimar, 11/02/2008   07:58:34
Olá sou novo aqui e gostaria de saber qual seria e estrutura da tabela SQL...

Obrigado!