Ich habe einem Drupal 7-Inhaltstyp, der bereits viele Knoten enthält, ein neues (Text-) Feld hinzugefügt.
Wie kann ich das Feld mit einem Standardwert für alle diese Knoten füllen?
Mit können Sie EntityFieldQuery
eine Liste von Knoten abrufen und anschließend die Felder des Knotens aktualisieren node_save()
:
$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type
$query = new EntityFieldQuery;
$result = $query
->entityCondition('entity_type', 'node')
->propertyCondition('type', $node_type)
->execute();
if (!empty($result['node'])) {
$nodes = entity_load('node', array_keys($result['node']));
foreach($nodes as $node) {
// Replace field_foo with the machine name of the field to update.
// - 0 refers to specific value within the field array, for when the field contains
// multiple values. If the field only has one value, it should be 0.
$node->field_foo[$lang][0]['value'] = 'New Value';
node_save($node);
}
}
Wenn es sich um eine einmalige Operation handelt, können Sie die Funktion " PHP ausführen" des Devel- Moduls verwenden, um die oben genannten Aktionen auszuführen. Andernfalls können Sie ein einfaches benutzerdefiniertes Modul erstellen.
Ich würde Views Bulk Operations verwenden und das "Execute Arbitrary PHP Script" verwenden, um im Wesentlichen die oben genannten Aufgaben auszuführen, aber Sie müssen nicht den gesamten zusätzlichen Code ausführen, sondern nur das kleine Snippet, das das tut, was Sie wollen (wie
$object->field_foo['und'][0]['value'] = 'some_value'
)quelle
Wenn Sie nur ein Feld mit einem bestimmten Wert aktualisieren möchten, ist die leistungsfähigere Alternative zur akzeptierten Antwort die folgende:
Der Unterschied besteht in der Verwendung von Direkt-
field_attach_presave
undfield_attach_update
Funktionen, die nur das Knotenfeld korrekt aktualisieren und den Rest des Knotensicherungsprozesses überspringen. Dies hat zur Folge, dass keine Node-Presave- / Save-Hooks aufgerufen werden. Das "geänderte" Datum wird nicht auf das aktuelle Datum aktualisiert. Je nach Anwendungsfall ist es möglicherweise besser, den gesamten node_save () - Prozess zu verwenden.quelle
In der Tat ist VBO (Views Bulk Operations) eine gute Lösung. Darüber hinaus finden Sie in den neuesten Versionen die Option "Entitätswerte ändern", mit der Sie die Knotensprache auf einfache Weise in einem Vorgang aktualisieren können.
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.
In deinem Fall sein Titel. Im Bild handelt es sich um Tags.
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