首页 / 帖子
Views data export 模块记录用户导出记录

问题描述:使用Views data export模块用来导出views列表的数据,现在想记录一下用户的导出操作记录(哪些用户点击了导出按钮)类似于淘宝后台记录用户导出的操作日志。实际测试发现用户导出views的时候系统并不会在watchdog里面记录。
使用的解决办法:
1,下载Track da files模块实验后发现还是不行。
2,使用views的hook_views_post_execute()钩子自己添加代码记录日志。对这个钩子不太熟,不知能否实现。
3,用JS阻止导出链接执行,注入异步操作代码来记录日志,完成日志记录后再执行链接。(这个方法应该可以实现,但缺点是代码量比较大而且实现不够优雅还要考虑到用户浏览器关闭了JS的情况)。

所以想问下有没有大神有实现过类似需求或者给一些建议!谢谢~

2个答案
发布于:2016-07-07 14:33

查看代码最后还是修改了views_data_export模块的代码(不建议修改核心文件,除非不需要升级了)来解决了这个问题。修改文件views_data_export_plugin_display_export.inc在235行execute()方法里面加入自己的代码来记录。

function execute() {
  if (!$this->is_batched()) {
    $msg = '这是我自己的日志记录';
    watchdog('cps', $msg);
    return parent::execute();
  }
  ....

其实可以将这个plugin复制到自己的模块做一些修改(但缺点是之前已经做好的使用这个plugin的view都没用了)考虑到时间问题而且以后也不需要升级模块,所以就直接修改了它的核心代码。(当然还是要创建一个module-update-readme.txt记录一下)

老葛
发布于:2016-07-08 17:37

我用以下方法测试了一下,可以成功实现在用户点击views data export模块生成的导出链接(理论上其他链接也可以)前,插入自定义的代码,供你参考一下:(1)实现hook_module_implements_alter,将menu_alter的顺序调一下,将你的自定义模块的顺序放到views模块之后(2)实现hook_menu_alter,拷贝你要干涉的链接的item,给个新路径path';然后将原item的page callback改成你的一个自定义函数(3)实现你的自定义函数,做例如watchdog或其他你需要的操作,最后,用drupal_goto跳转到你拷贝的新路径path',其实就是相当于访问原来的路径。OK。