mysql> select nid, uid, created, changed from node;
+-----+-----+------------+------------+
| nid | uid | created | changed |
+-----+-----+------------+------------+
| 1 | 8 | 1336040166 | 1336046390 |
+-----+-----+------------+------------+
Ich möchte eine Spalte "geändert von" in der node
Tabelle haben, genau wie wir eine Spalte "erstellt von" (das UID-Feld) haben. Dies würde verfolgen, wer die letzte Änderung an diesem Knoten vorgenommen hat. Ich weiß, dass dies aus der node_revision
Tabelle abgeleitet werden kann, aber dies hängt von den Revisionen ab, die für die von mir interessierten Inhaltstypen aktiviert werden.
Was ist der beste Weg, dies zu tun? Und warum bietet Drupal Core dies nicht standardmäßig an? Ich dachte, dass "geändert von" eine ziemlich übliche Information ist, die ein CMS an Inhalte anhängen sollte.
node
Haupttisch zu haben. Es sieht einfacher aus.Antworten:
Ich dachte, das wäre ziemlich schwierig, aber wie sich herausstellt, ist es ziemlich einfach.
Sie müssen lediglich ein benutzerdefiniertes Modul erstellen, das der Knotentabelle bei der Installation eine Spalte hinzufügt, implementieren,
hook_schema_alter()
damit Drupal über die neue Spalte informiert ist, und eine Logik hinzufügen, um einen Wert bereitzustellen, bevor der Knoten gespeichert wird.Hier ist ein kleines Modul, das den Trick macht:
Datei: node_table_alter.info
Datei: node_table_alter.install
Datei: node_table_alter.module
Möglicherweise möchten Sie Logik hinzufügen, um das Feld bei der Deinstallation erneut zu entfernen, und der Tabelle für die
changed_by
Spalte einen Index hinzufügen (siehedb_add_index()
). Dies sollte Ihnen jedoch einen guten Ausgangspunkt bieten.Das Schöne an dieser Methode ist, dass Sie dem Knoten effektiv eine neue Eigenschaft hinzugefügt haben. Sie werden nutzen können
node_load()
,EntityFieldQuery
s usw. mit ihm , als ob er einen der anderen Standardeigenschaften für einen Knoten waren.Gott segne Drupal dafür, dass er so erweiterbar ist!
quelle
Ich denke, Sie könnten
field_changed_by_user
dem Inhaltstyp, den Sie verfolgen möchten, ein Entitätsreferenzfeld hinzufügen (nennen wir es ). Dann können Siehook_node_presave
die Benutzer-ID folgendermaßen auf dem Knoten speichern:Ich denke, es ist auch möglich, das Feld mit der Benutzer-ID zu aktualisieren, indem Sie einfach eine Regel erstellen. Sie können mehr lesen hier .
quelle