Ich habe einen vorhandenen Inhaltstyp mit mehreren Knoten. Ich habe gerade ein neues boolesches Feld mit dem Standardwert "off" hinzugefügt.
Bis ich jeden Knoten erneut speichere, ist der Standardwert jedoch nicht festgelegt. Daher ist eine Ansicht, die nur die Knoten anzeigen soll, bei denen das neue Feld den Standardwert verwendet, derzeit leer.
Wie kann ich die vorhandenen Knoten aktualisieren, die erstellt wurden, bevor das Feld hinzugefügt wurde, um den Standardwert für dieses Feld festzulegen?
Antworten:
Leider gibt es keine sehr einfache Möglichkeit (außer VBO / rules), aber hier ist der Code, den ich in Aktualisierungsfunktionen in meinen benutzerdefinierten Modulinstallationsdateien verwende, wenn ich Feldwerte für einen bestimmten Knotentyp vorab ausfüllen muss, nachdem ich ein neues Feld hinzugefügt habe ( in diesem Fall "Seite" Knoten):
Eine andere in dieser Antwort erwähnte manuelle Methode verwendet EntityFieldQuery und lädt / speichert jeden Knoten. Mehr Drupal-y, aber weitaus weniger performant ... (Erfordert eine vollständige Knotenlade- und Speicheroperation für jeden Knoten!).
quelle
entity_get_controller('node')->resetCache($nids);
- Andernfallsnode_load()
lädt ein nachfolgender möglicherweise veraltete Daten aus dem Cache, und jedesnode_save()
Objekt würde diese veralteten Daten zurück in die Datenbank schreiben .Die beste Wette ist direkt im MySQL. Die Tabellen würden so aussehen:
Wenn Sie sie sich ansehen, ist das ziemlich einfach. Benötigen Sie mich, damit Sie wissen, wie die Abfrage aussehen würde, oder sind Sie von hier aus in Ordnung?
quelle
Probieren Sie einfach die unten stehende Logik aus. Es ist viel schneller und es sind auch alle Hook-Implementierungen umgangen. Weitere Details . Sie können eine einfache direkte db_select-Abfrage schreiben, um alle NIDs abzurufen und mit diesem Beispielcode zu schleifen.
quelle
mit SQL, wenn man bedenkt, dass Knoten mit dem Feldwert nicht gesetzt sind
field_data_field_pr_choix_du_document ist die Tabelle, die meinem Feld entspricht und einen Eintragsparwert enthält, der mit der Entitäts-ID festgelegt ist, die auf den Knoten verweist
Ich habe mit SQL Insert ... Syntax auswählen
https://dev.mysql.com/doc/refman/5.5/de/insert-select.html
quelle
Installieren und aktivieren Sie das Modul " Views Bulk Operations" und erstellen Sie eine Ansicht mit einer Seitenanzeige.
Hinzufügen => Massenoperationen: Feld Inhalt (Content) in der Ansicht.
Verweisen
Wählen Sie die Felder aus, für die Sie den Standardwert festlegen möchten.
Speichern Sie die Ansicht und wechseln Sie zu der Seite, die sie erstellt hat. Wenn Sie mehr als eine Ergebnisseite haben, können Sie entweder alle Elemente auf der aktuellen Seite oder alle Elemente auf allen Seiten auswählen oder die Kästchen für die einzelnen Knoten manuell aktivieren. Mindestens ein Kontrollkästchen muss aktiviert sein, um fortzufahren.
Jetzt legen Sie den Standardwert fest und speichern ihn.
quelle
Mit diesem Modul habe ich eine einfache Möglichkeit gefunden, Felder im Inhaltstyp zu aktualisieren: Feldstandards
Siehe Screenshot. Sie können vorhandene Inhalte mit den Standardwerten aktualisieren oder vorhandene Werte beibehalten.
Ich habe es auf D7 getestet und es funktioniert.
quelle