¿Cuál es la mejor manera de eliminar un campo Drupal 7 de un tipo de contenido definido a través de la GUI? Quiero usar hook_update_N para que los cambios se puedan propagar a varios servidores al ejecutar update.php. Sin embargo, parece que no puedo encontrar una solución. db_drop_table () tendría sentido para mí para esquemas definidos personalizados, pero no para un tipo / campo de contenido definido a través de la GUI.
21
Respuestas:
Hay dos funciones de API para eliminar campos:
field_delete_field
Para eliminar todo el campo (todas las instancias del campo)field_delete_instance
Para eliminar solo una instancia de un campo, que es cómo se adjunta a una entidad.Si no desea reutilizar el campo, puede ser un poco más limpio eliminar todo el campo en lugar de eliminar solo la instancia del tipo de contenido en cuestión. Solo tú puedes ser el juez de eso.
fuente
Sí, field_delete_instance () es la función para eliminar instancias de campo.
Tenga en cuenta que
field_delete_instance()
llama automáticamentefield_delete_field()
si no quedan instancias restantes, porfield_delete_instance()
lo que probablemente sea todo lo que necesitará._update_7000_field_delete_instance()
está diseñado para funciones de actualización principales. Ejemplo: en la función de actualizaciónx_update_7000()
, está utilizandofield_delete_instance()
. Luegox_update_7001()
, en , cambia la{field_config}
tabla de una manera inconsistente yfield_delete_instance()
obviamente también debe cambiarse.Pero ahora
x_update_7000()
la llamada afield_delete_instance()
resultaría en un error porque la tabla todavía está en la estructura anterior. Sin embargo, la situación para los módulos contribuidos es diferente, ya que siempre deben ejecutarse después de todas las actualizaciones principales y, por lo tanto, deben funcionar con la versión principal más reciente.Pero, este es un patrón que es posible que desee utilizar para sus propias funciones API que está utilizando en las funciones de actualización.
Además, estas funciones _update no ejecutan enlaces porque el resultado no es predecible (por ejemplo, porque el módulo para el que se ejecuta la actualización podría estar deshabilitado).
fuente