Algunas adaptaciones a la plantilla de Omeka “Dublin”

Hace poco hice algunas modificaciones a la plantilla Dublin de Omeka con dos propósitos: crear un “botón” para ordenar los elementos por fecha (Dublin Core – Date) y mostrar las fechas en la navegación de los elementos entre el extracto de la descripción y las etiquetas. Después de actualizar a la nueva versión de Omeka 2.5.1 se borraron todos los cambios y de ahí la decisión de hacer los cambios en un “tema hijo”.  Para los interesados subí el tema a Github para que cualquiera pueda usarlo a su gusto, lo pueden consultar o descargar en https://github.com/jairomelo/Omeka-theme-fichero-.

Explicaré los cambios que realicé a la plantilla:

Traducción del archivo config.ini

No era necesario realmente, pero me parece que puede ser útil ya que no existe ninguna plantilla en español y algunos de los textos de la plantilla no están traducidos desde el archivo ../aplication/languages/es.mo. Uno de esos es el formulario de configuración cuyo contenido está en el archivo config.ini. Finalmente el archivo quedó así:

[config]

; Logo
logo.type = "file"
logo.options.label = "Logo"
logo.options.description = "Elige un archivo de logotipo que reemplazará el título de la cabecera del tema. El tamaño máximo recomendado es de 500px."
logo.options.validators.count.validator = "Count"
logo.options.validators.count.options.max = "1"

; Header Background Image
header_image.type = "file"
header_image.options.label = "Imagen de cabecera"
header_image.options.description = "Escoge un archivo de imagen para mostrar debajo de la cabecera del tema. El tamaño recomendado es de 100px."
header_image.options.validators.count.validator = "Count"
header_image.options.validators.count.options.max = "1"

display_featured_item.type = "checkbox"
display_featured_item.options.label = "Elemento destacado"
display_featured_item.options.description = "Marca esta casilla si deseas mostrar el elemento destacado en la página de inicio."
display_featured_item.options.value = "1"

display_featured_collection.type = "checkbox"
display_featured_collection.options.label = "Mostrar colección destacada"
display_featured_collection.options.description = "Marca esta casilla si deseas mostrar la colección destacada en la página de inicio."
display_featured_collection.options.value = "1"

display_featured_exhibit.type = "checkbox"
display_featured_exhibit.options.label = "Mostrar exhibición destacada"
display_featured_exhibit.options.description = "Marca esta casilla si deseas mostrar la exhibición destacada en la página de inicio."
display_featured_exhibit.options.value = "1"

homepage_recent_items.type = "text"
homepage_recent_items.options.label = "Elementos al inicio"
homepage_recent_items.options.description = "Escoge cuántos elementos deseas mostrar en la página de inicio."
homepage_recent_items.options.maxlength = "2"

homepage_text.type = "textarea"
homepage_text.options.label = "Texto de la página de inicio"
homepage_text.options.description = "Añade el texto que quieras para la página de inicio."
homepage_text.options.rows = "5"
homepage_text.options.attribs.class = "html-input"

footer_text.type = "textarea"
footer_text.options.label = "Texto del pie de página"
footer_text.options.description = "Añade algún texto que quieras mostrar en el pie de página del tema."
footer_text.options.rows = "5"
footer_text.options.attribs.class = "html-input"

display_footer_copyright.type = "checkbox"
display_footer_copyright.options.label = "Mostrar derechos de autor al pie de página"
display_footer_copyright.options.description = "Selecciona esta casilla si deseas mostrar la información de derechos de autor en el pie de página de tu sitio."

use_advanced_search.type = "checkbox"
use_advanced_search.options.label = "Usar búsqueda general avanzada"
use_advanced_search.options.description = "Selecciona esta casilla si deseas permitir a los usuarios realizar búsquedas en la totalidad del sitio (ejemplo: elemento, colección, archivo) y escoger su método Booleano de búsqueda."
use_advanced_search.value = "1"

[groups]

head_foot.options.legend = "Header and Footer"
head_foot.elements[] = "logo"
head_foot.elements[] = "header_image"
head_foot.elements[] = "footer_text"
head_foot.elements[] = "display_footer_copyright"
head_foot.elements[] = "use_advanced_search"

