我编写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_before
和handle_pagewrite_after
编写了存根。我在所有三个存根中都调用dbglog
来记录进入和退出。
从维基,我访问一个页面,然后进行编辑。此时,我看到来自register
方法的三个调试消息出现在data / cache / debug.log中。在我第一次按键进入编辑器时,会出现来自register
的第四条调试消息。当我点击保存来保存页面时,会出现第五条register
消息,然后是来自钩子的两组消息,我预期只有一组消息,然后是更多{{1消息。总之,
register
为什么有那么多看似多余的电话?这是正常的吗?
答案 0 :(得分:2)
每次插件系统初始化时,都会调用插件的注册方法。因为PHP是基于请求的,每次请求都会发生。加载页面会创建多个请求(页面,JS调度程序,CSS调度程序,索引webbug,ajax调用等)。
你的第二个问题在这里得到解答:
在更新到现有页面时,此事件被调用两次,一次用于将旧版本传输到阁楼(rev将具有值),并且一次将新版本的页面写入wiki(rev为false) )