Я думал, что это будет довольно сложно сделать, но, как оказалось, это довольно легко.
Вам просто нужно создать пользовательский модуль, который добавляет столбец в таблицу узлов при установке, реализовать hook_schema_alter()
так , чтобы Drupal знал о новом столбце, и добавить некоторую логику для предоставления значения перед сохранением узла.
Вот небольшой модуль, который сделает свое дело:
Файл: node_table_alter.info
name = Node Table Alter
core = 7.x
Файл: node_table_alter.install
function node_table_alter_install() {
// Add the new field to the node table
$field = array(
'description' => 'Stores the user id of the last user to alter the node',
'type' => 'int',
'unsigned' => TRUE
);
db_add_field('node', 'changed_by', $field);
}
Файл: node_table_alter.module
function node_table_alter_schema_alter(&$schema) {
// Add the new field to the schema cache
$schema['node']['fields']['changed_by'] = array(
'description' => 'Stores the user id of the last user to alter the node',
'type' => 'int',
'unsigned' => TRUE
);
}
function node_table_alter_node_presave($node) {
// Populate the changed_by column with current user's id
$node->changed_by = $GLOBALS['user']->uid;
}
Возможно, вы захотите добавить логику, чтобы снова удалить поле при удалении, и добавить индекс в таблицу для changed_by
столбца (см. db_add_index()
), Но это должно дать вам хорошее место для начала.
Прелесть этого метода в том, что вы эффективно добавили новое свойство в узел. Вы будете в состоянии использовать node_load()
, EntityFieldQuery
S и т.д. с ним , как если бы она была какой - либо из других стандартных свойств узла.
Да благословит Бог Друпал за то, что он так расширяем!