homepage.options.legend = "Homepage"
homepage.elements[] = "display_featured_item"
homepage.elements[] = "display_featured_collection"
homepage.elements[] = "display_featured_exhibit"
homepage.elements[] = "homepage_recent_items"
homepage.elements[] = "homepage_text"

[plugins]

; Exclude fields from plugins, if they wish.
exclude_fields = "display_featured_item,display_featured_collection,display_featured_exhibit,homepage_recent_items,homepage_text"

 

Crear botón para ordenar por DC Date

Las dos adaptaciones fueron hechas en el archivo ../themes/fichero/items/browse.php (“fichero” es el nombre que le puse a mi copia del tema Dublin). La función encargada de ordenar los elementos es $sortLinks. La plantilla Berlin permite ordenar por tres opciones: Título, creador y fecha de creación. En mi caso modifiqué estas opciones para en lugar de ordenarla por creador hacerlo por “lugar” (DC Spatial Coverage) y añadir la opción de ordenar por “fecha” del elemento (DC Date). El código quedó simplemente así:

<?php
$sortLinks[__('Título')] = 'Dublin Core,Title';
$sortLinks[__('Lugar')] = 'Dublin Core,Spatial Coverage';
$sortLinks[__('Fecha de creación')] = 'added';
$sortLinks[__('Fecha del elemento')] = 'Dublin Core,Date';
?>

El resultado como verán es exitoso:

 

Mostrar la fecha en la navegación

Encontrar cómo hacer este cambio fue un poco más complicado y de hecho no creo que haya sido la manera más “elegante” de hacerlo, pero el resultado es aceptable a mi modo de ver. Para mostrar los elementos la plantilla utiliza un loop <?php foreach (loop('items') as $item): ?>; dentro de las opciones de ese loop se encuentra lo que se muestra en la navegación: el título, la imagen del archivo, un extracto de la descripción y las etiquetas. Lo que hice fue sencillamente crear una nueva opción que mostrara la fecha. Después de la descripción puse:

<?php if ($date = metadata('item', array('Dublin Core', 'Date'))): ?>
    <div class="item-description">
        <?php echo $date; ?>
    </div>
<?php endif; ?>

Como ven es un código simple. En primer lugar uso la sintaxis de la plantilla original con  una sentencia if - endif. Luego incluyo la función $date (que yo creé) y en ella uso la funcion metadata para hacer una lista o array del Dublin Core – Date de cada elemento. Este array se almacena en la función $date que luego “imprimo” en un div que “presto” de la descripción. Ahora cada vez que navego por los elementos o hago búsquedas desde el formulario de búsqueda avanzada puedo ver las fechas de cada elemento. Un  código sencillo y funcional que puede ser adaptado en el futuro.

 

 

Omeka S v1.0.0-beta2 – Por fin instalado :)

Después de un trimestre de frustración ¡por fin pude instalar Omeka S! Como la mayoría de las veces la solución era tan simple que logra que la impotencia se transforme en risa. En mi caso (el servidor está gestionado por la compañía ehost) sólo tuve que cambiar la versión de php en el archivo .htaccess de la raíz de archivos:

# Use PHP5.6
AddHandler application/x-httpd-php56 .php

 

Después de hacerlo todo empezó a correr perfectamente.

La instalación (les quedo debiendo los pantallazos porque estaba ansioso por saber si funcionaría :p ) es muy simple. Permanece la necesidad de modificar el archivo database.ini que se encuentra en la carpeta ../config/

Si todo sale bien simplemente aparecerá una pantalla con las opciones de configuración inicial: correo electrónico, contraseña y nombre del usuario administrador, y un título del sitio más la configuración del área local. Inmediatamente nos obligará a volver a ingresar al sitio y comprobar que todo está bien.

Al ser una plataforma beta aún hay muchos aspectos que requieren desarrollo, en especial los módulos, temas y lenguajes, existen todavía muchos problemas que sobrepasan al equipo de desarrolladores y voluntarios por lo que estamos aún lejos de una versión definitiva, ¿qué tan lejos? dificil saberlo. Por lo pronto seguiré probando la plataforma y para aquellos interesados en seguir el sitio de pruebas pueden visitarlo en el siguiente enlace: http://hdlatam.org/omeka-s/

