Drupal, Quitar fields de un Content Type

Obviamente que usando el editor de content types en drupal es muy sencillo agregar o quitar fields de una manera visual, pero eso no nos sirve cuando trabajamos en equipo y tenemos multiples entornos.

Sabido también es que features es nuestro aliado para estos casos en Drupal 7, el gran problema que tiene es que feature es muy piola para fields nuevas pero no tanto para eliminar fields que no usamos mas, features no tiene forma de saber que una field debe ser borrada en otro entorno. Por esto es que si queremos eliminar fields de un content type debemos hacerlo via código con un hook_update.

El código para borrar una field es bien sencillo, sería algo asi.

  if (field_info_field('field_my_field_name')) {
    field_delete_field('field_my_field_name');
  }

Eso hará el trabajo, peeeeeero, tengan en cuenta que una field posee instancias, y por cada content type que la utiliza (recuerden que las fields se pueden reutilizar) existe una instancia. El problema del snippet anterior es que al borrar la field la borra de todos los content types y tal vez nosotros solo deseemos borrar la field de un solo content type. Si este es su caso el sinnipet a utilizar es el siguiente

  if ($instance = field_info_instance('node', 'field_my_field_name', 'node_type_name')) {
    field_delete_instance($instance);
  }

Esto eliminará la field field_my_field_name del tipo de contenido node_type_name. Si otro content type utiliza field_my_field_name la tendrá disponible. Si nadie mas utiliza la field esta será eliminada por completo.

Recomendación, utilicen siempre el segundo caso dado que con este no hay forma de equivocarse y borrar una field en otro content type accidentalmente.

Mas info en

https://api.drupal.org/api/drupal/modules%21field%21field.crud.inc/function/field_delete_instance/7

Share

Leave a Reply

Your email address will not be published. Required fields are marked *