Ejemplo de input autocomplete con jquery ui
De KumbiaPHP Framework Wiki
Revisión del 15:14 29 sep 2011 de Manuel j555 (discusión | contribuciones)
Descripcion
En el siguiente ejemplo se muestra una manera de crear un input con autocompletado de texto, utilizando las librerias jquery y jquery-ui. El campo de texto servirá para buscar estados en una base de datos.
Tabla a Utilizar
CREATE TABLE `estados` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`estado` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `estado` (`estado`)
) ENGINE=InnoDB ;
INSERT INTO `estados` (`estado`) VALUES
('Amazonas'),('Anzoategui'),('Apure'),('aragua'),('Barinas'),('Bolívar'),
('Carabobo'),('Cojedes'),('Delta Amacuro'),('Dist. Capital'),('Falcón'),
('Guarico'),('Lara'),('Mérida'),('Miranda'),('Monagas'),('Nueva Esparta'),
('Portuguesa'),('Sucre'),('Táchira'),('Trujillo'),('valencia'),('Vargas'),
('Yaracuy'),('Zulia');
Creando el Modelo
El siguiente paso es crear un modelo llamado Estados en la carpeta models del proyecto: app/models/estados.php
<?php
class Estados extends ActiveRecord {
public function obtener_json($estado) {
if ($estado != '') {
$res = $this->find('columns: estado', "estado like '%{$estado}%'");
if ($res) {
// creamos el formato json para el autocomplete ej: ["aragua","caracas"]
foreach ($res as $estado) {
$estados[] = '"' . $estado->estado . '"';
}
return '[' . join(',', $estados) . ']';
}
}
return '["no hubo coincidencias"]';
}
}
Creando el Controlador
Ahora crearemos un controlador para probar el ejemplo, en este caso usaremos el controlador IndexController (index_controller.php):
<?php
class IndexController extends AppController {
//accion con la vista del input autocomplete
public function index() {
}
//accion que busca en los estados y devuelve el json con los datos
public function autocomplete() {
if (Input::isAjax()) { //solo devolvemos los estados si se accede desde ajax
// autocomplete coloca al final de la url coloca una variable get term
// con los datos ingresados en el input
$busqueda = Input::get('term');
$estados = Load::model('estados')->obtener_json($busqueda);
die($estados); // solo devolvemos los datos, sin template ni vista
}
die;
}
}