Construí dos repositorios de prueba, uno llamado “Constituciones hispanoamericanas siglo XIX” (un título más ambicioso que real :p ) y otro con algunos documentos del fondo José María Cavadas Dávalos, digitalizado por la bilbioteca del  Colegio de Michoacán. El primero tiene asignada la plantilla “Center Row” y el segundo “Cozy” que está basada en el tema default de Omeka S, como verán, cada tema tiene sus fallas y sus ventajas.

Gradualmente escribiré algunos aspectos sobre la estructura de la base de datos mientras explore un poco más la plataforma. Cualquier asunto que quieran compartir con gusto los esperaré en la sección de comentarios o aun mejor en el área de foros del grupo “experimentos” en Cibercliografía.

Omeka S (Beta) – Revisión de la versión

Omeka se ha convertido en una de las opciones para exhibición de archivos más importante en el mundo de las humanidades y la historia digital, a pesar de su infraestructura un tanto extraña (como el hecho de almacenar todos los datos en formato de texto) Omeka es una plataforma dinámica, sencilla y sobre todo, enfocada en las necesidades de las ciencias humanas.

Hace dos días (01/11/2016) fue lanzada la versión 1.0.0 Beta y ya se han corregido algunos bugs hallados por los usuarios.

En primer lugar hay que apuntar que esta nueva versión consiste en el lanzamiento de una nueva plataforma; es decir no se podrá actualizar desde la versión 2.4.1 de Omeka ya que son dos arquitecturas diferentes. En el post de Sharon Leon en el blog de Omeka dice: "Though Omeka S is a completely new software package,  it shares the same goals and principles of Omeka Classic that users have come to love." Así que para aquellos usuarios de Omeka Classic queda la opción de mantener la plataforma original o intentar trasladar la información al nuevo ambiente. Queda aún la opción de un módulo que permita "empaquetar" la información, así sea de manera parcial, y exportarla a Omeka S, pero esto es por lo pronto sólo una idea sin mucho desarrollo.

Las ventajas de Omeka S sobre el ahora Omeka Classic son, según los desarrolladores:

  • La creación de muchos sitios a partir de una sola instalación. Sin duda una gran ventaja para los proyectos e instituciones que necesiten construir una serie de proyectos sin tener que realizar instalaciones individuales para cada uno, es sin duda un ahorro en tiempo, espacio en bases de datos y archivos. En este sentido se puede construir una red de sitios en lugar de un conjunto de exhibiciones.
  • La publicación de elementos se hace mediante Linked Open Data, es decir, que los elementos publicados en una exposición pueden ser enlazados a otros y enriquecidos.
  • La descripción de los items puede hacerse mediante el estándar de la Digital Public Library of America (la relación con Dan Cohen sin duda está presente en esta utilidad)
  • Se modificó la "extensión" de Omeka por medio de plugins, ahora se realiza mediante módulos que buscan conectar elementos "externos" a la aplicación de Omeka.
  • Temas adaptables a dispositivos móviles.

El siguiente video (en inglés) muestra de una manera más detallada las funcionalidades de la nueva plataforma.

 

La versión aún es Beta, por lo que es de esperar la aparición de una versión final para utilizarla en proyectos. Por lo pronto es útil jugar con la aplicación, tratar de instalarla (yo aún no he tenido éxito :p ) y retroalimentar al equipo con errores encontrados en el proceso. Si logro instalar la plataforma en algún momento comentaré mis impresiones al respecto.

Probando Open Journal System 3.0

