Warum aktualisiert entity_metadata_wrapper-> save () die Revision des Knotens nicht?

8

Ich entwickle ein Modul zum Aktualisieren von Knoten (Revision aktivieren). Es sieht aus wie das.

 $nodes = node_load_multiple(array(), array('type' => $bundleType));
 foreach ($ndoes as $node){
    $w = entity_metadata_wrapper('node',$node);
    $w->MyFields->set($someValue);
    $w->save();
 }

Die Felder wurden korrekt festgelegt, aber die Revisions-ID des Knotens hat sich danach nicht geändert $w->save().

Wie kann ich die Revisions-ID aktualisieren?

zhuchun
quelle
Ist das create new revisionFlag auf dem Knoten für den Inhaltstyp gesetzt? Haben Sie es $w->revision->set(1);vor dem Speichern gerne versucht ? ....
Tenken
Ja, "Neue Revision erstellen" ist aktiviert. Ich weiß nicht viel darüber. $w->revision->set(1)Ist das eine manuelle Methode, um dem Drupal mitzuteilen, dass der Knoten aktualisiert wurde? Ich werde es versuchen.
Zhuchun
hmm, $w->revision->set()funktioniert. Es scheint, ich verstehe falsch $w->save(). Ich dachte, es sollte die Revisions-ID beim Speichern automatisch erhöhen. Gibt es überhaupt eine Möglichkeit, die Revisions-ID für die nächste Erhöhung zu erhalten? Vielen Dank
zhuchun
Nein, revision->set(1)weist den Knoten an, eine neue Revision für die bevorstehende / aktuelle Bearbeitung des Knotens aufzuzeichnen. Ich bin nicht sicher, warum der Metadaten-Wrapper die globale Einstellung zum Erstellen einer neuen Revision nicht sieht ..... aber das Setzen des Revisionsflags ist eine sehr einfache Problemumgehung, wie Sie jetzt gesehen haben. Ich habe meinen Kommentar unten als Antwort angegeben, wenn Sie ihn verbessern möchten, damit andere Benutzer in Zukunft eine korrekte Antwort finden können.
Tenken

Antworten:

6

Ist das Flag zum Erstellen einer neuen Revision auf dem Knoten für den Inhaltstyp gesetzt? Haben Sie versucht, wie $ w-> revision-> set (1); vor dem Speichern? ....

BEARBEITEN:

Der Autor sagt, dass die Einstellung $w->revision->set(1)sein Problem löst.

Tenken
quelle
Es ist eine einfache Problemumgehung! Verstehe nur nicht, warum es gebraucht wird lol. Vielen Dank!
Zhuchun
10

Wenn Sie einen Knoten über die Benutzeroberfläche bearbeiten, erfolgt dies über node_form(). Dies hat einen Aufruf oben in node_object_prepare()der Nähe , der Standardwerte für diesen Knoten festlegt. Dazu gehört das Festlegen des Standardwerts von $node->revision, mit node_save()dem bestimmt wird, ob eine neue Revision erforderlich ist oder nicht.

Die Entity-API ist revisionsbewusst, jedoch node_object_prepare()knotenspezifisch. Dies bedeutet, dass Sie die Werte selbst verwalten müssen, einschließlich der Einstellung der Revisionseigenschaft, um die Funktionsweise des Knotenbearbeitungsformulars nachzuahmen.

mpdonadio
quelle
7

Keine dieser Antworten ist tatsächlich richtig. Wenn ->set(1)Sie dies tun , klingt es so, als würden Sie die Revisionsnummer tatsächlich ändern, und sollte sie daher erhöhen.

Dies ist eigentlich nur ein boolesches Flag, also ist die richtige Antwort $node->revision->set(true);

Wie zhuchun sagt: Er versteht nicht, warum es benötigt wird, wenn es als boolesche Flagge erklärt wird, macht es eher Sinn als die Zahl.

Gav_
quelle
Es gab eine Zeit, in der das Erstellen neuer Drupal-Inhalte am einfachsten war drupal_submit_form. Wenn Sie die POST-Werte für ein Knotenübermittlungsformular überprüfen, werden Dinge wie revision = 1in den POST-Feldern angezeigt, da das create new revisionKontrollkästchen Formularelemente aktiviert wurde. Da 1 == TRUEder Code so oder so funktioniert. Ihr Punkt ist jedoch gültig.
Tenken
Dies sollte akzeptiert werden Antwort
Alex Skrypnyk
0

Wenn für den Knotentyp standardmäßig keine Revisionen aktiviert sind, können Sie eine neue Revision am prägnantesten anfordern:

$w->revision = TRUE;

Das ist genau das gleiche wie mit:

$w->revision->set(TRUE);

aber mit weniger Eingabe erforderlich.

Fonant
quelle