User Tag List

Resultados 1 al 8 de 8

Tema: symfony 2 - Menú dinámico con imágenes

  1. #1

    Fecha de ingreso
    Jun 2006
    Mensajes
    4,574
    Mencionado
    41 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,259
    Agradecer Thanks Received 
    700
    Thanked in
    Agradecido 427 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    6

    symfony 2 - Menú dinámico con imágenes

    Buenas. Tengo una dudilla de carácter conceptual (seguro que es una chorrada muy básica) sobre lo siguiente:

    Estoy realizando una aplicación web en symfony 2. Dicha aplicación tendrá un menú de categorías que será dinámico, es decir, las categorías disponibles están en una tabla de BD, así que se hace una consulta a la BD y el menú se crea de manera dinámica en un <UL>, etc. Mi duda es que dichas categorías tendrán una imagen asociada, y no tengo claro cual es el procedimiento estandar para eso, si poner el nombre de la imagen como un campo más en la tabla categorias (p. ej. un campo de tipo String que se llamase "filename") y así, mientras creamos el menú, cargar la imagen con un <img src="asset({{ categoria.filename }})"></img> o si eso es una burrada y se hace de otra forma. Se que se puede poner la imagen como un campo de BD de tipo blob directamente en la tabla, pero no creo que fuese una buena idea porque si más adelante se quiere cambiar un icono, es más fácil sencillamente reemplazar un archivo jpg o png que tener que modificar un campo de BD, no?.

    En el caso de que la idea buena fuese la de poner un campo con el nombre del archivo, ¿recomendais que el nombre del archivo tenga también la extensión, o es mejor no ponerla? Aparte, obviamente, en ese campo se pondría solo el nombre del archivo, y la ruta a dicho recurso dejamos que la gestione el propio Symfony, no?

    Si al final resulta que se suele hacer de otra forma diferente a todo lo que he dicho, soy todo oídos.

    Merci.
    _
    .▲ ALABADO SEA EL TRI-FORCEPS!

    Nunca me he considerado de clase media. Soy más bien de clase calcetín roñoso.

  2. #2

    Fecha de ingreso
    Nov 2005
    Ubicación
    Excartagenero
    Mensajes
    23,651
    Mencionado
    276 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    5,993
    Agradecer Thanks Received 
    5,820
    Thanked in
    Agradecido 3,793 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    1
    No conozco Simphony pero sí te puedo decir que meter imágenes en las bases de datos creo que no es muy recomendable.

    Lo de filename creo es lo correcto o directamente usa el ID de la categoría como identificador de la imagen.

  3. El siguiente usuario agradece a josepzin este mensaje:

    akualung (22/04/2014)

  4. #3

    Fecha de ingreso
    Jun 2006
    Mensajes
    4,574
    Mencionado
    41 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,259
    Agradecer Thanks Received 
    700
    Thanked in
    Agradecido 427 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    6
    Cita Iniciado por josepzin Ver mensaje
    No conozco Simphony pero sí te puedo decir que meter imágenes en las bases de datos creo que no es muy recomendable.

    Lo de filename creo es lo correcto o directamente usa el ID de la categoría como identificador de la imagen.
    Es verdad, lo del id es buena idea. Lo del campo filename se me ocurrió porque el nombre en sí de la categoría puede tener espacios, acentos, diéresis, etc, pero creí conveniente un nombre de archivo que no tuviese todo eso, p. ej. una posible categoría "paragüeros y ropa de protección" (sí, categoría algo surrealista, pero es lo primero que se me ha ocurrido que tenga caracteres raros XDDD) tendria como filename "paragueros_y_ropa_de_protección" o incluso se podria abreviar y que fuese "parag_ropa_prot". Algo así como aplicar el concepto de slug pero para nombres de imágenes, no sé si me explico bien.

    Estudiaré qué me conviene más, si usar el id o el nombre del archivo. Lo del id, ahora que lo pienso con más calma, me escama un poco por si en algún momento se ha de rehacer la BD e insertan las categorías en otro orden (una vez hecha, la web ya no dependerá de mí), pero no sé si eso es algo muy común.

    Gracias, josepzin
    Última edición por akualung; 22/04/2014 a las 14:41
    _
    .▲ ALABADO SEA EL TRI-FORCEPS!

    Nunca me he considerado de clase media. Soy más bien de clase calcetín roñoso.

  5. #4

    Fecha de ingreso
    Oct 2003
    Mensajes
    17,905
    Mencionado
    42 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    214
    Agradecer Thanks Received 
    160
    Thanked in
    Agradecido 109 veces en [ARG:2 UNDEFINED] posts
    Usa el md5 trimeado a un numero optimo de caracteres como identificador de la imagen que equivalga a la ruta de lamisma y renombrala cuando la subas.

    Las imagenes (y resto de binarios) se sirven como contenido estatico desde fuera de la db, para que se puedan usar cdns, etc.

  6. El siguiente usuario agradece a otto_xd este mensaje:

    akualung (23/04/2014)

  7. #5

    Fecha de ingreso
    Nov 2005
    Ubicación
    Madrid
    Mensajes
    4,183
    Mencionado
    16 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    56
    Agradecer Thanks Received 
    253
    Thanked in
    Agradecido 154 veces en [ARG:2 UNDEFINED] posts
    Bueno, yo veo varios problemas, algunos de simple lógica y otros de como hacerlo en symfony2.

    Por un lado te diría que como te han dicho guardaría solo el nombre de la imagen en la base de datos, no la imagen completa como contenido binario, siempre me ha parecido una chapuza que te cagas guardar el contenido completo, le metes un peso a la base de datos completamente innecesario, y no hablemos ya si quieres generar varios tamaños de imagen y cachearlas de alguna forma o qué se yo.

    Por otro lado solo guardaría el nombre de la imagen, y con extensión, además de pasarle al nombre de la imagen un filtrado rollo "urlize" o "slugify" para quitarle carácteres extraños.

    Y por último, ya que has escogido symfony2 para tu proyecto, resulta que alguien ya ha pensado en todo esto y ha creado un bundle llamado VichUploader:

    https://github.com/dustin10/VichUploaderBundle
    Documentación de uso: https://github.com/dustin10/VichUplo...s/doc/usage.md

    Este bundle es un imprescindible en casi cualquier proyecto symfony. Sencillamente tienes que crear un campo "file" asignado a VichUploader en tu entidad (En este caso categoría), y ya se encarga el bundle de hacer todo el proceso anterior por tí.

    En el fichero de configuración asignas un path para las imágenes de cada entidad, y luego al acceder al campo de la imagen desde la plantilla (Twig) tal que:

    En la config:
    Código:
    vich_uploader:
        db_driver: orm
        mappings:
            category_image:
                uri_prefix:         /images/categories
                upload_destination: %kernel.root_dir%/../web/images/categories
    En la plantilla (Twig):
    Código:
    <img src="{{ vich_uploader_asset(category, 'image') }}" />
    Ya se encarga vich_uploader de generar la ruta por ti. Además puedes seleccionar que estrategia de "naming" para los ficheros escoger, si rollo "md5" como dice otto, o con el propio nombre del fichero "slugificado" o implementar la tuya propia.

    Merece la pena gastar un rato en aprender a usar este bundle porque te ahorrará mucho tiempo después

    Y como extra, si quieres generar y cachear distintos tamaños de las imágenes:

    https://github.com/liip/LiipImagineBundle

    Ya nos contarás XD

  8. El siguiente usuario agradece a Estopero este mensaje:

    akualung (24/04/2014)

  9. #6

    Fecha de ingreso
    Nov 2005
    Ubicación
    Excartagenero
    Mensajes
    23,651
    Mencionado
    276 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    5,993
    Agradecer Thanks Received 
    5,820
    Thanked in
    Agradecido 3,793 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    1
    Lo del ID es infalible, te evitas historias de limpieza de nombre, de caracteres raros, de archivos duplicados, etc. Nunca habrá otro 345.jpg
    Última edición por josepzin; 23/04/2014 a las 05:00

  10. El siguiente usuario agradece a josepzin este mensaje:

    akualung (24/04/2014)

  11. #7

    Fecha de ingreso
    Nov 2005
    Ubicación
    Madrid
    Mensajes
    4,183
    Mencionado
    16 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    56
    Agradecer Thanks Received 
    253
    Thanked in
    Agradecido 154 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por josepzin Ver mensaje
    Lo del ID es infalible, te evitas historias de limpieza de nombre, de caracteres raros, de archivos duplicados, etc. Nunca habrá otro 345.jpg
    Si lo programas bien es cierto que te evitas cualquier problema de colisión de nombres, sin embargo a mi me gusta incluir un nombre descriptivo en el nombre del fichero, principalmente pensando un poco en el SEO, también cuenta el nombre de las imágenes de tu web/artículo a la hora de buscar en google.

    Una mezcla de nombre slugificado con por ejemplo 3 caracteres de ID puede ser una buena opción nombre-del-fichero-345.jpg
    Última edición por Estopero; 23/04/2014 a las 11:15

  12. #8

    Fecha de ingreso
    Jun 2006
    Mensajes
    4,574
    Mencionado
    41 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,259
    Agradecer Thanks Received 
    700
    Thanked in
    Agradecido 427 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    6
    Hola, perdón por tardar en responder, he estado todo el día fuera (Sant Jordi y tal, jejeje).

    Merci por todas las respuestas. Tal como pensaba, es mucho mejor dejar la BD para lo que se supone que es, que es guardar datos y no recursos de la aplicación. Es que hace tiempo trabajé en una consultoría donde tenían un framework basado en Struts2 y trabajé en una aplicación donde guardaban unos pdfs con firma electrónica que la susodicha generaba de forma dinámica, como objetos BLOB en la Base de datos (y la verdad es que programar eso fué un cristo, lo hizo el analista que me pusieron como mentor y le costó tela).

    Me encantaría mirarme la librería que me has dicho, Estopero, pero la verdad es que llevamos la aplicación fuera de tiempo y no se, me miraré el bundle con más calma para una siguiente aplicación que haga con este framework, ya seguramente hecha solo para mí por afán de aprender más sobre este framework, porque la verdad es que me ha gustado bastante (aunque tampoco es que haya visto muchos, así que en ese campo soy altamente impresionable xDDD). Lo de la mezcla de nombre slugificado y ID me parece perfecta, miraré de hacerlo así

    De todas formas esta no será la última duda que tenga, esperad verme por este hilo unas cuantas veces más en los próximos días, jejeje.
    _
    .▲ ALABADO SEA EL TRI-FORCEPS!

    Nunca me he considerado de clase media. Soy más bien de clase calcetín roñoso.

Etiquetas para este tema

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •