mysql> select nid, uid, created, changed from node;
+-----+-----+------------+------------+
| nid | uid | created | changed |
+-----+-----+------------+------------+
| 1 | 8 | 1336040166 | 1336046390 |
+-----+-----+------------+------------+
Me gustaría tener una columna "cambiado por" en la node
tabla, exactamente como tenemos un "creado por" (el campo uid). Esto haría un seguimiento de quién realizó el último cambio en ese nodo. Sé que esto podría derivarse de la node_revision
tabla, pero esto depende de las revisiones habilitadas para los tipos de contenido que me interesan.
Entonces, ¿cuál es la mejor manera de hacer esto? ¿Y por qué Drupal Core no ofrece esto por defecto? Pensé que "cambiado por" es una información bastante estándar que un CMS debe adjuntar al contenido.
node
mesa principal . Se ve más sencillo.Respuestas:
Pensé que esto sería bastante difícil de hacer, pero resulta que es bastante fácil.
Solo necesita crear un módulo personalizado que agregue una columna a la tabla de nodos en la instalación, implementar
hook_schema_alter()
para que Drupal conozca la nueva columna y agregar algo de lógica para proporcionar un valor antes de que se guarde el nodo.Aquí hay un pequeño módulo que hará el truco:
Archivo: node_table_alter.info
Archivo: node_table_alter.install
Archivo: node_table_alter.module
Es posible que desee agregar lógica para eliminar el campo nuevamente en la desinstalación, y agregar un índice a la tabla para la
changed_by
columna (verdb_add_index()
), pero esto debería darle un buen lugar para comenzar.La belleza de este método es que ha agregado efectivamente una nueva propiedad al nodo. Podrá usar
node_load()
,EntityFieldQuery
s, etc. con él como si fuera cualquiera de las otras propiedades estándar de un nodo.¡Dios bendiga a Drupal por ser tan extensible!
fuente
Supongo que podría agregar un campo de referencia de entidad (llamémoslo
field_changed_by_user
) al tipo de contenido que necesita rastrear. Luego, podría usarhook_node_presave
para guardar la identificación de usuario en el nodo de esta manera:Creo que también es posible actualizar el campo con la identificación del usuario simplemente creando una regla. Puedes leer más aquí .
fuente