Hero

Como borrar un entity field desde código en Drupal 7

Marzo 08, 2014

enzo
Drupal
Desarrollo de Modulos

En algunas ocasiones en nuestro proceso de desarrollo y paso a producción creamos campos en nuestros tipos de contenido, que posteriormente han de ser borrados.

Por supuesto esta seria una tarea muy simple si tuviéramos acceso al ambiente de producción, pero este no es el caso siempre.

Para solventar este problema debemos hacer uso de las funciones ejecutadas cuando se corre el proceso de update.php y de esta forma el proceso de borrado queda documentado.

  1. Implementar función del update.

Debemos implementar el hook_update_N() como se muestra a continuación.

/**
 * Explicación de lo que hace este update
 */
function MIMODULO_update_7100 () {
  //CODE
}

El comentario es lo que se mostrara al ejecutar el update.php al administrador del sitio.

El doble asterisco en la primera linea es requerido, sino no tiene doble asteriscota el mensaje no sera desplegado.

Se preguntaran como me invento el numero 7100, no es un invento y tiene su lógica dejenme desglosarlo.

  • 7: Se refiere a la función de Drupal seria 6 si el módulo es para Drupal 6.
  • 1: Se refiere a la versión del módulo para la que aplica el update si el modulo es versión 2.2-dev entonces debería ser un 2.
  • 00: Ser refiere al consecutivo de updates para la versión de este modulo, en la tabla system se guarda el ultimo update aplicado, si se agrega un numero menor al ultimo aplicado esta función sera ignorada.
  1. Borrar en entity field.

Ahora solo resta agregar el código para borrar el field que llamaremos field_product_images y el implementación se muestra a continuación.

/**
 * Explicación de lo que hace este update
 */
function MIMODULO_update_7100 () {
  field_delete_field('field_product_images');
  field_purge_batch(10);
}

Como se puede apreciar hago uso de la función field_delete_field() pero esta función lo que hace es marcar el field para borrado, pero no lo borra directamente. El proceso de borrado se ejecutara en la siguiente ejecución del cron.

Pero si no tenemos tiempo para esperar a que el siguiente cron se ejecute podemos usar la función field_purge_batch() que borra los archivos que estén pendientes de borrar.

Espero que haya sido de su agrado.

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.