Wie kann ein Drupal 7-Feld am besten aus einem über die GUI definierten Inhaltstyp entfernt werden? Ich möchte hook_update_N verwenden, damit die Änderungen beim Ausführen von update.php auf mehrere Server übertragen werden können. Ich kann jedoch keine Lösung finden. db_drop_table () ist für benutzerdefinierte Schemas sinnvoll, jedoch nicht für einen über die GUI definierten Inhaltstyp / ein Inhaltsfeld.
21
Antworten:
Es gibt zwei API-Funktionen zum Löschen von Feldern:
field_delete_field
So löschen Sie das gesamte Feld (alle Instanzen des Feldes)field_delete_instance
Nur eine Instanz eines Feldes löschen - so wird es einer Entität zugeordnet.Wenn Sie das Feld nicht wiederverwenden möchten, ist es möglicherweise etwas sauberer, das gesamte Feld zu löschen, anstatt nur die Instanz des betreffenden Inhaltstyps zu löschen. Nur Sie können das beurteilen.
quelle
Ja, field_delete_instance () ist die Funktion zum Löschen von Feldinstanzen.
Beachten Sie, dass
field_delete_instance()
Anrufe automatisch ausgeführt werden,field_delete_field()
wenn keine Instanzen mehr vorhanden sind. Diesfield_delete_instance()
ist höchstwahrscheinlich alles, was Sie jemals benötigen werden._update_7000_field_delete_instance()
ist für Kernaktualisierungsfunktionen ausgelegt. Beispiel: In der Update-Funktion verwendenx_update_7000()
Siefield_delete_instance()
. Dannx_update_7001()
ändern Sie die{field_config}
Tabelle auf inkonsistente Weise und müssenfield_delete_instance()
natürlich auch geändert werden.Aber jetzt
x_update_7000()
ist Anruffield_delete_instance()
würde zu einem Fehler führen , da die Tabelle immer noch in der alten Struktur ist. Die Situation für hinzugefügte Module ist jedoch anders, da sie nach allen Kernaktualisierungen immer ausgeführt werden sollten und daher mit der neuesten Kernversion arbeiten müssen.Dies ist jedoch ein Muster, das Sie möglicherweise für Ihre eigenen API-Funktionen verwenden möchten, die Sie in Aktualisierungsfunktionen verwenden.
Darüber hinaus führen diese _update-Funktionen keine Hooks aus, da das Ergebnis nicht vorhersehbar ist (z. B. weil das Modul, für das das Update ausgeführt wird, möglicherweise deaktiviert ist).
quelle