moodle - 如何在moodle-3.7 中创建自定义注册插件?
问题描述
如何在 Moodle-3.7 中创建自定义注册插件?
解决方案
好吧,假设我们要创建一个名为“myenrol”的新注册方法插件。
- 在目录中创建一个
enrol
名为myenrol
. - 在
enrol/myenrol
创建文件version.php
. 此文件包含有关您的插件名称和当前版本的基本信息(Moodle 使用它来跟踪您的插件版本和运行任何升级方法的需要)。例子:
<?php
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'enrol_myenrol'; // Full name of the plugin (used for diagnostics)
$plugin->release = '0.1.0';
$plugin->version = 2019072900; // The current plugin version (Date: YYYYMMDDXX)
$plugin->requires = 2018120300; // Requires this Moodle version
$plugin->maturity = MATURITY_ALPHA;
- 在
enrol/myenrol
创建文件lib.php
. 这(通常)是任何注册方法插件中最重要的文件,因为在这里您将定义处理“注册”实例的方法,例如:您可以定义其他插件可以用来创建“myplugin 注册实例”的方法与用户和课程相关,您可以定义权限检查以允许/禁止创建/删除这些实例等。您需要编写的最小样板代码如下:
<?php
defined('MOODLE_INTERNAL') || die();
class enrol_myenrol_plugin extends enrol_plugin {
public function use_standard_editing_ui() {
return true;
}
public function edit_instance_form($instance, MoodleQuickForm $mform, $context) {
// Do nothing by default.
}
public function edit_instance_validation($data, $files, $instance, $context) {
debugging('enrol_plugin::edit_instance_validation() is missing. This plugin has no validation!', DEBUG_DEVELOPER);
return array();
}
public function can_add_instance($courseid) {
return true;
}
}
- 创建文件夹
lang
并en
遵循结构:enrol/myenrol/lang/en
最后enrol_myenrol.php
是en
. 在这里,您至少需要为“pluginname”编写字符串:
<?php
defined('MOODLE_INTERNAL') || die();
$string['pluginname'] = 'My Enrolment Plugin';
请注意,这种插件最重要的部分(通常)是在 lib.php 中公开某种逻辑(公共方法),以允许其他插件或子系统在给定某些条件(即您的插件必须验证)。例如:手动注册插件允许管理员/经理通过逐一选择用户来创建注册实例,群组注册插件允许课程管理员通过选择群组(其中列出了用户)来创建注册实例等。不要忘记一个注册实例是我们在 Moodle 中用来表示用户对课程具有某种访问权限(具有特定角色,如教师、学生等)。
推荐阅读
- javascript - 如何使用 vanilla javscript 自定义引导表单验证?
- python - 不支持 - 元组和整数
- c# - 从 C# 中的不同脚本访问实例
- docker - 为什么 docker stack deploy 找不到本地镜像?
- db2 - 未找到具有兼容参数的“FUNCTION”类型的名为“JSON_ARRAYAGG”的授权例程
- r - 将代码作为参数传递给 R 函数
- asp.net-core - 使用约定不显眼模式找不到 NServiceBus 通用消息处理程序
- kubernetes - 在 statefulset 中执行到 CrashLoopBackoff 容器中
- kvm - 如何修改KVM创建的windows的CPUID返回值
- azure-active-directory - 如何通过 Azure Identity Java SDK 刷新 TokenCredential / ClientSecretCredential 提供的访问令牌?