【问题标题】:Why is Dokuwiki IO_WIKIPAGE_SAVE action plugin called multiple times on a Save operation?为什么 Dokuwiki IO_WIKIPAGE_SAVE 动作插件在保存操作中被多次调用?
【发布时间】:2017-07-14 01:44:48
【问题描述】:

我第一次尝试编写 Dokuwiki 插件是针对 Action 事件,当编辑的页面被保存到磁盘时。我编写了一个扩展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 调用放在所有三个存根中以记录进入和退出。

我从 wiki 访问了一个页面,并对其进行了编辑。此时我看到来自register 方法的三个 调试消息出现在data/cache/debug.log 中。在我第一次敲击编辑器时,出现了来自register 的第四条调试消息。当我单击保存 以保存页面时,会出现第五条register 消息,然后是来自我预期只有一个的挂钩的两组消息,然后是更多register 消息。总之,

21:32:34 10.0.1.24: Enter gloss:action:register
21:32:34 10.0.1.24: Enter gloss:action:register
21:32:34 10.0.1.24: Enter gloss:action:register
21:33:56 10.0.1.24: Enter gloss:action:register
21:35:46 10.0.1.24: Enter gloss:action:register
21:35:46 10.0.1.24: Enter gloss:action:handle_pagewrite_before
21:35:46 10.0.1.24: Exit gloss:action:handle_pagewrite_before
21:35:46 10.0.1.24: Enter gloss:action:handle_pagewrite_after
21:35:46 10.0.1.24: Exit gloss:action:handle_pagewrite_after
21:35:46 10.0.1.24: Enter gloss:action:handle_pagewrite_before
21:35:46 10.0.1.24: Exit gloss:action:handle_pagewrite_before
21:35:46 10.0.1.24: Enter gloss:action:handle_pagewrite_after
21:35:46 10.0.1.24: Exit gloss:action:handle_pagewrite_after
21:35:46 10.0.1.24: Enter gloss:action:register
21:35:46 10.0.1.24: Enter gloss:action:register
21:35:47 10.0.1.24: Enter gloss:action:register

为什么会有这么多看似多余的调用?这正常吗?

【问题讨论】:

    标签: plugins dokuwiki


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多