Desde hace algunos meses el Public Knowledge Project (PKP) anunció una actualización mayor de la famosa plataforma de gestión de revistas científicas Open Journal Systems (OJS), la cual prometió ser una transformación radical de la interfaz de la plataforma para hacerla más amigable a los usuarios. Después de varios años de “sufrir” OJS en su versión 2.x la mejora en el entorno gráfico es evidente, desde el mismo panel de instalación y administración es notable el cambio. También es interesante que se haya creado un “asistente de ajustes” para completar los requerimientos de cada revista (que en 2.X tenía que configurarse en diferentes pantallas). En este punto tuve algunos problemas para subir las imágenes en la pestaña “Apariencia”, aunque puede ser porque lo estoy probando desde una instalación local, espero probar su comportamiento en el servidor de Cibercliografía para comprobar si es un problema de la instalación o corresponde a un bug de la plataforma.

Les dejo entonces unos cuantos pantallazos de mi primera impresión con OJS 3.0.0:

Lo primero que llama la atención es el cambio del entorno gráfico, una mejora significativa según mi punto de vista:

Captura de pantalla 2016-09-01 14.27.02

Los pasos de la instalación son los mismos que tenía la versión 2.X pero con la opción de seleccionar el lenguaje desde el inicio, lo cual es una ventaja al momento de crear las revistas.

Captura de pantalla 2016-09-01 14.28.08

El formulario de creación de la revista es similar al de la versión 2.X pero con una nueva interfaz. La mayoría de formularios ahora se presentan en ventanas y no en páginas.

Captura de pantalla 2016-09-01 14.57.37

La configuración de la revista se realiza ahora desde una ventana desplegable con pestañas, este viene a reemplazar la página de configuración en cinco pasos de la versión 2.X

Captura de pantalla 2016-09-01 14.27.02.fw
Click en la imagen para ampliar

 

También es una mejora importante que los campos de texto incluyen un editor WYSIWYG y con ello se puede enriquecer la presentación de la información de la revista un poco más. Por ejemplo, en la presentación del Comité Editorial ya no se tiene que crear agregando los perfiles de cada miembro, ahora se pueden insertar como texto y con algo de inventiva se pueden incluir las fotos, enlaces y más información de cada participante del comité.

Captura de pantalla 2016-09-01 15.18.14

Lastimosamente la plataforma colapsó y con ella el editor WYSIWYG de las pestañas de configuración :\ Al parecer un problema con el script para subir archivos (que funciona en el editor HTML pero no para los botones de la pestaña “Apariencia”).

Captura de pantalla 2016-09-01 15.22.07

También tuve algunos problemas con la carga de algunos scripts en la pestaña “Propuesta”. Sospecho que es un problema con la librería Bootstrap en la que se basan las nuevas plantillas de OJS [link]. Al final se “quebró” la plantilla (como verán el mensaje no es de conexión con el servidor) y finalicé mi prueba con algo de decepción.

Captura de pantalla 2016-09-01 15.23.02

Así que mi siguiente paso será instalar OJS en el Webserver de cibercliografía y probar su funcionamiento. ¿Alguien más ya probó la versión 3.0.0 de OJS? ¿Cuáles son sus impresiones?

Listado de nombres con MySQL y PHP

Como comenté en un post previo tenía la necesidad de crear un programa que me ayude a desplegar un listado de nombres que estoy almacenando en `omeka_element_texts`. Después de un tiempo he logrado un listado primitivo pero funcional, que quiero mejorar de alguna manera en otro fin de semana 🙂

Por lo pronto les presento este pequeño programita para Omeka:

En primer lugar, los nombres están almacenados, individualmente, en una fila identificada con el `element_id` número 238, por lo cual puedo realizar una búsqueda sencilla en SQL para encontrar todos los nombres:

SELECT * FROM `omeka_element_texts` WHERE `element_id` = 238

Captura de pantalla 2016-08-15 21.43.15

Ahora, lo que pretendo no es tener que hacer esta consulta cada vez que quiera revisar el listado de nombres, pero tampoco tengo el tiempo para trabajar en un plugin, así que lo que hice fue un sencillo programa que corre directamente en mi servidor local:

<?php
$servername = "localhost";
$username = "root";
$password = "xxxxxx";
$dbname = "xxxxx";

// conectar con db
$conn = new mysqli($servername, $username, $password, $dbname);
// comprobar conexión
if ($conn->connect_error) {
     die(":\ Falló la conexión: " . $conn->connect_error);
}

