Gostaria de acompanhar o evento de alterações do sistema, para torná-las reversíveis. Ao verificar variable_set (), vejo que não há gancho fornecido para esse evento. Existe alguma maneira de eu fazer isso?
Eu posso alterar para ligar aos formulários de configurações, mas há muitas configurações para rastrear; se eu posso conectar diretamente ao variable_set (), o código se torna muito mais simples.
Também posso rastrear as alterações de variáveis com os recursos + módulos strongarm, mas é melhor se o administrador do Drupal puder navegar no histórico de variáveis sem tocar no código.
$conf
na época: D Espero que minha resposta atualizada ajude alguém.Você pode usar um gatilho de banco de dados, que seria mais rápido que o código.
Aqui está o documento do MySQL .
crie uma tabela para armazenar valores antigos
crie seus gatilhos, um para inserção e outro para atualização:
Agora todas as suas atualizações e inserções registrarão valores antigos em variable_backup.
fonte
Como você pode ver no código fonte,
variable_set()
não solicita ganchos ou alterações, por exemplo, nãomodule_invoke_all()
oudrupal_alter()
liga para lá.No entanto, você pode ouvir a
db_merge()
consulta com um local especialmente colocadohook_query_alter()
e fazer algum processamento adicional, mas, como apontado por Molot,hook_query_alter()
parece improvável que seja capaz de direcionar adb_merge()
consulta.Como alternativa, talvez você possa agendar uma captura instantânea da tabela de variáveis para diferenciá-la das revisões anteriores dessa tabela ou implementar outra forma de armazenamento de revisão de variáveis para comparar.
fonte
QueryAlterableInterface
é realmente implementado porQuery
si só. Porém, em 8 configurações, o gerenciamento é reconstruído de qualquer maneira. E em 7, apenas as consultas de seleção marcadas são alteráveis até onde eu vejo. Mas talvez eu esteja perdendo alguma coisa?Abri um tíquete de solicitação de recurso no Drupal.org para criar ganchos para interceptar a configuração e a exclusão de variáveis do sistema e enviei para revisão um patch principal para isso! Por favor, veja:
https://www.drupal.org/project/drupal/issues/2934718
fonte