mysql> select nid, uid, created, changed from node;
+-----+-----+------------+------------+
| nid | uid | created | changed |
+-----+-----+------------+------------+
| 1 | 8 | 1336040166 | 1336046390 |
+-----+-----+------------+------------+
Eu gostaria de ter uma coluna "alterada por" na node
tabela, exatamente como temos uma "criada por" (o campo uid). Isso acompanharia quem fez a última alteração nesse nó. Eu sei que isso pode ser derivado da node_revision
tabela, mas isso depende das revisões ativadas para os tipos de conteúdo que estou interessado.
Então, qual é a melhor maneira de fazer isso? E por que o núcleo Drupal não oferece isso por padrão? Eu pensei que "alterado por" é uma informação bastante padrão que um CMS deve anexar ao conteúdo.
node
mesa principal . Parece mais direto.Respostas:
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
Arquivo: node_table_alter.install
Arquivo: node_table_alter.module
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çãodb_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!
fonte
Eu acho que você pode adicionar um campo de referência da entidade (vamos chamá-lo
field_changed_by_user
) ao tipo de conteúdo que você precisa acompanhar. Então você pode usarhook_node_presave
para salvar o ID do usuário no nó desta forma:Eu acho que também é possível atualizar o campo com o ID do usuário apenas criando uma regra. Você pode ler mais aqui .
fonte