欢迎来到吉林社交动力网络科技有限公司
建站资讯

当前位置: 首页 > 建站资讯 > 建站教程 > PHP教程

MediaWiki扩展开发:获取页面编辑前后的内容

作者:免费网页制作模板 来源:php培训学费日期:2025-10-10

mediawiki扩展开发:获取页面编辑前后的内容

本文档旨在指导开发者如何在MediaWiki扩展中,利用MultiContentSave钩子,获取页面编辑前后的内容。通过示例代码,详细讲解如何获取新旧版本的修订记录,并从中提取页面内容,为实现版本比较等功能提供技术支持。

在MediaWiki扩展开发中,经常需要获取页面编辑前后的内容,以便进行比较、审计或其他处理。MultiContentSave钩子提供了一个理想的切入点,可以在页面保存前后执行自定义逻辑。以下是如何利用该钩子获取页面编辑前后的内容的方法:

使用 MultiContentSave 钩子

首先,需要在扩展中注册 MultiContentSave 钩子。在扩展的主文件中(例如,MyExtension.php),添加以下代码:

<?phpclass MyExtensionHooks {    public static function onMultiContentSave(        RenderedRevision $renderedRevision,        UserIdentity $user,        CommentStoreComment $summary,        $flags,        Status $hookStatus    ) {        // 在此处编写获取页面内容的逻辑        return true;    }}
登录后复制

然后在 extension.json 文件中,注册该钩子:

{  "name": "MyExtension",  "author": "Your Name",  "version": "1.0.0",  "description": "A MediaWiki extension to compare page content before and after edit.",  "Hooks": {    "MultiContentSave": "MyExtensionHooks::onMultiContentSave"  },  "manifest_version": 1}
登录后复制

获取编辑后的内容

在 onMultiContentSave 函数中,可以使用 $renderedRevision 对象来获取编辑后的内容。

$revision = $renderedRevision->getRevision();$title = $revision->getPageAslinkTarget();$new_content = $revision->getContent(SlotRecord::MAIN, RevisionRecord::RAW)->getNativeData();
登录后复制

$new_content 变量现在包含了编辑后的页面内容。

获取编辑前的内容

AI图像编辑器 AI图像编辑器

使用文本提示编辑、变换和增强照片

AI图像编辑器46 查看详情 AI图像编辑器

要获取编辑前的页面内容,需要获取父修订版本(Parent Revision)。

$revision = $renderedRevision->getRevision();$title = $revision->getPageAslinkTarget();// 获取父修订版本 ID$parent_id = $revision->getParentId();// 检查父修订版本是否存在if ($parent_id) {    // 从修订版本 ID 加载修订版本    $previous_revision = RevisionStore::getRevisionById( $parent_id );    // 检查修订版本是否成功加载    if ($previous_revision) {        // 从那里获取内容        $old_content = $previous_revision->getContent( SlotRecord::MAIN, RevisionRecord::RAW );        $old_content_text = $old_content->getNativeData(); // 提取内容    } else {        // 处理无法找到旧版本的情况        error_log("无法找到修订版本 ID: " . $parent_id);    }} else {    // 处理没有父修订版本的情况(例如,页面是第一次创建)    $old_content_text = ""; // 页面是新建的,没有旧内容}
登录后复制

现在,$old_content_text 变量包含了编辑前的页面内容。

完整示例

以下是一个完整的示例,展示了如何在 MultiContentSave 钩子中获取页面编辑前后的内容并进行比较:

<?phpclass MyExtensionHooks {    public static function onMultiContentSave(        RenderedRevision $renderedRevision,        UserIdentity $user,        CommentStoreComment $summary,        $flags,        Status $hookStatus    ) {        $revision = $renderedRevision->getRevision();        $title = $revision->getPageAslinkTarget();        // 获取编辑后的内容        $new_content = $revision->getContent(SlotRecord::MAIN, RevisionRecord::RAW)->getNativeData();        // 获取编辑前的内容        $parent_id = $revision->getParentId();        if ($parent_id) {            $previous_revision = RevisionStore::getRevisionById( $parent_id );            if ($previous_revision) {                $old_content = $previous_revision->getContent(SlotRecord::MAIN, RevisionRecord::RAW );                $old_content_text = $old_content->getNativeData();            } else {                error_log("无法找到修订版本 ID: " . $parent_id);                $old_content_text = "";            }        } else {            $old_content_text = "";        }        // 在这里进行内容比较或其他处理        if ($old_content_text != $new_content) {            // 内容已更改,执行相应操作            error_log("页面 " . $title->getText() . " 的内容已更改。");        }        return true;    }}
登录后复制

注意事项

错误处理: 务必检查 $parent_id 和 $previous_revision 是否为空,以处理页面是第一次创建或旧版本无法找到的情况。性能: 获取旧版本内容可能会影响性能,尤其是在大型wiki上。可以考虑使用缓存来提高性能。权限: 确保扩展具有足够的权限来访问修订版本和内容。

总结

通过使用 MultiContentSave 钩子和 RevisionStore 类,可以方便地获取 MediaWiki 页面编辑前后的内容。这为实现各种扩展功能(如版本比较、内容审计等)提供了强大的基础。请务必注意错误处理和性能优化,以确保扩展的稳定性和效率。

以上就是MediaWiki扩展开发:获取页面编辑前后的内容的详细内容,更多请关注php中文网其它相关文章!

标签: 学php
上一篇: 家用电器行业:当前时点我们如何看家电?
下一篇: 如何在一键PHP环境上部署Vue项目_Vue项目前后端分离

推荐建站资讯

更多>