Translate to

Buscar

13 de febrero de 2011

Resolviendo Filefield Meta y usando Dynamic Field

He definido un tipo de contenido audio, que tiene un campo cck de tipo filefield, para cargar el mp3.

Activé también el módulo filefield meta (requiere instalar el módulo getid3, el cual requiere descargar la biblioteca getid3 aparte), con la intención de poder captar del mp3 la información de género, autor, duración y otros, como había visto que hacía el módulo audio.

Bueno, no encontraba la información que se supone fielfield meta guardaba. Al menos para mí, no resultaba claro dónde se supone que se hallaba.

Quizás sea uno de esos casos donde se supone que es obvio :-)

Felizmente encontré el post Using FileFieldMeta and GetID3 to display duration of audiofiles (mp3) . Lo bueno es que no sólo me indicó el lugar donde se hallaba la información (dicho sea de paso, ¿en qué lugar de la documentación dice que se guarda en $node->field_audiofile[0]?... no me malentienda, me gusta Drupal y agradezco las muchas cosas que compartimos, pero ¿puedo preguntar, no?), también me mostró que había una forma de definir campos dinámicos para un nodo, de una manera más sencilla que vérselas con el sistema de templates.

Se trata de Dynamic Field. Es como un tipo cck que uno puede agregar al nodo y brinda un campo de texto donde uno puede poner php que será ejecutado cada vez que se muestra el nodo. De ese modo, para poner la duración de la canción subida, puedo definir el campo Duration (field_audioduration) de tipo Dynamic Field y conteniendo la siguiente expresión:

$duration = $node->field_audiofile[0]['data']['duration'];
return floor($duration/60).":".($duration%60);

Posiblemente hayan algunos contras en usar Dynamic Field en lugar de la alternativa de los templates. Quizás la cuestión de la performance. O que es php que se guarda en la base de datos y escapa del control de versiones. Pero en los pros, me parece que es una manera muy cómoda de hacerlo. Y, algunas veces queremos más comodidad de desarrollo que performance.

Tal vez, en el futuro, se pueda hacer que definiciones puedan ser hechas de este modo y se reflejen en disco en lugar de la base de datos, y así haya menos contras. Posiblemente eso también le ayude a módulos como Contemplate y CSS Injector.

Referencias:
Nota:
Dynamic Field no guarda los valores en la base de datos. Eso no es problema al presentar un nodo, pero campos así no pueden ser presentados en una vista. Para ese caso, puede usar Computed Field, que se usa de modo similar, pero permite guardar el resultado en la base de datos y asi tener los campos disponibles también para las vistas.

No hay comentarios:

Publicar un comentario

Más artículos