Me gustaría rastrear el evento de cambios del sistema, para que sean revertables. Al verificar variable_set (), veo que no se proporciona ningún gancho para ese evento. ¿Hay alguna forma de hacer esto?
Puedo modificar para enganchar a los formularios de configuración, pero hay un montón de formularios de configuración para rastrear, si puedo enganchar a variable_set () directamente, el código se vuelve mucho más simple.
También puedo rastrear los cambios de variables con funciones + módulos de brazo fuerte, pero es mejor si el administrador de Drupal puede navegar por el historial de variables sin tocar el código.
$conf
ese entonces: D Espero que mi respuesta actualizada ayude a alguien.Podría usar un desencadenador de base de datos, que sería más rápido que el código.
Aquí está el documento de MySQL .
crear una tabla para almacenar valores antiguos
cree sus disparadores, uno para insertar y otro para actualizar:
Ahora todas sus actualizaciones e inserciones registrarán valores antiguos en variable_backup.
fuente
Como puede ver en el código fuente,
variable_set()
no realiza solicitudes de enganches o alteraciones, por ejemplo, nomodule_invoke_all()
odrupal_alter()
llama allí.Sin embargo, es posible que pueda escuchar la
db_merge()
consulta con una ubicación especialhook_query_alter()
y realizar un procesamiento adicional allí, pero, como lo señaló Molot,hook_query_alter()
parece poco probable que pueda orientar ladb_merge()
consulta.Alternativamente, quizás podría cronometrar una instantánea de la tabla de variables para diferenciarla de las revisiones anteriores de esa tabla, o bien implementar alguna otra forma de almacenamiento de revisión de variables para comparar.
fuente
QueryAlterableInterface
se implementa de hecho porQuery
sí mismo. Pero en 8 la gestión de la configuración se reconstruye de todos modos. Y en 7 solo las consultas de selección etiquetadas son modificables por lo que veo. Pero tal vez me estoy perdiendo algo?¡Abrí un ticket de Solicitud de funciones en Drupal.org para crear ganchos para interceptar la configuración y eliminación de variables del sistema, y presenté para revisión un parche central para esto! Por favor mira:
https://www.drupal.org/project/drupal/issues/2934718
fuente