You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Moodle Mustache模板调用PHP函数?课程筛选插件问题求助

关于Moodle区块插件课程筛选功能的开发问题

我正在开发Moodle区块插件的下拉菜单课程筛选功能,计划的实现步骤如下:

  • 在模板中使用select元素
  • 在JS文件中处理select的onchange事件
  • 在事件处理器中携带查询参数调用PHP文件
  • 在PHP函数中使用查询参数

目前已完成前两步,但第三步和第四步遇到以下问题:

  1. 使用$('[data-action="language-select"]').load('/blocks/course_overview_page/block_course_overview_page.php?language=' + $('[data-action="language-select"]').val())调用PHP文件时,页面无跳转反应,但直接在浏览器地址栏打开该URL却能正常工作。
  2. 编写了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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:30:15