mysql> select nid, uid, created, changed from node;
+-----+-----+------------+------------+
| nid | uid | created | changed |
+-----+-----+------------+------------+
| 1 | 8 | 1336040166 | 1336046390 |
+-----+-----+------------+------------+
J'aimerais avoir une colonne "modifié par" sur la node
table, exactement comme nous avons une "créé par" (le champ uid). Cela permettrait de savoir qui a effectué le dernier changement sur ce nœud. Je sais que cela pourrait être dérivé du node_revision
tableau mais cela dépend des révisions activées pour les types de contenu qui m'intéressent.
Alors, quelle est la meilleure façon de procéder? Et pourquoi le noyau Drupal ne propose-t-il pas cela par défaut? Je pensais que «changé par» est une information assez standard qu'un CMS devrait attacher au contenu.
node
table principale . Cela semble plus simple.Réponses:
Je pensais que ce serait assez difficile à faire, mais il s'avère que c'est assez facile.
Il vous suffit de créer un module personnalisé qui ajoute une colonne à la table des nœuds lors de l'installation, de l'implémenter
hook_schema_alter()
pour que Drupal connaisse la nouvelle colonne et d'ajouter une logique pour fournir une valeur avant que le nœud ne soit enregistré.Voici un petit module qui fera l'affaire:
Fichier: node_table_alter.info
Fichier: node_table_alter.install
Fichier: node_table_alter.module
Vous souhaiterez peut-être ajouter une logique pour supprimer à nouveau le champ lors de la désinstallation et ajouter un index à la table de la
changed_by
colonne (voirdb_add_index()
), mais cela devrait vous donner un bon point de départ.La beauté de cette méthode est que vous avez effectivement ajouté une nouvelle propriété au nœud. Vous pourrez utiliser
node_load()
,EntityFieldQuery
s, etc. avec lui comme s'il s'agissait de l'une des autres propriétés standard d'un nœud.Que Dieu bénisse Drupal pour être si extensible!
la source
Je suppose que vous pouvez ajouter un champ de référence d'entité (appelons-le
field_changed_by_user
) au type de contenu que vous devez suivre. Ensuite, vous pouvez utiliserhook_node_presave
pour enregistrer l'ID utilisateur sur le nœud comme ceci:Je pense qu'il est également possible de mettre à jour le champ avec l'ID de l'utilisateur simplement en créant une règle. Vous pouvez en lire plus ici .
la source