为什么在保存操作中多次调用Dokuwiki IO_WIKIPAGE_SAVE动作插件?

时间:2017-07-14 01:44:48

标签: plugins dokuwiki

我编写Dokuwiki插件的第一次尝试是针对操作事件,当编辑的页面保存到磁盘时。我编写了一个扩展DokuWiki_Action_Plugin的动作插件类;它包含一个register方法,用于向控制器注册两个钩子:

$controller->register_hook('IO_WIKIPAGE_WRITE', 'BEFORE', $this, 'handle_pagewrite_before', array());
$controller->register_hook('IO_WIKIPAGE_WRITE', 'AFTER', $this, 'handle_pagewrite_after', array());

(在编写页面内容之前调用“before”方法,并在写入之后调用“after”方法。)

我已经为两种方法handle_pagewrite_beforehandle_pagewrite_after编写了存根。我在所有三个存根中都调用dbglog来记录进入和退出。

从维基,我访问一个页面,然后进行编辑。此时,我看到来自register方法的三个调试消息出现在data / cache / debug.log中。在我第一次按键进入编辑器时,会出现来自register的第四条调试消息。当我点击保存来保存页面时,会出现第五条register消息,然后是来自钩子的两组消息,我预期只有一组消息,然后是更多{{1消息。总之,

register

为什么有那么多看似多余的电话?这是正常的吗?

1 个答案:

答案 0 :(得分:2)

每次插件系统初始化时,都会调用插件的注册方法。因为PHP是基于请求的,每次请求都会发生。加载页面会创建多个请求(页面,JS调度程序,CSS调度程序,索引webbug,ajax调用等)。

你的第二个问题在这里得到解答:

  

在更新到现有页面时,此事件被调用两次,一次用于将旧版本传输到阁楼(rev将具有值),并且一次将新版本的页面写入wiki(rev为false) )

     

https://www.dokuwiki.org/devel:event:io_wikipage_write