Interfaces administrativas de Drupal usando Views

Cuando comencé con Drupal, a mediados del 2007, una de mis primeras preguntas en el foro de drupal.org fue, ¿Cómo puedo agregar más filtros en la interfaz de administración de nodos? Lamentablemente no tuve respuesta en ese entonces, el issue sigue intacto y probablemente no cambie, para el que este interesado en la historia, aquí está el link: http://drupal.org/node/204654

Con el tiempo, y luego de aprender como funcionaba Drupal internamente, me di cuenta que eso simplemente no era posible. Tantas veces hemos escuchado hablar de la flexibilidad de este sistema, y eso simplemente no se podía.

Afortunadamente, la comunidad avanzó en este tema y si bien aún no es posible configurar mediante un par de clics que opciones ver a la hora de administrar contenido, hay algunas soluciones intermedias que permiten generar nuestras propias interfaces.

Para este artículo voy a explicar como mejorar notablemente la interfaz de administración de comentarios de Drupal. El procedimiento puede aplicarse para nodos y usuarios, pero los comentarios, por organización a nivel de base de datos, requieren de una configuración particular del módulo Views, y a fines educativos es más interesante.

En primer lugar, vamos a recordar como es la interfaz de administración de comentarios de Drupal.

Interfaz clásica de administración de comentarios de drupal

Las limitaciones más importantes que se observan son:

  • No se puede filtrar por fecha de publicación de comentario.
  • No se puede filtrar por tipo de contenido donde se hizo el comentario.
  • Y no se puede buscar una palabra en particular del asunto del mensaje

.

Para solucionar estos inconvenientes, vamos a construir una vista que liste los mismos elementos. Una vista es un listado de cualquier tipo de entidad de Drupal, en este caso, comentarios.

Para crear esta vista, es necesario el módulo Views, y su correspondiente interfaz de administración Views UI.

En admin/build/views, seleccionamos la pestaña “Add” para crear una nueva vista.

La primera interfaz nos solicita los datos básicos de la vista, el nombre, la descripción, y por sobre todo, la tabla base sobre la cual generar los listados.

Antes de continuar, es importante hacer una aclaración acerca de las tablas base. El módulo views necesita que se especifique una tabla sobre la cual se listaran los elementos, si seleccionamos la tabla “Node” listará todos los nodos del sitio, si seleccionamos la tabla User, listará los usuarios del sitio, y así para cada una de las tablas disponibles.

Algunos módulos proveen sus propias tablas para hacer listados, en particular el módulo Table Wizard permite generar vistas en base a cualquier tabla de la base de datos de nuestro sitio en Drupal. Pero eso es material para otro artículo.

Volviendo a nuestro trabajo, seleccionamos como tabla base, la tabla de Comentarios.

Agregar una nueva vista con tabla base Comentarios

Luego de presionar, Next, veremos la interfaz de configuración de la vista, vamos a comenzar por los campos a mostrar, e iremos avanzando paso a paso hasta lograr el listado que esperamos.

La sección Fields.

Cuando se construye una vista, existen dos formas de mostrar los elementos, la primera es utilizando el formato estándar de la entidad, esto es, si listamos nodos, la vista mostrará los nodos (en formato completo o en su versión resumida). La otra forma es utilizando Fields. Esta opción permite listar solo algunos elementos del nodo, el comentario, el usuario o lo que fuese que estamos listado.

Por defecto, views esta configurado para usar Fields, eso puede cambiarse desde la opción Row Style, pero para nuestro propósito, esto no es necesario.

Ahora bien, en la sección de Fields, vamos a ir agregando los campos que queremos mostrar en nuestra vista. Por ahora agregaremos, el asunto del comentario, el autor ,la fecha de publicación, y un link para editar el comentario. Tal como provee drupal la interfaz.

El mecanismo básico para agregar un nuevo campo a la vista es hacer clic en el icono con un signo + en la sección field, y seleccionar el campo que nos interese.

Agregar un nuevo campo a la vista

Luego, por cada campo, tendremos ciertos valores para configurar, por ejemplo, el link del asunto, permite indicar si ese texto debe o no ser un link que apunte al comentario.

