Я думав, що це буде досить важко зробити, але, як виявляється, це досить просто.
Вам просто потрібно створити спеціальний модуль, який додає стовпчик до таблиці вузлів під час встановлення, реалізуйте 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 та ін., Так, як якщо б це було будь-яке з інших стандартних властивостей для вузла.
Бог благословить Друпала за те, що він такий розширюваний!