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!

BarcampNEA en Resistencia - Chaco

banner-full-logo

El 25 de junio, en la Uiversidad Tecnológica Nacional Facultad Regional Resistencia, se realizará la primera BarCamp del Nordeste.

Se llevará a cabo por primera vez en la región uno de los eventos tecnológicos internacionales más importantes, la BarCamp.
Se invita a los interesados en tecnología, educación, redes sociales, diseño, comunicación y marketing, entre otras áreas, a asistir y participar activamente de la jornada. La misma comenzará a las 9 de la mañana en instalaciones de la Universidad Tecnológica Nacional, en French 414 (ciudad de Resistencia, Chaco) y se extenderá hasta las 22.

La BarCamp es una “desconferencia”, que consiste en una serie de charlas generadas por los participantes del evento. Al arribar al sitio elegido, los asistentes encontrarán una pizarra dividida acorde a los horarios disponibles para las conferencias. Todo aquél que desee
compartir un tema, proyecto o experiencia relacionada a las áreas de interés mencionadas, podrá anotarse, explicando brevemente el temario
que desarrollará.

El evento no tiene fines de lucro y está siendo organizado por un grupo de personas relacionadas a la tecnología, las comunicaciones y
los negocios con el fin de compartir conocimientos, crear nuevos lazos entre estas áreas y, principalmente, promover la participación de la
comunidad tecnológica y comunicacional del Nordeste argentino. Por ese motivo, se solicita a los asistentes su colaboración con un alimento
no perecedero, utensilios y prendas de vestir en buen estado, que serán donadas al Comedor de Niños Beraca, de la ciudad de Resistencia.

Para más información, los interesados en participar y colaborar con el evento pueden comunicarse a través del correo electrónico a barcampnea@gmail.com o visitar el sitio oficial del evento: barcampnea.com.ar.

Sin sonido en salida para auriculares - Toshiba L645 y Ubuntu 10.10

Luego de instalar Ubuntu 10.10 en mi laptop Toshiba L645-SP4135L, con chip de sonido Intel Serie 5 / 3400, no tenía sonido en la salida para auriculares.

Tras probar varias sugerencias, llegué a una solución en tres simples pasos que detallo a continuación:

1) - En primer lugar nos aseguramos de que el chip de audio sea el mismo al que hacemos refencia en este post, para ello ejecutamos el siguiente comando en una consola:

lshw -c sound

Que debería mostrar informacion como la siguiente (lo que mas nos interesa es la tercer línea) :

*-multimedia
description: Audio device
product: 5 Series/3400 Series Chipset High Definition Audio
vendor: Intel Corporation
physical id: 1b
bus info: pci@0000:00:1b.0
version: 05
width: 64 bits
clock: 33MHz
capabilities: bus_master cap_list
configuration: driver=HDA Intel latency=0
resources: irq:45 memory:d6400000-d6403fff

Si esto es así podemos continuar, en caso contrario, es probable que lo que sugiero en este post no solucione el problema.

2) - Editamos el archivo alsa-base.conf:

sudo nano /etc/modprobe.d/alsa-base.conf

y agregamos la siguiente línea al final:

options snd-hda-intel model=ideapad

Guardamos y cerramos el archivo.

3) - Reiniciamos el sonido de la laptop:

sudo alsa force-reload

y listo!..con esto deberíamos tener funcionando correctamente la salida para auriculares.

Espero que les haya sido útil..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.

RabbitVCS, el sucesor de NautilusSVN

rabbit

Después de tratar de usar  NautilusSVN y fracasar en el intento me encuentro en esta semana con su sucesor, RabbitVCS,  y la verdad que estoy muy sorprendido de las mejoras que ha tenido el producto.

En primer lugar me llamó mucho la atención el nuevo nombre de la aplicación “Rabbit” (conejo) como contraparte de la herramienta para Windows llamada “Tortoise” (tortuga) :P …  pero mas allá de eso cabe destacar, lo “armoniosamente” integrado que está con el administrador de archivos Nautilus.

La pérdida de rendimiento que provoca en este último es ínfima comparada con la perdida que generaba su predecesor. Además, se solucionó el problema de los frecuentes “cuelgues” que generaba esta extensión al administrador de archivos.

Otra característica interesante es que su interfaz está totalmente traducida al español, lo que, dependiendo de la costumbre del usuario, puede resulatar una ventaja ó una fuente de confusión.

Actualmente Rabbit se integra sólo con Nautilus y soporta Subversion, pero el proyecto apunta a un objetivo mucho más grande: incorporar otros sistemas de control de versiones, como así también, otros sistemas administradores de archivos.

En la página de descarga se encuentran los instaladores para Ubuntu, Debian, Fedora, Arch y Gentoo, para las plataformas de 32 y 64 bits, y los paquetes e instrucciones para la instalación manual.

Además en el blog del proyecto se puede votar en una encuesta para saber “que sistema de control de versiones es más importante para los usuarios”.

URL del proyecto: http://rabbitvcs.org/