ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Moodle TinyMCE 编辑器升级指南:editor_tiny_get_configuration 外部函数与 helplinktext 变更解析

Moodle TinyMCE 编辑器升级指南:editor_tiny_get_configuration 外部函数与 helplinktext 变更解析 教育后端前端【免费下载链接】moodleMoodle - the worlds open source learning platform项目地址https://gitcode.com/gh_mirrors/mo/moodle点击查看免费下载Moodle 的editor_tiny组件将 TinyMCE 以子插件架构整合进编辑器体系其UPGRADING.mdpublic/lib/editor/tiny/UPGRADING.md记录了跨版本对子插件 API 的两次关键调整5.0 新增面向外部服务的配置通道editor_tiny_get_configuration4.5 起helplinktext语言字符串不再是插件必选项。本文以该升级文档为主线结合仓库中的接口、管理器、外部函数与测试源码逐条还原这两项变更的落地方式与迁移要点帮助子插件开发者完成升级。一、editor_tiny 子插件架构速览在深入升级条目之前需要先理解 editor_tiny 的插件模型。所有向编辑器添加按钮、菜单项或配置的 Moodle 插件都必须继承抽象基类\editor_tiny\pluginpublic/lib/editor/tiny/classes/plugin.php并可选实现以下接口plugin_with_buttons向 TinyMCE 工具栏注册按钮plugin_with_menuitems注册菜单项plugin_with_configuration向编辑器注入上下文相关的配置plugin_with_configuration_for_external为外部函数提供配置5.0 新增。基类plugin::get_plugin_info()会按接口实现情况聚合按钮、菜单项与配置plugin::is_enabled()则默认按tiny/{plugin}:use能力位判断插件在当前上下文中是否可用。子插件统一通过tiny_插件名命名空间如tiny_h5p、tiny_media挂载插件清单由\core_component::get_plugin_list_with_class(tiny, plugininfo)枚举。二、5.0 新增editor_tiny_get_configuration 外部函数1. 变更内容与动机升级文档5.0 / Added 节明确新增外部函数editor_tiny_get_configurationTinyMCE 子插件可通过两种方式为它提供配置实现接口plugin_with_configuration_for_external覆盖is_enabled_for_external方法用于控制该插件在外部场景下是否启用。对应 Moodle 核心跟踪项为 MDL-84353。该函数与传统的\editor_tiny\editor::use_editor页面渲染路径有两点本质区别见 get_configuration.php 的类注释它不接收编辑器选项editor options与文件选择器选项filepicker options因此只返回仅依赖站点设置或权限检查的信息它通过 Web Service 外部函数通道返回 JSON 结构可被移动端、LMS 集成方等非页面上下文直接消费。2. 外部函数签名与返回结构外部函数类\editor_tiny\external\get_configurationpublic/lib/editor/tiny/classes/external/get_configuration.php定义如下请求参数参数类型说明contextlevel字符串PARAM_ALPHA上下文层级system、user、coursecat、course、module、blockinstanceid整数PARAM_INT上下文实例 ID如课程 ID返回结构字段类型说明contextid整数解析后的上下文 IDbranding布尔是否显示 TinyMCE logo取editor_tiny插件设置的branding默认trueextendedvalidelements原始字符串扩展合法元素白名单默认script[*],p[*],i[*]installedlanguages数组已安装语言包列表每项含lang语言代码与name语言名plugins数组当前上下文下已启用插件的配置每项含name插件名与settings键值对数组warnings数组标准警告结构其中branding与extendedvalidelements直接读取get_config(editor_tiny)的站点配置语言列表来自get_string_manager()-get_list_of_translations(true)而plugins部分则交由管理器统一计算。3. 管理器get_plugin_configuration_for_external 的聚合逻辑\editor_tiny\manager::get_plugin_configuration_for_external()public/lib/editor/tiny/classes/manager.php#L96-L131是配置聚合的核心。其处理流程可归纳为五步通过get_plugin_list_with_class(tiny, plugininfo)枚举全部子插件用\editor_tiny\plugininfo\tiny::get_enabled_plugins()过滤掉站点级禁用插件校验类是否继承plugin::class否则跳过并输出 DEBUG_DEVELOPER 提示构造[pluginname $pluginname]选项调用$classname::is_enabled_for_external($context, $options)做上下文级启用判断若插件实现了plugin_with_configuration_for_external接口则调用其get_plugin_configuration_for_external($context)获取配置否则返回空数组。最终以$plugins[$pluginname] $pluginconfig形式返回键为去掉tiny_前缀的短插件名值即该插件的配置数组。外部函数层再将其拍平成[{name, settings:[{name, value}]}]结构对外输出。值得注意的是外部通道与页面通道的插件配置来源分离页面通道get_plugin_configuration允许插件依据$options、$fpoptions与$editor实例动态生成配置而外部通道只拿到$context因此需要插件显式实现新接口把仅依赖上下文与权限的那部分配置单独暴露出来。4. 接口定义plugin_with_configuration_for_external接口位于 public/lib/editor/tiny/classes/plugin_with_configuration_for_external.php声明如下namespace editor_tiny; interface plugin_with_configuration_for_external { /** * Get the configuration for external functions provided by this plugin. * * param context $context The context that the editor is used within. * return array */ public static function get_plugin_configuration_for_external(context $context): array; }注意两点实现约束方法与基类中其它配置接口一致采用static声明入参仅$context返回值是任意关联数组键值最终会原样进入外部函数的settings数组。5. 启用开关is_enabled_for_external 的默认与覆盖\editor_tiny\plugin::is_enabled_for_external()public/lib/editor/tiny/classes/plugin.php#L73-L75是基类提供的默认实现public static function is_enabled_for_external(context $context, array $options): bool { return static::is_enabled($context, $options, []); }即默认委托给is_enabled()而is_enabled()会检查tiny/{plugin}:use能力位若该能力不存在则调试告警并放行存在则按上下文做权限判定。因此不需要特殊处理的插件可以不覆盖此方法自动继承能力位校验需要为外部场景单独收紧/放宽权限的插件如 media 插件在无文件存储时自我禁用可覆盖is_enabled_for_external()返回自定义布尔值。manager在聚合时传递的$options仅包含pluginname键覆盖实现时可据此读取短插件名。6. 参考实现tiny_h5p 插件仓库中已实现该接口的插件之一为tiny_h5ppublic/lib/editor/tiny/plugins/h5p/classes/plugininfo.php。其类声明同时实现plugin_with_buttons、plugin_with_menuitems、plugin_with_configuration与plugin_with_configuration_for_external四个接口。外部配置方法如下#[\Override] public static function get_plugin_configuration_for_external(context $context): array { $settings self::get_plugin_configuration_for_context($context, [], []); return [ embedallowed $settings[permissions][embed] ? 1 : 0, uploadallowed $settings[permissions][upload] ? 1 : 0, ]; }它将页面通道中基于has_capability(tiny/h5p:addembed)与has_capability(moodle/h5p:deploy)的能力判断转换成了外部函数可消费的embedallowed/uploadallowed两个字符串标记——这是复用页面配置计算、剥离上下文依赖的典型写法可作为其它子插件实现该接口的模板。7. 测试验证与能力边界单元测试 public/lib/editor/tiny/tests/external/get_configuration_test.php 覆盖了三条代表性路径tiny_h5p实现了get_plugin_configuration_for_external测试断言其返回的 settings 与直接调用接口方法一致tiny_media只覆盖is_enabled_for_external配置为空数组tiny_html两者均未覆盖仅靠默认能力位判定配置同样为空数组。测试数据提供器覆盖system、course、module三种上下文层级以及 guest、student、teacher、editingteacher、manager 等角色组合同时验证了未登录用户在 course/module 上下文会触发require_login_exception非法contextlevel与负数instanceid会抛出invalid_parameter_exception。这从侧面说明了外部函数的能力边界它只做站点配置与权限相关的判断不做登录态之外的前端渲染工作。三、4.5 变更helplinktext 不再必需改用 pluginname1. 变更内容升级文档4.5 / Changed 节指出helplinktext语言字符串不再是编辑器插件必须提供的条目帮助对话框将直接使用pluginname作为展示文本。对应 Moodle 核心跟踪项为 MDL-81572。2. 迁移要求对所有tiny_*子插件而言升级到 4.5 及以上时需要保留pluginname语言字符串lang/en/tiny_插件名.php中的$string[pluginname]它现在同时承担帮助对话框的标题职责可删可留helplinktext删除不会报错因为系统已不再强制读取保留则仍然有效但建议与pluginname保持一致避免帮助入口出现两套文案。从仓库现状看部分插件如 accessibilitychecker、autosave、equation的lang/en文件中仍同时定义pluginname与helplinktext这属于升级过渡期的兼容状态而 aiplacement 等新插件只保留pluginname即为新约定下的标准形态。3. 对主题化的影响帮助对话框文本源从helplinktext切换为pluginname后站点主题或自定义语言包若曾针对某插件的helplinktext做过本地化覆盖需要在 4.5 环境核对pluginname的实际展示效果同时pluginname通常还用于插件管理页Site administration → Plugins的列表展示因此该字符串的改动是全局性的修改时需评估其对管理界面的影响。四、子插件升级实操清单综合两份升级记录tiny_*子插件维护者可按以下清单完成升级升级到 4.5确认lang/en/tiny_插件名.php中pluginname存在且语义准确helplinktext可作为可选条目保留或删除。升级到 5.0如需让移动端或外部服务获取插件配置——在plugininfo类上implements plugin_with_configuration_for_external实现public static function get_plugin_configuration_for_external(context $context): array仅返回依赖站点设置与上下文权限的键值对若外部场景的启用规则与页面场景不同覆盖is_enabled_for_external()否则继承基类默认的能力位校验即可。验证运行 get_configuration_test.php 对应的 PHPUnit 用例确认插件在system/course/module各上下文层级下返回的配置符合预期并检查未登录与非法参数路径的异常行为。五、常见问题Q1外部函数返回的插件配置与页面编辑器拿到的不一致这是设计使然。get_plugin_configuration_for_external只接收$context无法感知页面级$options/$fpoptions/$editor实例若某配置项强依赖页面场景应保留在plugin_with_configuration::get_plugin_configuration_for_context()中外部通道只暴露上下文无关子集。Q2没有实现新接口的插件会被外部函数忽略吗不会。管理器对未实现接口的插件仍会输出[name 插件名, settings []]只是配置为空对未启用含站点禁用、能力位不通过的插件则完全跳过。Q3helplinktext 被删除后帮助按钮是否消失不会。4.5 的帮助对话框改用pluginname渲染标题按钮与对话框本身仍在只是展示文本来源发生变化。Q4如何获取某个课程的编辑器配置以contextlevelcourse、instanceid课程ID调用editor_tiny_get_configuration即可拿到该课程上下文下启用的插件配置、语言列表与站点级编辑器设置。赞分享教育后端前端【免费下载链接】moodleMoodle - the worlds open source learning platform项目地址https://gitcode.com/gh_mirrors/mo/moodle点击查看免费下载相关推荐Moodle系统升级指南与核心变更解析Moodle系统升级指南与核心变更解析 前言 作为全球领先的开源学习管理系统Moodle持续迭代更新以满足现代教育需求。本文将为开发者和系统管理员详细解析Mo教育后端前端Moodle XMLDB 编辑器升级说明tool_xmldb UPGRADING与 rename_field 幂等化改造解析Moodle XMLDB 编辑器升级说明tool_xmldb UPGRADING与 rename_field 幂等化改造解析 本篇技术指南围绕 Moodle教育后端前端Moodle 移动端插件 tool_mobile 升级指南5.2/5.0 关键变更深度解析Moodle 移动端插件 tool_mobile 升级指南5.2/5.0 关键变更深度解析 本篇技术指南聚焦 Moodle 开源学习平台中负责移动应用接入的教育后端前端上一篇turf/line-slice 实战指南用 Turf 精准截取线要素子段下一篇Xonsh 启动参数完全指南从命令行选项、最小启动到终端前台接管创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表