如何在Moodle Mustache模板调用PHP函数?课程筛选插件问题求助
关于Moodle区块插件课程筛选功能的开发问题
我正在开发Moodle区块插件的下拉菜单课程筛选功能,计划的实现步骤如下:
- 在模板中使用select元素
- 在JS文件中处理select的onchange事件
- 在事件处理器中携带查询参数调用PHP文件
- 在PHP函数中使用查询参数
目前已完成前两步,但第三步和第四步遇到以下问题:
- 使用
$('[data-action="language-select"]').load('/blocks/course_overview_page/block_course_overview_page.php?language=' + $('[data-action="language-select"]').val())调用PHP文件时,页面无跳转反应,但直接在浏览器地址栏打开该URL却能正常工作。 - 编写了
controller.php用于处理数据库请求,在插件基础文件中引入后调用,出现错误提示缺少继承的block_base类。
怀疑操作有误或选择的实现方案不合适,希望得到解决帮助。
代码片段
filter.mustache
<select name="language-select" data-action="language-select"> {{#languages}} <option value="{{.}}">{{.}}</option> {{/languages}} </select>
filter.js
window.onload = init; function init() { /* load base plugin file and send language as query param */ $('[data-action="language-select"]').change(function() { console.log($('[data-action="language-select"]').val()); $('[data-action="language-select"]').load('/blocks/course_overview_page/block_course_overview_page.php?language=' + $('[data-action="language-select"]').val()); }); }
block_course_overview_page.php
require_once(__DIR__ . '/db/controller.php'); require_once($CFG->libdir . '/pagelib.php'); class block_course_overview_page extends block_base { public function get_content() { global $CFG, $OUTPUT, $PAGE; if ($this->content !== null) { return $this->content; } $this->content = new stdClass(); /* load js script to handle events */ $PAGE->requires->js(new moodle_url('/blocks/course_overview_page/js/filter.js')); $languageoptions = get_languages(); /* get language from query params */ $selectedlanguage = optional_param('language', 0, PARAM_INT); if ($selectedlanguage) { get_filtered_courses($selectedlanguage); } /* data object is necessary to wrap courses list for iteration inside template */ $data = (object)[ 'courses' => array_values(get_all_courses_for_overview()), 'languages' => $languageoptions ]; /* render template and pass data */ $this->content->text = $OUTPUT->render_from_template('block_course_overview_page/cards', $data); return $this->content; } }
内容的提问来源于stack exchange,提问作者J. Unkrass
相关产品推荐
相关产品推荐

