Angenommen , ich habe einen Inhaltstyp Person
mit Feldern: Name
, Age
,Email
Dieser Inhaltstyp wird von einem Feature gesteuert, das aufgerufen wird, test
damit ich ihn als Quellcodeverwaltung verwenden und auf die Live-Site übertragen kann.
Mein Workflow sieht folgendermaßen aus:
- Ich füge ein neues Feld auf
Person
genanntPhone
- lokal mache ich:
drush fu test -y
- Ich bearbeite die
test.info
, um die Versionsnummer zu erhöhen - Ich übernehme die Änderungen in mein Repository
- Ich schiebe das Feature auf die Live-Site (kopiere die Feature-Dateien)
- auf der live seite mache ich:
drush fr test -y
- auf der live seite mache ich:
drush cc all
Dann erscheint das neue Feld auf der Live-Site Person
.
Wenn ich im ersten Schritt ein Feld entferne, wird Person
das Feld nicht von der Live-Site gelöscht. Wie löse ich das? Ich möchte es nicht manuell von der Benutzeroberfläche auf der Live-Site löschen müssen.
Ist dieser Workflow korrekt?
Antworten:
Dies ist ein zweischneidiges Schwert, um das Löschen von Daten zu verhindern, was immer gut ist. Es gibt nichts wirklich zu lösen, das ist erwartetes Verhalten.
Es ist derselbe Workflow, den wir seit über einem Jahr verwenden und der wirklich gut funktioniert. Ich würde sagen, es ist richtig, aber das ist eine sehr subjektive Antwort.
quelle
drush field-delete field
Die korrekte Entfernung von durch Features erstellten Inhalten erfolgt über hook_update_N (was in der Datei implementiert werden sollte
your_module.install
).Die Hauptidee bei Features besteht darin, die Konfiguration mit Code zu verwalten. Die Verwendung
hook_update_N
ist damit konsistent, da die Feldlöschung im Code erfolgt (der mit der Versionskontrolle verwaltet werden kann), während der entsprechende Befehldrush field-delete field
nicht aus verwaltetem Code aufgerufen wird. Dies ist ein separater Befehlszeilenschritt, den Sie ausführen müssen (und an den Sie sich erinnern müssen).quelle
drush field-delete field
gut funktionieren?hook_update()
ist damit konsistent, da die Feldlöschung im Code erfolgt (der mit der Versionskontrolle verwaltet werden kann), während der Befehl drush nicht aus verwaltetem Code aufgerufen wird. Dies ist ein separater Befehlszeilenschritt, den Sie ausführen müssen (und an den Sie sich erinnern müssen).hook_update_N
.Erstellen Sie eine neue Datei mit dem Namen "your_feature_name.install".
In der Datei declare hook_update_N können Sie field_delete_field () verwenden und den Namen des Feldes angeben, das Sie als Parameter löschen möchten.
Führen Sie update.php aus und die Felder werden gelöscht.
quelle
Wenn Sie es
field_phone
in anderen Bereichen verwenden, möchten Sie es möglicherweise nur aus dem Inhaltstyp "Person" entfernen, aber nicht vollständig von Ihrer Website löschen. Erstellen Sie manuell eineYOUR_FEATURE_NAME.install
Datei im Ordner Ihres Features wie folgt:Wenn Sie dies aus einem Personenabsatz anstelle eines Personeninhaltstyps löschen, können Sie die erste bedingte Anweisung folgendermaßen ändern:
quelle