In Drupal gibt es vordefinierte Eingabefelder für jeden Standard Content-Type. Wer das erweitern will kann extra Felder für z. B. Bildupload, eMail Adresse, Internetadresse, Telefon Nr. usw. anlegen
Was ist aber los, wenn irrtümlich ein Feld im Content-Type gelöscht wird. Wie kann das gelöschte Drupal Feld zurückgesetzt werden? Ein schwierige Situation, denn es gib keine "Recover", "Undo", "Reset" oder "Zurücksetzen" Funktion für irrtümlich gelöschte Felder in Drupal.
Felder werden Drupal nicht gelöscht. Die Werte sind noch vorhanden. Man sollte das aber gleich wieder zurücksetzen.
Drupal Tabellen für Felder (Fields)
Folgende Tabellen müssen über MySQL Commands angepasst werden um den alten Zustand wiederherzustellen. Wir unterscheiden zwischen:
a) Standard Tabellen
- field_config
- field_config_instance
- cache_field
b) Feld Tabellen
Angenommen das Feld hatte den internen Namen (machine_name) "test". Dann legt Drupal folgende Tabellen je Feld an.
- field_data_test
- field_revision_test
oder
- field_data_field_node_test
- field_revision_field_node_test
Dort sind nach wie vor die Daten erhalten, jedoch sind in allen 4 Tabellen in unserem Beispiel Werte auf - sagen wir mal - Status deleted gesetzt.
Zurücksetzen / Wiederherstellen gelöschter Felder in Drupal
[alert type="danger"]Zuerst ein Backup oder "dump" der MySQL Datenbank machen. Nur in einer Development Umgebung arbeiten[/alert]
Vorarbeiten
Backup erstellen bzw. Pojekt klonen
Cache deaktivieren unter Administration > Configuration > Development
MySQL Commands
Zuerst setzen wir den wert im Feld deleted für das Feld
UPDATE field_config SET deleted = 0 where field_name = 'field_data_field_node_test'; UPDATE field_config_instance SET deleted = 0 wherefield_name = 'field_data_field_node_test';
Die Tabelle mit Cache für die Felder leeren (Hinweis: Truncate setzt autoimcrement auf 0).
TRUNCATE TABLE cache_field;
In einigen Online Beispielen wird nicht erwähnt, dass die jeweiligen Einträge auch einen Wert deleted=1, der auf deleted=0 gesetzt werden muss. Ansonsten sieht man im Content-Type das Feld wieder, jedoch werden diese nicht als Inhalt angezeigt.
UPDATE field_revision_field_node_test SET deleted=0 WHERE deleted=1;
UPDATE field_data_field_node_test SET deleted=0 WHERE deleted=1<
Fazit
Es gibt keine "undo" Funktion und man muss direkt auf die Datenbank gehen und dort die Tabellen zurücksetzen. Für Drupal 7.43 wurde o.g. Beispiel eingesetzt und alle Verknüpfungen zu dem gelöschten Feld waren wieder da.