Una vez agregados los campos, veremos algo como esto:

Estilo de la vista sin formato

Esto sucede porque el estilo de la vista está definido como Unformatted, en la sección Style, podemos indicar que queremos que nuestra vista sea del tipo Table, y pasaremos a ver nuestro listado como sigue:

Vista en formato tabla

Un campo que nos está faltando es el de el nodo donde fue publicado el comentario. Si revisamos la lista de opciones de campos veremos que no se encuentra ninguna opción que diga algo como Node: Title. Esto se debe principalmente a que la tabla {comments} donde están listados los comentarios, no posee ningún campo que haga referencia al titulo del nodo donde fue publicado el comentario.

Para quienes conozcan un poco del lenguaje SQL, obtener el título del nodo require de hacer un JOIN entre la tabla {comments} y la tabla {node}. El modulo Views maneja el concepto de JOINS bajo el nombre de Relationships o Relaciones.

La sección Relationships.

Como ya se explicó en otra ocasión, las relaciones en views permiten obtener datos de varias tablas para generar un listado.

En nuestro caso, nos interesa agregar la relación desde el Comentario al Nodo donde fue publicado el mismo. De la misma forma que agregamos un field, podemos agregar una relationship a la vista.

Luego de seleccionar Comment: Node, la interfaz nos preguntará si queremos que esta relación sea o no requerida. Esto en lenguaje SQL significa si queremos un INNER JOIN o un LEFT JOIN, y en un lenguaje más cotiano significa si cada Comentario “puede tener” (left join) o siempre tendrá (inner join) un nodo en donde haya sido publicado. Como es de esperar, cada comentario será publicado en un nodo en particular, por lo cual marcaremos la opción “Require this relathionship”

Definir la relacion entre la tabla Comment y la tabla Node

Hecho esto, en la sección Fields, aparecerán disponibles una nueva serie de campos que hacen referencia al nodo donde fue publicado el comentario, seleccionaremos entonces Node: Title.

Cabe preguntarse porque razón no fue necesario crear una relación con la tabla {user} después de todo, el nombre del usuario no está definido en la tabla de comentarios. Si bien esto no es del todo cierto (los nombres de los usuarios de los comentarios anónimos se guardan en la tabla de comentarios) lo cierto es que el desarrollador de Views dejó ya prevista ciertas relaciones que se generan de forma automática para evitar el trastorno de crear una nueva relación. Cosas que pasan...

La sección Filters.

Ya con nuestro listado funcionando, es hora de aplicar algunos filtros. Los filtros son la forma que tiene views de limitar los elementos a listar. En nuestro caso nos interesa que de todos los comentarios que se listan, solo figuren aquellos que fueron aprobados, o dicho de otro modo, que aún no están en la cola de moderación.

El filtro que nos interesa en particular es el Comment: In moderation, que debemos indicar como No, esto se lee, el comentario no está pendiente de moderación, o dicho de otra forma, el comentario puede leerse en el sitio.

Otra vez, el proceso para agregar un filtro es igual que un campo o una relación, clic en el signo + y configurar las opciones del filtro.

Además de este filtro, nos interesa que el usuario que use la vista pueda aplicar sus propios filtros. Estos filtros se denominan filtros expuestos, y la mayoría de los filtros que provee views pueden funcionar como filtros expuestos.

Vamos a explicar como funciona esto de los filtros expuestos usando como ejemplo el titulo del comentario. La idea es que el usuario pueda especificar una parte del asunto del comentario y el listado se filtre mostrando solo aquellos comentarios que contienen esa palabra.

El procemiendo es el mismo, agregamos el filtro Comment: Title, pero en esta ocasión, presionaremos el boton que dice “Expose”.

Convertir un filtro comun en un filtro expuesto

Esto dará lugar a toda una serie de nuevas opciones de configuración. Las que nos interesan a nosotros son:

  • Operator: Contains. Que hace que el operador por defecto sea: El Titulo “contiene” esta palabra
  • Optional: Marcar este checkbox: Que hace que el filtro no sea obligatorio.
  • Unlock Operator: Que le da la opción al usuario de elegir entre “Contiene”, “No Contiene”, “Comienza con”, etc.

