Autocompletar

Este codigo se implementa en modulos generados con admin generator

Nota: tener en cuenta que el campo agregado como buscador debe tener un nombre distinto al campo del esquema

---------------Generator.yml-------------------

el campo usado para buscador esta con el nombre ciudad

generator:
class: sfDoctrineGenerator
param:
model_class: Entidades
theme: admin
non_verbose_templates: true
with_show: false
singular: ~
plural: ~
route_prefix: entidades
with_doctrine_route: true
actions_base_class: sfActions

config:
actions: ~
fields:
display: [nombre, cuit, email, logo, ciudad]
list:
title: "Lista de Entidades"
display: [nombre, cuit, email, _imagen, _ciudad]
filter:
display: [nombre]
form: ~
edit:
title: "Editar Entidad"
display: [nombre, cuit, email, logo, ciudad]
new:
title: "Nueva Entidad"
display: [nombre, cuit, email, logo, ciudad]

---------------Action.class.php-------------------

public function executeGetCiudades(sfWebRequest $request){
$this->getResponse()->setContentType('application/json');
$string = $request->getParameter('q');

$req = Doctrine::getTable('Ciudades')->getDataWhere($string);
$results = array();
if (count($req) > 0){
foreach ( $req as $result )
$results[$result->getId()] = $result->getDescripcion();
return $this->renderText(json_encode($results));
}else{
$results[0] = 'No se encontraron resultados';
return $this->renderText(json_encode($results));
}
}

---------------Form-------------------

parent::configure();
$this->disableLocalCSRFProtection();
unset($this['direccion'],$this['telefono'],$this['web'],$this['created_at'],$this['updated_at']);
$this->setWidgets(array(
'nombre' => new sfWidgetFormInput(),
'cuit' => new sfWidgetFormInputText(array(), array('maxlength'=>13)),
'email'=> new sfWidgetFormInputText(),
'logo' => new sfWidgetFormInputFile(),
'ciudad' => new sfWidgetFormDoctrineChoice(array('model' => 'Ciudades', 'add_empty' => true)),
));
$this->widgetSchema['ciudad'] = new sfWidgetFormDoctrineJQueryAutocompleter(array(
'url' => $_SERVER['SCRIPT_NAME'].'/'.sfContext::getInstance()->getModuleName()."/getCiudades",
'model' => "Ciudades",
'value_callback' => 'findOneById',
'config' => "{max: 20}"
));
$this->setValidators(array(
'nombre' => new sfValidatorString(array('max_length' => 255), array('required'=> "El nombre es obligatorio")),
'cuit' => new sfValidatorString(array('max_length' => 11), array('required'=> "El cuit es obligatorio")),
'email' => new sfValidatorEmail(array('required'=>true), array('required'=> "El email es obligatorio", 'invalid'=> "Formato de email incorrecto")),
'logo' => new sfValidatorFile(array(
'required' => false,
'path' => sfConfig::get('sf_upload_dir').'/logo',
'mime_types' => 'web_images',
)),
'ciudad' => new sfValidatorInteger( array( 'required'=>false), array('required'=> "Deberia Seleccionar la Ciudad")),
));

---------------CiudadesTable.class.php-------------------

public function getDataWhere($string){
$q = Doctrine_Query::create()
->select('n.id, n.descripcion')
->from('Ciudades n')
->where('n.descripcion LIKE ?', '%'.$string.'%')
->orderBy('n.descripcion ASC')
->execute()
->getData();

return $q;
}
Redmine Appliance - Powered by TurnKey Linux