Eu pensei que isso seria bastante difícil de fazer, mas, como se vê, é bastante fácil.
Você só precisa criar um módulo personalizado que adicione uma coluna à tabela de nós na instalação, implemente hook_schema_alter()
para que o Drupal conheça a nova coluna e adicione alguma lógica para fornecer um valor antes que o nó seja salvo.
Aqui está um pequeno módulo que fará o truque:
Arquivo: node_table_alter.info
name = Node Table Alter
core = 7.x
Arquivo: 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);
}
Arquivo: 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;
}
Você pode adicionar lógica para remover o campo novamente na desinstalação e adicionar um índice à tabela da changed_by
coluna (consulte a seção db_add_index()
), mas isso deve lhe dar um bom lugar para começar.
A vantagem desse método é que você adicionou efetivamente uma nova propriedade ao nó. Você vai ser capaz de usar node_load()
, EntityFieldQuery
s, etc. com ela como se fosse qualquer uma das outras propriedades padrão para um nó.
Deus abençoe Drupal por ser tão extensível!