Nenhum produto encontrado nessa seleção.
Inputs de autocomplete são sempre úteis na área de desenvolvimento, principalmente quando utilizamos Ajax para buscar dados em um servidor remoto sem atualizar a página.
Nesse tutorial, vou detalhar como utilizar a função autocomplete do jQuery UI para buscar dados na base de dados utilizando quantos parâmetros forem necessários.
Download necessário
Antes de iniciar, é necessário baixar o jQuery UI.
Faça isso no link abaixo:
- Download jQuery UI (Com autocomplete)
Após descompactar a pasta do jQuery UI, também é necessário linkar o JavaScript e CSS do jQuery e jQuery UI no seu HTML. Isso pode ser feito da seguinte maneira:
<!doctype html> <html> <head> <title>Autocomplete - Tutsup</title> <meta charset="UTF-8"> <!-- CSS do jQuery --> <link rel="stylesheet" href="pasta_jquery_ui/jquery-ui.css"> <!-- JS do jQuery --> <script src="pasta_jquery_ui/external/jquery/jquery.js"></script> <!-- JS do jQuery UI --> <script src="pasta_jquery_ui/jquery-ui.js"></script> </head> <body> <!-- Conteúdo do Body --> </body> </html>
Os comentários HTML acima detalham onde os links foram inseridos.
A partir daqui, vamos trabalhar apenas dentro do <body>.
O HTML
Primeiramente, vamos criar um input padrão:
<input data-categoria="Suporte" data-fonte="Página inicial" name="cliente" class="cliente">
Estou criando apenas o input, mas você pode adicionar um formulário completo se preferir.
Nesse input existem alguns atributos personalizados, neles você pode adicionar o que quiser. Além disso, se precisar de mais parâmetros, basta incluir; caso contrário, basta removê-los.
Outro ponto interessante desse tutorial é que você pode utilizar quantos inputs desejar, 1, 100, 1000, você quem manda…
O jQuery UI (JavaScript)
Agora vamos adicionar o recurso de busca logo abaixo do input:
<script> // URL para a busca var busca_url = 'busca.php'; // Função de busca var busca_funcao = function( request, response ) { $.ajax({ url: busca_url, type: 'GET', dataType: "json", data: { // Parâmetro direto cliente: request.term, // Capturando parâmetro do input categoria: this.element.attr('data-categoria'), // Capturando outro parâmetro do input fonte: this.element.attr('data-fonte') }, success: function(data) { response(data); } }); } $( ".cliente" ).autocomplete({ source: busca_funcao, minLength: 1, select: function( event, ui ) { // Quando for selecionado, faça: alert( ui.item.nome_cliente ); } }); </script>
Se você adicionar ou remover algum atributo do input, lembre-se de adicionar/remover do código do jQuery UI.
Por exemplo, para o atributo "data-categoria", a linha a ser removida é:
categoria: this.element.attr('data-categoria'),
E assim por diante.
O PHP
Para o PHP, vou criar um trecho de código que gera as variáveis de acordo com os parâmetros enviados. Você poderá fazer o que precisar com elas:
<?php // Verifica se tem algum parâmetro if ( ! isset( $_GET ) || empty( $_GET ) || ! is_array( $_GET ) ) { exit(); } // Extrai as variáveis de $_GET extract( $_GET ); // Variáveis disponíveis //echo $cliente; //echo $categoria; //echo $fonte; // Abaixo vou apenas exibir valores de qualquer maneira para exemplificar // Mas você pode fazer o que quiser com os parâmetros acima // Valores fictícios $clientes = array( array( 'value' => 'Maria José', 'sobrenome' => 'Silva', 'nome_cliente' => 'Maria José Silva', ), array( 'value' => 'João José', 'sobrenome' => 'Silveira', 'nome_cliente' => 'João José Silveira', ), array( 'value' => 'Ana Maria', 'sobrenome' => 'Miranda', 'nome_cliente' => 'Ana Maria Miranda', ), ); // Deve-se retornar dados no formato jSON echo json_encode( $clientes );
Você pode fazer o que preferir com elas, porém, ao final é necessário retornar os valores no formato jSON.
Download do script completo
Se quiser baixar o script completo criado neste tutorial, utilize o link abaixo:
Você deve extraí-lo em um servidor que tenha PHP.
Concluindo
Este é um recurso muito útil em vários casos, e o melhor da história, é que não é nada complicado fazer a configuração.
Deixe a gente saber o que você achou nos comentários abaixo.
Caso tenha dúvidas, basta perguntar.