Archivo para la ‘Programación’ Categoría

Crear formularios con relaciones m:n en Symfony 1.4

Publicado por # 10/jul/2010
Categorías: Programación

El cambio de Symfony 1.0 al Symfony 1.4 no fue tan complicado como pensé que sería. Pero supongo que tanto a mi como a otros cuantos, les habrá ocurrido que enfrentarse a entender la construcción de formularios no es fácil. Aunque una vez superado esto, entiendes lo que significa. A pesar de sus bondandes y, en general, las bondades del symfony, no me parece que los formularios sigan del todo un patron MVCW (mi humilde opinión).

Volviendo al tema, una de las cosas que me fue dificil de crear fue un simple formulario que guardara datos en tablas estructuradas con relacion muchos a muchos. Y por la poca documentación que encontré, pongo a disposición un ejemplo que espero le sirva a alguien.

Para el ejemplo vamos a suponer que tenemos un blog. De ese blog cada entrada (article) tiene varias categorias (category) y varias etiquetas (tags). Para que lo obviamente necesitaremos relaciones muchos a muchos (muchas entradas pueden tener muchas categorias, y muchas entradas pueden muchas etiquetas). El schema.yml sería algo como esto:

propel:
  article:
    id:           ~
    title:        { type: varchar(255), required: true }
    slug:         { type: varchar(255), required: true }
    content:      longvarchar
    status:       varchar(255)
    author_id:    { type: integer, required: true, foreignTable: author, foreignReference: id, OnDelete: cascade }
    category_id:  { type: integer, required: false, foreignTable: category, foreignReference: id, onDelete: setnull }
    published_at: timestamp
    created_at:   ~
    updated_at:   ~
    _uniques:
      unique_slug: [slug]

  author:
    id:           ~
    first_name:   varchar(20)
    last_name:    varchar(20)
    email:        { type: varchar(255), required: true }
    active:       boolean

  category:
    id:           ~
    name:         { type: varchar(255), required: true }

  tag:
    id:           ~
    name:         { type: varchar(255), required: true }

  article_tag:
    article_id:   { type: integer, foreignTable: article, foreignReference: id, primaryKey: true, onDelete: cascade }
    tag_id:       { type: integer, foreignTable: tag, foreignReference: id, primaryKey: true, onDelete: cascade }

Uno de los errores frecuentes ocurre por una mala definición de las tablas. Se debe tener en cuenta que las tablas que manejan la relacion m:n debe tener sus dos campos establecidos como una llave primaria para esa tabla, y establecer las llaves foráneas correctamente.

Creamos el modelo:

./symfony propel:build-model

Luego creamos los formularios:

./symfony propel:build-forms

Limpiamos la caché:

./symfony cc

Se crea el modulo que utiliza el formulario:

./symfony propel:generate-module app nombreModulo nombreClase

Cuando accedemos al formulario veremos que nos mostrará la lista de categorias disponibles y  la lista de etiquetas disponibles.

Y ¿si quiero agregar el campo manualmente a un formulario que ya existe?

Pues bien, luego de haber definido correctamente tus tablas, debes re-hacer el model, re-hacer los formularios:

./symfony propel:build-model
./symfony propel:build-forms
./symfony cc

Vas al fomulario, y agregar el campo. Suponiendo que en la tabla m:n (post_category) existen los campos id_post y id_category, donde ambos conforman una clave primaria y ambos son claves foráneas con sus respectivas tablas (post y category). Vamos al formulario principal (que deberís ser post) y agregamos nuestro campo:

$form['post_category_list']->render();

Y listo, tenemos nuestro nuevo campo.

Demás esta decir que symfony se encarga del resto, es decir, de hacer efectivas las relaciones, guarda los datos en sus respectivas tablas. Actualiza, elimina, crea, sin necesidad de alguna configuraciòn extra. No se requiere embeber formularios.

Enlaces de interés:

SARG (Reportes de Squid)

Publicado por # 24/ago/2009
Categorías: Informática,Programación

