Quelle est la meilleure façon de supprimer un champ Drupal 7 d'un type de contenu défini via l'interface graphique? Je souhaite utiliser hook_update_N afin que les modifications puissent être propagées à plusieurs serveurs lors de l'exécution de update.php. Mais je n'arrive pas à trouver de solution. db_drop_table () aurait du sens pour moi pour les schémas personnalisés, mais pas pour un type / champ de contenu défini via l'interface graphique.
21
Réponses:
Il existe deux fonctions API pour supprimer des champs:
field_delete_field
Pour supprimer le champ entier (toutes les instances du champ)field_delete_instance
Pour supprimer uniquement une instance d'un champ - c'est ainsi qu'il est attaché à une entité.Si vous ne souhaitez pas réutiliser le champ, il peut être un peu plus propre de supprimer l'intégralité du champ au lieu d'en supprimer uniquement l'instance sur le type de contenu en question. Vous seul pouvez en être le juge.
la source
Oui, field_delete_instance () est la fonction pour supprimer les instances de champ.
Notez qu'il
field_delete_instance()
appelle automatiquementfield_delete_field()
s'il n'y a pas d'instances restantes, c'est doncfield_delete_instance()
probablement tout ce dont vous aurez besoin._update_7000_field_delete_instance()
est conçu pour les fonctions de mise à jour principales. Exemple: dans la fonction de mise à jourx_update_7000()
, vous utilisezfield_delete_instance()
. Ensuitex_update_7001()
, vous modifiez la{field_config}
table de manière incohérente etfield_delete_instance()
vous devez évidemment la modifier également.Mais
x_update_7000()
l'appel de nowfield_delete_instance()
entraînerait une erreur car la table est toujours dans l'ancienne structure. Cependant, la situation des modules contribués est différente, car ils doivent toujours être exécutés après toutes les mises à jour de base et doivent donc fonctionner avec la version de base la plus récente.Mais, c'est un modèle que vous voudrez peut-être utiliser pour vos propres fonctions API que vous utilisez dans les fonctions de mise à jour.
En outre, ces fonctions _update n'exécutent pas de hooks car le résultat n'est pas prévisible (par exemple, car le module pour lequel la mise à jour est exécutée peut être désactivé).
la source