//criterios de búsqueda - Añadí un criterio de ordenación ascendente para una mejor presentación de la información

$sql = "SELECT * FROM `omeka_element_texts` WHERE `element_id` = 238 ORDER BY `text` ASC";
$result = $conn->query($sql);

//resultados
echo nl2br ("Listado de nombres: \n <br />");

if ($result->num_rows > 0) {
     // extraer datos de cada columna
     while($row = $result->fetch_assoc()) {
         echo " * <a href='http://localhost/fichero/items/show/".$row ['record_id']."' target='blank'>".$row  ['text']."</a> <br />";
     }
} else {
     echo "0 results";
}

//cerrar la conexión
$conn->close();
?>

El código para este programa lo tomé del sitio W3Schools, allí se explica mejor e incluso se dan algunos consejos para  mejorar la presentación de los datos.

Para finalizar, los datos se presentan en un archivo HTML plano. En un próximo ejercicio mostraré una manera de exportarlos a un formato *.csv con el que pueden ser analizados en una hoja de cálculo tradicional.

Captura de pantalla 2016-08-15 22.02.21

Editar el DublinCore en Omeka

Por un tiempo estuve buscando la manera de editar el Dublin Core en varias entradas de foros de Omeka sin encontrar una solución sencilla. Después de “quebrar” la base de datos varias veces encontré que la solución es más sencilla de lo que pensaba.

La lógica para almacenar la información de cada elemento del Dublin Core en Omeka es relativamente sencilla, se basa en dos tablas: omeka_elements_sets y omeka_elements.

img1

 

En la primera tabla se define el estándar de metadatos, en este caso DublinCore. La segunda incluye cada uno de los elementos del estándar, por ejemplo “título”, “descripción”, “autor”, “contribuidor”, etcétera. Modificar cualquiera de estos elementos creará de inmediato un error al momento de desplegar el formulario para crear un nuevo ítem por lo que la mejor estrategia es crear un nuevo elemento en el estándar de metadatos.

DublinCore es un identificador de objetos digitales, pero no permite insertar categorías que no se relacionan tanto con el objeto como su contenido, por ejemplo “nombre”, “oficios”, “comentarios”, ente otros. En este sentido, necesito insertar un campo en mi formulario que corresponda a nombre y que pueda presentarlo cada uno de manera independiente para luego poder relacionarlos o hacer un índice onomástico (comming soon :p ), para ello necesito que cada nombre esté contenido en una fila específica y se encuentre asociado a un elemento particular.

Para eso utilizo el siguiente script:

INSERT INTO
  `omeka_elements`(`id`, `element_set_id`, `name`, `description`,`comment`)
VALUES(NULL,'1',NULL,'Nombres','En este fila agrego los nombres que aparecen mencionados o con los cuales se relaciona el ítem',NULL);

Al aplicarlo correctamente aparecerá inmediatamente en el formulario para agregar nuevos ítems el campo que insertamos:

Captura de pantalla 2016-08-11 16.18.25
Click en la imagen para ampliar

 

Y como se observa en el siguiente ejemplo ¡funciona!

Captura de pantalla 2016-08-11 16.18.14

Es de aclarar que Omeka permite insertar metadatos desde ../admin/item-types, por lo que esta modificación del DublinCore es recomendable en tanto se requiera insertar un elemento en prácticamente todas las entradas.

 

Presentación

Esta sección se alimenta de pequeños experimentos, o hacks en su acepción más amplia y positiva, elaborados para resolver problemas puntuales en el uso de programas, software y plataformas, así como por simple curiosidad. Por ello el subtítulo de la sección es “historiadores jugando con el código”, ya que lo que queremos es compartir con todos los juguetes informáticos que nos son útiles para la investigación y la forma como los adaptamos, rompemos y arreglamos.

Como estos ejercicios no siguen un orden estructurado se insertarán en forma de blog para facilitar la organización por medio de categorías y etiquetas.

Como siempre, invitamos a todos aquellos interesados en compartir sus “juguetes” con cibercliografía para que se comuniquen con nosotros y los integremos al sitio.

Abrir la barra de herramientas