it-swarm.com.de

Workflow-Problem beim Löschen eines Felds

Angenommen, ich habe einen Inhaltstyp Person mit Feldern: Name, Age, Email

Dieser Inhaltstyp wird von einer Funktion namens test gesteuert, sodass ich ihn als Quellcodeverwaltung steuern und auf die Live-Site übertragen kann.

Mein Workflow sieht folgendermaßen aus:

  • Ich füge ein neues Feld auf Person hinzu, das Phone heißt
  • lokal mache ich: drush fu test -y
  • Ich bearbeite die test.info, um die Versionsnummer zu erhöhen
  • Ich übertrage die Änderungen in mein Repository
  • Ich schiebe die Funktion auf die Live-Site (kopiere die Funktionsdateien)
  • 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 dem Person der Live-Site.

Wenn ich im ersten Schritt ein Feld von Person entferne, wird 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?

14
cherouvim

Dies ist ein zweischneidiges Schwert, es ist so, um das Löschen von Daten zu verhindern, was immer eine gute Sache ist. Es gibt nichts wirklich zu lösen, dies ist erwartetes Verhalten.

Es ist der gleiche 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.

9
digital

Der korrekte Weg zum Entfernen von von Features erstellten Inhalten ist hook_update_N (sollte in der Datei your_module.install Implementiert werden).


Die Hauptidee bei Features besteht darin, die Konfiguration mit Code zu verwalten. Die Verwendung von hook_update_N Stimmt damit überein, da die Feldlöschung im Code erfolgt (der mit der Versionskontrolle verwaltet werden kann), während der entsprechende Befehl drush field-delete field Nicht aus verwaltetem Code aufgerufen wird. Es ist ein separater Befehlszeilenschritt, den Sie ausführen müssen (und an den Sie sich erinnern müssen).

10
smokris

Erstellen Sie eine neue Datei mit dem Namen "your_feature_name.install".

In der Datei deklarieren Sie hook_update_N , dort 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.

2
subhojit777

Wenn Sie field_phone In anderen Bereichen möchten Sie es möglicherweise nur aus Ihrem Person-Inhaltstyp entfernen, aber nicht vollständig von Ihrer Site löschen. Erstellen Sie manuell ein YOUR_FEATURE_NAME.install Datei im Ordner Ihres Features wie folgt:

/**
 * Implements hook_update_N().
 *
 * Removes field_phone from Person content type.
 */
function YOUR_FEATURE_NAME_update_7001() {
  if ($instance = field_info_instance('node', 'field_phone', 'person')) {
    field_delete_instance($instance);
  }
  field_purge_batch(500);
  features_revert_module('YOUR_FEATURE_NAME');
}

Wenn Sie dies aus einem Personenabsatz anstelle eines Personeninhaltstyps löschen, können Sie die erste bedingte Anweisung wie folgt ändern:

if ($instance = field_info_instance('paragraphs_item', 'field_phone', 'person')) {
  ...
}
0
jimafisk