首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于用户角色创建CSS类

基于用户角色创建CSS类
EN

Stack Overflow用户
提问于 2020-09-26 23:00:05
回答 1查看 273关注 0票数 0

使用Moodle3.9和当前Academi主题的一个分支。

我正在尝试在基于用户角色的<body>元素上创建一个css类钩子。我知道用户的角色是上下文驱动的(可能是一门课程中的学生,另一门课程中的其他角色),因此我会将所有角色输出为给定上下文的类。

基于对moodle论坛的广泛挖掘,我有以下几点看法:

代码语言:javascript
复制
// User role based CSS classes
global $USER, $PAGE;
$context = context_system::instance();
$roles = get_user_roles($context, $USER->id, true);
if(is_array($roles)) {
    foreach($roles as $role) {
        $PAGE->add_body_class('role-'.$role->shortname);
    }
} else {
        $PAGE->add_body_class('role-none');
}

最好是在每一页上都能运行。在主题中,我尝试将它放在我认为可以尽早执行的每个位置/函数中,以便修改body元素。我要么根本没有得到任何输出,要么得到一个警告,表明运行add_body_class()已经太晚了。

我已经大致了解了PageOutput API,但我仍然不知道如何或何时执行这段代码。这应该是一个自定义插件吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-20 14:43:19

覆盖当前主题模板的核心呈现器上的header()函数,例如在theme\YOUR_THEME\classes\output\core_renderer.php:上

代码语言:javascript
复制
    namespace theme_YOUR_THEME\output;

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

    class core_renderer extends \theme_boost\output\core_renderer {
        public function header() {
            global $USER;
        
            $roles = get_user_roles(context_system::instance(),$USER->id);
            if (!empty($roles)){
                 foreach($roles as $role){
                     $this->page->add_body_class('role-'.$role->shortname);
                 }
             }else{
                 $this->page->add_body_class('role-none');
             }
        
            return parent::header();
        }
    }

这样,每个页面都会调用此函数,并将所需的css类添加到body标记中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64079136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档