根据用户角色创建CSS类
Create CSS classes based on user role
使用 Moodle 3.9 和当前 Academi 主题的分支。
我正在尝试根据用户的角色在 <body>
元素上创建 css class 挂钩。我知道用户的角色是上下文驱动的(可能是一门课程的学生,而另一门课程的其他人),所以对于给定的上下文,我会将所有角色输出为 classes。
基于对 moodle 论坛的广泛挖掘,我有以下几点:
// 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');
}
我最好在每一页上 运行 都这样。在主题中,我尝试将它放在几乎每个 location/function 中,我认为可以尽早执行以修改 body 元素。要么我根本没有输出,要么收到一条警告,表明现在 运行 add_body_class().
已经太晚了
覆盖当前主题模板核心渲染器上的 header() 函数,例如 theme\YOUR_THEME\classes\output\core_renderer。php:
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 (is_array($roles) && !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 类 添加到正文标记中。
使用 Moodle 3.9 和当前 Academi 主题的分支。
我正在尝试根据用户的角色在 <body>
元素上创建 css class 挂钩。我知道用户的角色是上下文驱动的(可能是一门课程的学生,而另一门课程的其他人),所以对于给定的上下文,我会将所有角色输出为 classes。
基于对 moodle 论坛的广泛挖掘,我有以下几点:
// 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');
}
我最好在每一页上 运行 都这样。在主题中,我尝试将它放在几乎每个 location/function 中,我认为可以尽早执行以修改 body 元素。要么我根本没有输出,要么收到一条警告,表明现在 运行 add_body_class().
已经太晚了覆盖当前主题模板核心渲染器上的 header() 函数,例如 theme\YOUR_THEME\classes\output\core_renderer。php:
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 (is_array($roles) && !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 类 添加到正文标记中。