drupal-header

Drupal 7: Crear nuevas acciones para Views bulk operations (VBO)

VBO se puede alimentar de acciones desde tres lugares distintos: De las acciones del sistema, de las acciones que uno crea con rules (vean http://nodeone.se/da/node/775) y las acciones creadas por módulos de terceros.

En este caso vamos a hacer lo tercero.

El caso ideal para crear una action propia es cuando necesitas flexibilidad total. En el ejemplo que voy a compartir necesitaba que la acción tuviera valores por defecto:
vbo custom admin settings form
Y un formulario para que el usuario pueda escribir algo distinto antes de realizar la acción:
vbo custom user settings form

Hagamoslo!

El caso de uso es el siguiente: tengo un view con VBO que tiene que poder hacer una solicitudes de información para cada uno de los nodos (productos), pero dando la oportunidad de que el usuario pregunte algo conciso.

Para esto, la implementación tiene 3 actores bien diferenciados:

  1. La acción
  2. El formulario de configuración que exponemos a la hora de configurar la acción en VBO
  3. El formulario que le mostramos al usuario para que pueda personalizar su solicitud

1: La acción:

Declarar una nueva action en Drupal es fácil, solo necesitas el hook_action_info() y una función que haga de action:

No voy a entrar en detalles porque pueden leer lo necesario en hook_action_info(). Solo comentar que hemos declarado una nueva acción que solo se puede usar en contenidos de tipo nodo, y que es configurable. Que sea configurable quiere decir que le vamos a proporcionar un formulario al usuario para que haga algo. En mi caso el formulario tiene un textarea para que nos diga sobre que quiere informarse.

2: El formulario para el administrador:

VBO nos proporciona el “HOOK_ACTION“_views_bulk_operations_form las comillas son porque no es estrictamente un hook tradicional, pero vamos, que usa el mismo patrón, solo que en lugar de usar el nombre del modulo como “HOOK”, usamos el nombre de la función de la acción. En este ejemplo el nombre de la acción es “mimodulo_send_solinfo_action“.

El resultado de este hook lo podemos ver cuando añadimos nuestra acción a las que va a tener un view (la primer imagen de este post).

3: El formulario para el usuario:

Como ya comenté antes, al declarar una acción, si esta lleva configuración (‘configurable’ => TRUE), tenemos que proporcionar un formulario. Para implementarlo es la mar de simple, solo tienes que tratarlo como un FAPI normal y tenes que tener el cuenta la forma en la que nombras el formulario HOOK_ACTION_form, su validacion HOOK_ACTION_validate y el submit HOOK_ACTION_submit.

En la declaración del formulario podemos ver que tenemos un parámetro “$context“. Bueno este parámetro contiene entre otras cosas, la configuración que hemos proporcionado en el momento que añadimos la action al view. Y la estamos usando para establecerle al usuario un valor por defecto.

Y ya está, tenemos una action que funciona.

Ah y acá está todo junto

Chau!