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

Moodle 4.1:如何通过主题模板与渲染器控制日历添加事件按钮

解决方案

一、通过主题渲染器重写权限检查逻辑

在你的主题目录下创建/修改 classes/renderer.php,继承核心日历渲染器并自定义按钮显示逻辑:

<?php
namespace theme_yourthemename;

defined('MOODLE_INTERNAL') || die();

class renderer extends \core_calendar_renderer {
    public function render_calendar_add_button($context = null) {
        // 检查用户是否在任意课程中拥有calendar:manageownentries权限
        $haspermission = false;
        $courses = enrol_get_users_courses($USER->id, true, 'id');
        
        foreach ($courses as $course) {
            $coursecontext = \context_course::instance($course->id);
            if (has_capability('calendar:manageownentries', $coursecontext)) {
                $haspermission = true;
                break;
            }
        }

        return $haspermission ? parent::render_calendar_add_button($context) : '';
    }
}

二、结合模板控制按钮显示

如果需要更灵活的UI控制,可以同时重写模板:

  1. 在主题目录下创建模板路径 templates/core_calendar/add_button.mustache,复制核心模板内容并添加条件判断:
{{#if haspermission}}
<div class="calendar-add-button">
    <a href="{{addurl}}" class="btn btn-primary">
        {{#str}}add{{#str_params}}event{{/str_params}}{{/str}}
    </a>
</div>
{{/if}}
  1. 回到渲染器,修改方法传递权限变量:
public function render_calendar_add_button($context = null) {
    $data = $this->get_template_data_for_add_button(); // 获取核心模板数据
    $haspermission = false;
    $courses = enrol_get_users_courses($USER->id, true, 'id');
    
    foreach ($courses as $course) {
        $coursecontext = \context_course::instance($course->id);
        if (has_capability('calendar:manageownentries', $coursecontext)) {
            $haspermission = true;
            break;
        }
    }
    
    $data->haspermission = $haspermission;
    return $this->render_from_template('core_calendar/add_button', $data);
}

关键注意事项

  • 将 theme_yourthemename 替换为你实际使用的主题名称
  • 权限检查逻辑可按需调整:比如只检查当前课程权限,或指定教师角色ID
  • 修改后必须清除Moodle缓存(站点管理 → 开发 → 清除缓存)才能生效
  • 确保当前站点已启用该主题

内容的提问来源于stack exchange,提问作者lalit mittal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:25:06