Entries Tagged 'AJAX' ↓

Autocompletado con sfFormExtraPlugin

Voy a intentar explicar con un ejemplo concreto como implementar autocompletado en formularios synfony con sfFormExtraPlugin y Doctrine ORM.

Para ello vamos a utilizar el clásico ejemplo del blog, donde tenemos dos tablas.

post:

id: INT(11)
titulo: VARCHAR(45)
texto: TEXT
categoria_id: INT(11)

y categoria:

id: INT(11)
nombre: VARCHAR(45)

La idea es modificar el formulario ‘PostForm’ para que se vea así:

autocompleter


En primer lugar descargamos la ultima version de jQuery y lo guardamos en el directorio ‘web/js/jquery’ de nuestro proyecto.

Luego instalamos el plugin sfFormExtraPlugin.

En el archivo ’settings.yml’ agregamos la siguiente clave:

all:
  jquery_autocomplete:  /sfFormExtraPlugin/js/jquery.autocompleter.js

Nota: en la vista donde se va a renderizar nuestro formulario, no debemos olvidarnos de incluir el script ‘jquery-1.6.2.js’ (o el que corresponda a la version que descargamos), ya que el plugin, por alguna razón no lo hace. Para ello podemos usar el helper ‘use_javascript()’ o modificar el archivo ‘view.yml’ del módulo donde vamos a implementar el autocompletado (en este caso el modulo post):

default:
  javascripts:    [jquery/jquery-1.6.2.js]

En el action del mismo módulo, creamos la acción que retorna un objeto JSON con pares ‘id - nombre’ de categorías:

public function executeBuscarCategoria(sfWebRequest $request)
{
    $this->getResponse()->setContentType('application/json');
 
    $categorias = Doctrine::getTable('Categoria')
                    ->retrieveForSelect(
                            $request->getParameter('q'),
                            $request->getParameter('limit')
    );
 
  return $this->renderText(json_encode($categorias));
}

En CategoriaTable creamos el método que retorna el listado de categorías filtrado por nombre:

public function retrieveForSelect($q, $limit)
  {
    $q = Doctrine_Query::create()
                    ->from('Categoria')
                    ->andWhere('nombre like ?', '%' . $q . '%')
                    ->addOrderBy('nombre')
                    ->limit($limit);
 
    return $q->execute()->toKeyValueArray('id', 'nombre');
}

Por último, modificamos el formulario (PostForm):

public function configure()
{
  $this->widgetSchema['categoria_id']->setOption(
     'renderer_class',
     'sfWidgetFormDoctrineJQueryAutocompleter'
  );
 
  $this->widgetSchema['categoria_id']->setOption(
    'renderer_options', 
    array(
	  'model' => 'Categoria',
	  'url'   => 'buscarCategoria',
	)
  );
}

Y esto es todo, solo resta utilizar el formulario ‘PostForm’ en la acción donde sea necesario, en el caso de la imagen anterior, se trata de la acción ‘post/new’ creada mediante el comando ‘doctrine:generate-admin’.

Hasta la próxima!

Generadores de “ajax-loaders” online

Los dejo con un par de herramientas con las que me encontré esta semana, se trata de dos generadores de gifs animados para indicadores de interacciones ajax.

logoLa primera de ellas, ajaxload.info, cuenta con los diseños más populares de cargadores, permite seleccionar el color de la imagen, el color de fondo, tener una vista previa, y si es de nuestro agrado, descargarla.

preloaders_net

La segunda es preloaders.net, que cuenta con las mismas características de la anterior, sumando la posibilidad de crear gifs 3D y ajustar el tamaño según nuestra necesidad, además cuenta con una galería de diseños un poco menos convencionales.