Node Datum beim Speichern aktualisieren
Eingetragen von px (77)
am 19.03.2010 - 22:08 Uhr in
am 19.03.2010 - 22:08 Uhr in
Ok, prinzipiell einfaches Problem: Ich möchte das Erstellungsdatum eines Nodes automatisch auf den Zeitpunkt der letzten Bearbeitung setzen, d.h. Nodes die bearbeitet wurden sollen unter /node automatisch ganz nach vorne geholt werden. Prinzipiell würde sich dafür ja das Rules Modul anbieten. Einen passenden Trigger für mein Problem hat es. Was allerdigns zu fehlen scheint ist eine entsprechende Action. Hat da irgendwer eine Idee?
- Anmelden oder Registrieren um Kommentare zu schreiben
Erstellungsdatum
am 20.03.2010 - 10:59 Uhr
Hallo.
Es ist nicht zu empfehlen, das Erstellungsdatum nachträglich zu verändern (schliesslich ist es das Datum der Erstellung eines Beitrags, nicht das der letzten Veränderung).
Bau Dir einfach einen View (Views und evtl. auch SimpleViews) mit dem Du eine Liste der Beiträge sortiert nach letztem Änderungsdatum erzeugst.
hth,
Stefan
Hi, Sorry das ist keine
am 20.03.2010 - 14:18 Uhr
Hi,
Sorry das ist keine Lösung für mich. Was ich in meiner Anfrage unterschlagen habe ist, dass ich zusätzlich auf dem "published" flag triggern will, d.h. ich möchte die Möglichkeit haben, Nodes als Entwurf zu speichern ("unpublished") und beim Veröffentlichen dann automatisch ganz an den Anfang der /node Liste zu befördern. Das Ganze natürlich ohne dass der Benutzer die "Administer Nodes" Berechtigung haben muss.
Probier doch mal Rules aus,
am 21.03.2010 - 01:38 Uhr
Probier doch mal Rules aus, dort kannst du als Aktion wählen, dass ein Beitrag veröffentlicht werden soll und zusätzlich noch die Aktion einfügen, dass der Beitrag in Listen ganz oben erscheinen soll. Ob das das macht, was du willst, weiß ich nicht, aber schau es dir doch mal an.
Ich würde übrigens an deiner Stelle auch nicht am Erstellungsdatum drehen.
Noch eine Idee:
Erstelle dir die View, von der Stefan sprach, welche nach Aktualisierungsdatum sortiert.
Dann kannst du mit Rules einfach "Custom PHP" ausführen und damit das Aktualisierungsdatum auf das momentane Datum setzen. Schon erscheint dein Node in der View ganz oben, wenn er veröffentlicht wird ;-) Damit wäre das Problem doch recht elegant umgangen, oder?
Rules habe ich schon in
am 21.03.2010 - 13:01 Uhr
Rules habe ich schon in Erwägung gezogen (siehe Initialpost). Mein Problem ist nur dass es da keine passende Aktion gibt. Ich könnte selbstverständlich mit Custom PHP Code was basteln, aber ich hatte gehofft, dass jemand eine elegantere Idee hat (irgendwas im Stile von: du doof, da gibts doch Modul XYZ als Rules Erweiterung, welches genau das macht).
View die nach Aktualisierungsdateum sortiert ist leider keine Lösung. Bei den Nodes, um die es mir geht handelt es sich um Entwürfe, deren Erstellungsdatum nur einmalig auf das Veröffentlichungsdatum gesetzt werden soll. Nachträgliche edits, die den Node wieder in der View nach vorne holen würden wären eher hinderlich.
PS: Was ist so kritisch daran, am Erstellungsdatum zu drehen?
Weil das die Tatsachen
am 21.03.2010 - 14:09 Uhr
Weil das die Tatsachen verwischen würde. Der Node wird an einem bestimmten Datum erstellt und ab da nur noch aktualisiert. Wenn du das Erstellungsdatum nachträglich änderst, bringst du diese Grundsätze eben durcheinander.
Es würde dir sicherlich nicht die Seite zerschießen, aber es gibt Dinge, die macht man einfach nicht. Man kan auch nachträglich die Node-ID machen, aber sowas macht man eben auch nicht. Es gibt ein paar grundlegende Dinge, vor allem in der Programmierung, welche man beherzigen sollte und dass man das Erstellungsdatum nachträglich nicht ändert gehört nunmal dazu...
Anderer Vorschlag:
Du fügst deinem Inhaltstyp ein Datumsfeld hinzu (Dazu brauchst du das Modul Date). Dieses Feld darf (mittels Content Permission) niemand sehen und auch niemand ausfüllen.
Mittels Rules belegst du dieses Feld mit dem aktuellen Datum, sobald der Node veröffentlicht wird.
Jetzt bastelst du dir noch eine View, welche nach diesem Feld sortiert und fertig.
In dem Fall, um den es mir
am 21.03.2010 - 14:41 Uhr
In dem Fall, um den es mir geht, sind Nodes eigentlich erst wirklich erstellt, wenn sie veröffentlicht werden. Davor sinds einfach nur Entwürfe, die nicht offiziell existieren.
Das man nachträglich die Node-ID setzen kann würde ich so nicht unterschreiben. Die nid Spalte im node Table ist zum Einem autoincrement und zum Anderem Fremdschlüssel in gut einem Dutzend anderer Tabellen. Daran herumbasteln würde mit Sicherheit die Seite schrotten. Für das Erstellungsdatum habe ich soweit noch keine derartige Abhängigkeit gefunden. Was natürlich nicht heisst, dass es sie nicht gibt, aber dann müsste ich mich fragen, warum man mit der "Administer nodes" Berechtigung die Möglichkeit hat, das Erstellungsdatum zu manipulieren.
CCK Date, Views und Rules wäre vielleicht ein gangbarer Weg, aber ich bin ein großer Fan vom KISS Ansatz. Bevor ich mir ein komplexes Setup mit CCK und Views hinzaubere, würde ich eher das Datum direkt mittels PHP code in einer Rules Action setzen. Ich hatte halt nur die Hoffnung, dass es eine etwas elegantere Methode gibt.
Das mit der Node-ID war nur
am 21.03.2010 - 18:11 Uhr
Das mit der Node-ID war nur ein Beispiel -,-' Du KANNST die Node-ID ändern. Aber machen sollte man es eben nicht, darum geht es ja.
Und sobald du einen Node speicherst, existiert er auch, so ist das nunmal.
Aber bitte, mach, was du für richtig hältst... Ich an deiner Stelle würde würde den Weg mit der View gehen.
KISS hin oder her, natürlich ist es oft besser, die Dinge kurz und einfach zu gestalten, aber dafür einfach in den Tabellen rum schreiben und solche grundlegenden Dinge wie das Erstellungsdatum zur manipulieren halte ich für falsch. Wenn du einen Node erstellst, dann ist er da, veröffentlicht oder nicht. Und Drupal funktioniert nunmal so, dass man ein Erstellungsdatum und ein Aktualisierungsdatum hat.
Aber wie gesagt: Mach, was du willst, dies ist ein freies Land, aber ich würde die 5 Minuten Mehraufwand in Kauf nehmen und die View basteln. Das wäre einfach die sauberere Lösung...
Ich würde auch ein
am 21.03.2010 - 18:32 Uhr
Ich würde auch ein zusätzliches CCK-Feld erstellen und dort bei der Veröffentlichung das aktuelle Datum reinsetzen und den View entsprechend anlegen.
Ist wirklich die sauberste Lösung, so hast du weder beim ursprünglichen Veröffentlichungsdatum ungewollte Seiteneffekte noch das Änderungsdatum.