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!

NetBeans 6.8 con soporte para Symfony

nb-logo2

En el blog de NetBeans for PHP anuncian que el soporte para Symfony, para la versión 6.8 del IDE ya está finalizado.

La nueva versión (actualmente 6.8 milestone 2) incluye  algunas características para el desarrollo de aplicaciones sobre Symfony como:

  • El completado de código ofrece las variables de Symfony adecuadas en los archivos de vistas.
  • Navegación entre vistas y acciones
  • Reconocimiento de proyectos de Symfony existentes y la posibilidad de crear nuevos proyectos
  • Atajos de teclado asignables para acciones específicas de Symfony
  • Posibilidad de ejecutar comandos de Symfony

La versión Milestone 2 de NetBeans  6.8  puede ser descargada desde: http://bits.netbeans.org/netbeans/6.8/m2/

Cheat Sheets by Added Bytes

Added Bytes nos ofrece esta interesante colección de Cheat Sheets  (Hojas de Referencia), para descargar de manera totalmete gratuita.

Podemos encontrar cheat sheets de Python, Subversion, Expresiones Regulares, Apache mod_rewrite, PHP, CSS, Microsoft SQL Server, HTML, Microformatos, Ruby on Rails, ASP / VBScript, Caracteres HTML, JavaScript, MySQL y hasta World of Warcraft.

Enlace: http://www.addedbytes.com/cheat-sheets/

php-cheat-sheet-v21