Moodle:在课程编辑后使用 returnto 查询参数重定向回我的本地插件索引

Moodle: Using the returnto query parameter to redirect back to my local plugins index after course edit

tl;博士;尝试 link 'save and return' 按钮时 editing/deleting 我的本地插件的课程 index.php 而不是 moodles 默认重定向这些功能,moodle 已经有一个 returnTo 查询参数所以我在想是否可以以某种方式使用它。

我正在创建一个具有管理面板的本地插件,您可以在其中访问系统中所有课程的 CRUD,如下图所示:

现在的问题是,每当我点击编辑时,我当然会进入课程编辑页面,但是当我从那里 return 点击 "save and return" 我想回到我的自己的管理页面,而不是课程页面或类别管理页面。

我现在的代码如下所示:

//edit
$edit_course_moodle_url = new moodle_url('/course/edit.php', array('id' => $course->id, 'returnto' => 'local/adminpanel/index.php'));
$edit_course_url = $edit_course_moodle_url->get_path() . '?id=' . $edit_course_moodle_url->get_param('id') . '&returnto=' . $edit_course_moodle_url->get_param('returnto');

//delete
$delete_course_moodle_url = new moodle_url('/course/delete.php', array('id' => $course->id, 'returnto' => 'local/adminpanel/index.php'));
$delete_course_url = $delete_course_moodle_url->get_path() . '?id=' . $delete_course_moodle_url->get_param('id') . '&returnto=' . $delete_course_moodle_url->get_param('returnto');

如您所见,我使用了 "returnto" 查询参数,通常 moodle 有一个“catmanage”作为“returnto”,return 将您归入该类别管理页面,moodle 有自己的类别和课程 CRUD。所以我的问题是,我可以为 link 创建我自己的别名并像 moodle 使用 catmanage link 那样使用它,但我的管理页面会使用它。

非常感谢! :)

编辑:

将代码更改为以下内容:

if (empty($CFG->loginhttps)) {
    $securewwwroot = $CFG->wwwroot;
} else {
    $securewwwroot = str_replace('http:','https:',$CFG->wwwroot);
}
$returnurl = new moodle_url($securewwwroot . '/local/adminpanel/index.php');

$edit_course_moodle_url = new moodle_url($securewwwroot . '/course/edit.php', array(
            'id' => $course->id,
            'sesskey' => sesskey(),
            'returnto' => 'url',
            'returnurl' => $returnurl->out(false))
        );

        $edit_course_url =  $edit_course_moodle_url->out();

但看起来 moodle 从名为 "save and return" 的编辑课程中删除了按钮,现在它只有 "save and display" 或 "Cancel" ,这两个都让我回到了课程,悲伤次 :(

根据我在 course/edit.php 中看到的代码,您应该使用以下 URL 个参数:

  • returnto: 'url'
  • returnurl: url
  • sesskey: sesskey()

在给我们的代码中:

$returnurl = new moodle_url('/local/plugin/page.php');
$editurl = new moodle_url('/course/edit.php', array(
    'id' => 2,
    'sesskey' => sesskey(),
    'returnto' => 'url',
    'returnurl' => $url->out(false)
));
echo $editurl->out();

页面 course/delete.php 似乎不支持这些论点。但是你的插件自己删除课程可能更容易,就像调用 delete_course($courseid);.

一样简单