Opciones de configuración para el filtro expuesto

Con esto, configurado, luego de aplicar guardar, veremos en la vista previa de nuestro listado un nuevo campo de texto donde el usuario puede ingresar el título. La siguiente captura muestra ya todos los filtros expuestos configurados.

Filtros expuestos ya configurados

La sección Sort.

No hay mucho para decir acerca de como ordenar el listado. En principio, simplemente por fecha de publicación del comentario en forma descendente.

Sin embargo, hay un asunto más para destacar sobre el orden del listado. Las vistas con estilo Table, permiten definir un sistema dinámico de ordenamiento. Esto se configura presionando el boton con el signo de engranage de la sección: Style.

Configurar el estilo de tipo tabla

Que nos lleva a la siguiente interfaz, en donde se puede configurar que columnas pueden ser ordenables por el usuario cuando se presiona su encabezado.

Ordenamiento de la tabla

Las opciones básicas de configuración.

Una vez definidos los elementos generales del listado falta definir:

  • Título: Comentarios
  • Items por página: 25
  • Acceso: Por permisos: Adminster Comments.
  • Paginador: Si, utilizar Full Pager.

Todas estas opciones se definen en Views 2 desde la sección Basic Settings.

Es de vital importancia recordar asignar correctamente el nivel de acceso a la vista, sino cualquier usuario podría borrar todos los comentarios de su sitio.

Opciones bpasicas del listado, números de página, control de acceso, título, etc

Operaciones sobre los comentarios.

Algo importante está faltando en este sistema, la posiblidad de seleccionar con un checkbox cada uno de los comentarios y aplicarle operaciones a los mismos.

Para poder hacer eso, es necesario el módulo Views Bulk Operations. Una vez instalado, aparecerá entre las opciones de Style, la opción Bulk Operations.

 Bulk Operations

Si uno investigara el código de Views Bulk Operations (comunmente llamado VBO), notaría que este estilo hereda todas sus características del estilo de tipo Table, por lo que la vista se verá como una tabla, con checkboxes en su primer columna.

VBO permite definir una serie de operaciones a aplicar sobre las entidades seleccionadas, en nuestro caso nos interesan:

  • Delete comment (views_bulk_operations_delete_comment_action)
  • Unpublish comment (comment_unpublish_action)

Seleccionadas estas dos opciones aparecerán en la vista previa una serie de operaciones para aplicar a los elementos selecciondados de la vista.

Views Bulk Operations en funcionamiento

Agregando un display.

Bien, todo configurado, pero surge una pregunta. ¿Donde van a ver los usuarios este listado?

Para que la vista sea accesible, necesitamos definir un display del tipo Page. Esto generará una url para que los usuarios puedan acceder a la vista creada.

En la sección derecha de la interfaz de configuración, seleccionar el display del tipo Page y hacer clic en el botón agregar.

Agregar un display del tipo página

Los display del tipo Página permite definir dos cosas, el path (o sea la dirección web desde donde el usuario accederá a la vista) y opcionalmente un Menú.

Una limitación importante es que no se pueden definir, para los display del tipo page, un path que ya esté definido por otro módulo. A decir verdad, poder se puede, pero simplemente será mostrada la otra ruta. Eso deja fuera la opción de definir admin/content/comment como ruta, y optaremos por algo como admin/content/comments (con una s de más).

Para el menú, puede elegir algo como Administrar comentarios y ponerlo en la barra de navegación, o donde usted desee utilizando el editor de menús de Drupal.

Y eso es todo, haga clic en guardar y podrá administrar sus comentarios desde una interfaz más robusta y flexible.

En un próximo artículo veremos como mejorar algunos aspectos de este listado, como por ejemplo, usar un calendario tipo popup para las fechas, o reducir la cantidad de opciones del filtro Título. Así como también como sobreescribir el path admin/content/comment para evitar duplicar interfaces administrativas. Hasta la próxima!

Comentarios

la verdad es que no me gusto mucho usar lo que es Drupal, no se siento que es algo pesado y lento y las opciones no son del todo lo que el usuario pide, por ejemplo el hecho de que hay que usar plantillas predeterminadas.