mysql> select nid, uid, created, changed from node;
+-----+-----+------------+------------+
| nid | uid | created | changed |
+-----+-----+------------+------------+
| 1 | 8 | 1336040166 | 1336046390 |
+-----+-----+------------+------------+
Я хотел бы иметь столбец «изменено» в node
таблице, точно так же, как у нас есть «созданный» (поле uid). Это будет отслеживать, кто сделал последнее изменение на этом узле. Я знаю, что это может быть получено из node_revision
таблицы, но это зависит от того, какие версии включены для интересующих меня типов контента.
Итак, каков наилучший способ сделать это? И почему ядро Drupal не предлагает это по умолчанию? Я думал, что «изменено» - довольно стандартная часть информации, которую CMS должна прикреплять к контенту.
node
столе. Это выглядит более простым.Ответы:
Я думал, что это будет довольно сложно сделать, но, как оказалось, это довольно легко.
Вам просто нужно создать пользовательский модуль, который добавляет столбец в таблицу узлов при установке, реализовать
hook_schema_alter()
так , чтобы Drupal знал о новом столбце, и добавить некоторую логику для предоставления значения перед сохранением узла.Вот небольшой модуль, который сделает свое дело:
Файл: node_table_alter.info
Файл: node_table_alter.install
Файл: node_table_alter.module
Возможно, вы захотите добавить логику, чтобы снова удалить поле при удалении, и добавить индекс в таблицу для
changed_by
столбца (см.db_add_index()
), Но это должно дать вам хорошее место для начала.Прелесть этого метода в том, что вы эффективно добавили новое свойство в узел. Вы будете в состоянии использовать
node_load()
,EntityFieldQuery
S и т.д. с ним , как если бы она была какой - либо из других стандартных свойств узла.Да благословит Бог Друпал за то, что он так расширяем!
источник
Я думаю, вы могли бы добавить поле ссылки на сущность (давайте назовем его
field_changed_by_user
) к типу контента, который вы хотите отслеживать. Затем вы можете использоватьhook_node_presave
для сохранения идентификатора пользователя на узле, как это:Я думаю, что также возможно обновить поле с идентификатором пользователя, просто создав правило. Вы можете прочитать больше здесь .
источник