从自己的插件订阅Moodle CMS“测验”模块的事件

问题描述 投票:0回答:1

下午好,我正在为Windows平台上的Moodle平台版本“2023042400”-(4.2.2+)开发自己的插件(文件夹:本地)。

有这样一个需要订阅标准模块“测验”的事件,称为“发送所有内容并完成”。我需要在完成测试后得到所有错误的答案,并在界面中给出额外的信息,但现在我很乐意只签署数据。

使用的编程语言是“PHP”

附注我是这个环境的新手,所以我很乐意详细描述解决方案。

文件路径: \local daptive_quiz ersion.php:

<?php
defined('MOODLE_INTERNAL') || die();

$plugin->version  = 2023090900; //version of plugin
$plugin->requires = 2023042400; //version of moodle
$plugin->pluginname = 'Adaptive Quiz';
$plugin->component = 'local_adaptive_quiz';

我尝试做很多Chat GPT建议我做的事情:

  • 研究 CMS Moodle 源代码。我学过。我意识到CMS在JS中找到这个表单或订阅事件按钮后通过single_button类创建,但我不明白如何自己订阅事件并获取数据。
  • 通过方法名订阅准备好的事件,没有任何反应。
  • 通过$handlers订阅,但他也没有调用该方法。

我通过error_log检查方法,每次都是我通过回调方法——before_footer检查。这里 before_footer 工作正常。

路径:\local daptive_quiz\lib.php:

检查插件可操作性的代码:

<?php
 function local_adaptive_quiz_before_footer(){
    error_log('лог сработал');
    return \core\notification::add('Plugin Local adaptive quiz is worked! v8', 
            \core\output\notification::NOTIFY_SUCCESS);
 }

带有变量“$handlers”的代码:

//code that checks the plugin for operability...

 function local_adaptive_quiz_after_submit($attemptid) {
    error_log('local_adaptive_quiz_after_submit worked');

    //Answer of users...
    $user_responses = "ответы пользователя";

    echo json_encode($user_responses);
}

$handlers = array(
    'quiz_attempt_submitted' => array(
        'handlerfile' => '\local\adaptive_quiz\lib.php',
        'handlerfunction' => 'local_adaptive_quiz_after_submit',
        'schedule' => 'instant',
    ),
);
moodle
1个回答
0
投票

答案其实很简单。需要使用以下路径

\local\{name_your_plugin}\db\events.php
和以下代码来创建:

 $observers = array(
    array(
        'eventname' =>'\mod_quiz\event\attempt_submitted', //name of event
        'includefile' => '\local\adaptive_quiz\classes\attempt_event_submitted_observer.php', //file containing the callback function
        'callback' =>'observe_one', //callback function
        'internal' => false
    ),
 );

沿着我们编写的路径 (

\local\adaptive_quiz\classes\attempt_event_submitted_observer.php
) 创建一个回调函数:

function observe_one($event) {
    echo '<h1>observe_one is worked</h1>';
}

最主要的是你需要通过学生账号查看该功能。否则该功能不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.