mysql> select nid, uid, created, changed from node;
+-----+-----+------------+------------+
| nid | uid | created | changed |
+-----+-----+------------+------------+
| 1 | 8 | 1336040166 | 1336046390 |
+-----+-----+------------+------------+
Chciałbym mieć kolumnę „zmienione przez” w node
tabeli, dokładnie tak, jak mamy „utworzone przez” (pole uid). Pozwoli to śledzić, kto dokonał ostatniej zmiany w tym węźle. Wiem, że można to wyprowadzić z node_revision
tabeli, ale zależy to od włączenia poprawek dla typów zawartości, które mnie interesują.
Więc jaki jest najlepszy sposób, aby to zrobić? I dlaczego rdzeń Drupala nie oferuje tego domyślnie? Pomyślałem, że „zmieniony przez” to dość standardowa informacja, którą CMS powinien dołączyć do treści.
node
stole. Wygląda to bardziej prosto.Odpowiedzi:
Myślałem, że będzie to trudne, ale jak się okazuje, jest to dość łatwe.
Wystarczy utworzyć niestandardowy moduł, który dodaje kolumnę do tabeli węzłów podczas instalacji, wdrożyć,
hook_schema_alter()
aby Drupal wiedział o nowej kolumnie, i dodać logikę, aby podać wartość przed zapisaniem węzła.Oto mały moduł, który załatwi sprawę:
Plik: node_table_alter.info
Plik: node_table_alter.install
Plik: node_table_alter.module
Możesz dodać logikę, aby usunąć pole ponownie podczas odinstalowywania i dodać indeks do tabeli dla
changed_by
kolumny (patrzdb_add_index()
), ale powinno to dać dobre miejsce do rozpoczęcia.Zaletą tej metody jest to, że skutecznie dodałeś nową właściwość do węzła. Będziesz mógł używać
node_load()
,EntityFieldQuery
s, itp. Z nim tak, jakby to była dowolna inna standardowa właściwość dla węzła.Niech Bóg błogosławi Drupalowi za to, że jest tak rozciągliwy!
źródło
Myślę, że możesz dodać pole referencyjne encji (nazwijmy to
field_changed_by_user
) do typu zawartości, który chcesz śledzić. Następnie możesz użyć,hook_node_presave
aby zapisać identyfikator użytkownika w węźle w następujący sposób:Myślę, że można również zaktualizować pole z identyfikatorem użytkownika, po prostu tworząc regułę. Możesz przeczytać więcej tutaj .
źródło