Supposons que j'ai un type de contenu Person
avec des champs: Name
, Age
,Email
Ce type de contenu est contrôlé par une fonctionnalité appelée test
afin que je puisse le contrôler à la source et le pousser vers le site en direct.
Mon flux de travail se présente comme suit:
- J'ajoute un nouveau champ sur
Person
appeléPhone
- localement je fais:
drush fu test -y
- J'édite le
test.info
pour augmenter le numéro de version - Je valide les modifications dans mon référentiel
- Je pousse la fonctionnalité sur le site en direct (copie les fichiers de fonctionnalité)
- sur le site en direct je fais:
drush fr test -y
- sur le site en direct je fais:
drush cc all
Ensuite, le nouveau champ apparaît sur le site en direct Person
.
Si lors de la première étape, je supprime un champ, Person
le champ ne sera pas supprimé du site en direct. Comment résoudre ce problème? Je ne veux pas avoir à le supprimer manuellement de l'interface utilisateur sur le site en direct.
Ce flux de travail est-il correct?
Réponses:
C'est une épée à double tranchant, c'est comme ça pour empêcher la suppression des données ce qui est toujours une bonne chose. Il n'y a vraiment rien à résoudre, c'est un comportement attendu.
C'est le même flux de travail que nous utilisons et faisons depuis plus d'un an et cela fonctionne très bien. Je dirais que c'est correct mais c'est une réponse très subjective.
la source
drush field-delete field
La bonne façon de supprimer le contenu créé par les fonctionnalités est via hook_update_N (qui doit être implémenté dans le fichier
your_module.install
).L'idée principale avec les fonctionnalités est de gérer la configuration avec du code. L'utilisation
hook_update_N
est cohérente avec cela, car la suppression du champ est dans le code (qui peut être géré avec le contrôle de version) - tandis que la commande équivalentedrush field-delete field
n'est pas appelée à partir du code géré; il s'agit d'une étape de ligne de commande distincte que vous devez effectuer (et ne pas oublier d'effectuer).la source
drush field-delete field
fonctionnera pas bien?hook_update()
est cohérente avec cela, car la suppression du champ est dans le code (qui peut être géré avec le contrôle de version) - alors que la commande drush n'est pas appelée à partir du code managé; il s'agit d'une étape de ligne de commande distincte que vous devez effectuer (et ne pas oublier d'effectuer).hook_update_N
.Créez un nouveau fichier appelé "your_feature_name.install"
Dans le fichier déclarez hook_update_N , vous pouvez utiliser field_delete_field () et spécifier le nom du champ que vous souhaitez supprimer comme paramètre.
Exécutez update.php et les champs seront supprimés.
la source
Si vous utilisez
field_phone
dans d'autres domaines, vous souhaiterez peut-être simplement le supprimer de votre type de contenu Personne, mais pas le supprimer entièrement de votre site. Créez manuellement unYOUR_FEATURE_NAME.install
fichier dans le dossier de votre fonctionnalité comme suit:Si vous supprimiez cela d'un paragraphe Personne au lieu d'un type de contenu Personne, vous pouvez remplacer la première instruction conditionnelle par quelque chose comme ceci:
la source