it-swarm.com.de

Der beste Weg, um ein Feld aus einem Inhaltstyp zu löschen

Was ist der beste Weg, um ein Drupal 7-Feld aus einem über die GUI definierten Inhaltstyp zu entfernen? 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 anscheinend keine Lösung finden. Db_drop_table () wäre für mich für benutzerdefinierte Schemas sinnvoll, nicht jedoch für einen Inhaltstyp/ein Inhaltsfeld, das bzw. das über die GUI definiert wird.

20
amateur barista

Es gibt zwei API-Funktionen zum Löschen von Feldern:

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 Felds für den betreffenden Inhaltstyp zu löschen. Nur Sie können das beurteilen.

18
googletorp

Ja, field_delete_instance () ist die Funktion zum Löschen von Feldinstanzen.

Beachten Sie, dass field_delete_instance() automatisch field_delete_field() aufruft, wenn keine verbleibenden Instanzen vorhanden sind. Daher ist field_delete_instance() höchstwahrscheinlich alles, was Sie jemals benötigen werden.

_update_7000_field_delete_instance() ist für Kernaktualisierungsfunktionen ausgelegt. Beispiel: In der Aktualisierungsfunktion x_update_7000() verwenden Sie field_delete_instance(). Dann ändern Sie in x_update_7001() die Tabelle {field_config} Inkonsistent und field_delete_instance() muss natürlich auch geändert werden.

Aber jetzt würde der Aufruf von x_update_7000() zu field_delete_instance() zu einem Fehler führen, da sich die Tabelle noch in der alten Struktur befindet. Die Situation für beigesteuerte Module ist jedoch anders, da sie immer ausgeführt werden sollten after alle Kernaktualisierungen 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).

9
Berdir