Algunos parametros que se deben tener en cuenta a la hora de configurar el SARGW:

  • language Spanish : Se configura el idioma que SARG va a mostrar algunas opciones.
  • access_log /var/log/squid/access.log : Aqui se indica de donde sarg va a sacar los registros, en este caso es por defecto donde squid guarda los Log de acceso por Ip, Hora, Web visitada y varios formatos que se pueden configurar.
  • title “Squid User Access Reports” : Queda claro que pide el Titulo de sarg cuando se visita por web.
  • output_dir /var/www/squid-reports : Aqui se indica cual va a ser la salida o donde se van a mostrar los registros que Sarg muestra, aqui se debe colocar la Ruta donde esta configurado APACHE.
  • resolve_ip yes o no : Aqui se indica si el registro que aparesca no por la IP si no por el nombre de la maquina.
  • exclude_users /etc/squid/sarg.users : Se puede indicar que no realice registros de los usuario que esten configurados en el archivo correspondiente.
  • date_format e : Se indica que los reportes los muestre con la configuracion de la hora U america (mes/dia/año)
  • mail_utility mailx : Aqui se indica si los reportes se envian mediante correo, no es muy recomendable ya que estarias recibiendo muchos correos y no es indispensable ya que los podras ver mediante web.
  • weekdays 0-6 : Se indica que dias va a ver los registros.( Sunday->0, Saturday->6 )
    Las lineas de Dansguardian y squidguard, hay que dejarlas comentadas ya que si no se tiene configurada ninguna de estas opciones en el server dara error Sarg.

Fuente: http://tuxli.co.cc/archives/67

Lo importante de la comunicación

Publicado por # 28/jul/2009
Categorías: Entretenimiento,Humor,Informática,Internet,Programación

proyecto

Instalar todas las versiones de IE en un PC

Publicado por # 1/may/2009
Categorías: Internet,Programación

Una excelente idea para probar tus páginas web en diferentes versiones de IEW es con Internet Explorer Collection, que instala las siguientes versiones de IE en una misma PC:

  • Internet Explorer 1.0 (4.40.308)
  • Internet Explorer 1.5 (0.1.0.10)
  • Internet Explorer 2.01 (2.01.046)
  • Internet Explorer 3.0 (3.0.1152)
  • Internet Explorer 4.01 (4.72.3110.0)
  • Internet Explorer 5.01 (5.00.3314.2100)
  • Internet Explorer 5.5 (5.51.4807.2300)
  • Internet Explorer 6.0 (6.00.2800.1106)
  • Internet Explorer 6.0 (6.00.2900.2180)
  • Internet Explorer 7.0 (7.00.5730.13)
  • Internet Explorer 8.0 (8.00.6001.18702)
  • Internet Explorer Developer Toolbar 1.00.2188.0

iecollection_setup_02_components

Página del programa: http://finalbuilds.edskes.net/iecollection.htm
Descarga: http://codecpack.nl/iecollection1402.exe (54.5Mb)

Ayacs

Publicado por # 19/feb/2007
Categorías: Internet,Noticias,Programación

Actualizándome, como el resto… O bueno, haciendo el intento: me encuentro con la maravilla de AJAX (aún no tengo claro como ha de pronunciarse, pero según la Academia, debería ser algo así como “ayacs“).

Básicamente, la principal virtud de AJAX está en la potencia que se le puede extraer al trabajo asíncrono de peticiones al servidor. Estamos acostumbrados a un modelo de interacción sincrónica basada en clic-petición-presentación, clic-petición-presentación. Con AJAX la interacción pasa a ser asíncrona. Cada vez que se hace clic no necesariamente se establece una conexión con el servidor.

Para aclararles un poco cómo procede. Si alguna vez has utilizado Gmail, has estado en presencia de AJAX. ¿Has notado que recibes correo sin que tengas que recargar o actualizar la página? Bueno, estas son interacciones asíncronas. No tengo que decirle al servidor que me traiga mi datos, él solito lo hace cuando sabe que tiene info para mi.

A ver, me hice un lector de feeds (RSS, no me he puesto con Atom). Hasta ahora funcionando bien.