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?
create new revision
Flag auf dem Knoten für den Inhaltstyp gesetzt? Haben Sie es$w->revision->set(1);
vor dem Speichern gerne versucht ? ....$w->revision->set(1)
Ist das eine manuelle Methode, um dem Drupal mitzuteilen, dass der Knoten aktualisiert wurde? Ich werde es versuchen.$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 Dankrevision->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.Antworten:
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.quelle
Wenn Sie einen Knoten über die Benutzeroberfläche bearbeiten, erfolgt dies über
node_form()
. Dies hat einen Aufruf oben innode_object_prepare()
der Nähe , der Standardwerte für diesen Knoten festlegt. Dazu gehört das Festlegen des Standardwerts von$node->revision
, mitnode_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.quelle
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.
quelle
drupal_submit_form
. Wenn Sie die POST-Werte für ein Knotenübermittlungsformular überprüfen, werden Dinge wierevision = 1
in den POST-Feldern angezeigt, da dascreate new revision
Kontrollkästchen Formularelemente aktiviert wurde. Da1 == TRUE
der Code so oder so funktioniert. Ihr Punkt ist jedoch gültig.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.
quelle