可以在Moodle上自定义个人资料页而不触及核心


Possible to Customize Profile Page on Moodle without touching core?

有没有办法在moodle中自定义配置文件页而不编辑核心文件?是否有可能覆盖页面并将编辑保留在主题文件中?类似于如何重写渲染器将所有编辑过的渲染文件保存在主题文件夹内?

您可以使用$CFG->customscripts设置来使用profile.php的副本:

创建一个customscripts文件夹

yourmoodlesite/customscripts

Then set

$CFG->customscripts = 'yourmoodlesite/customscripts';

然后在customscripts中创建一个用户文件夹并复制profile.php,这样就有

yourmoodlesite/customscripts/user/profile.php

并删除或注释掉require…config.php行。

现在Moodle将使用/customscripts/user/profile.php查看配置文件

查看yourmoodlesite/config-dist.php了解更多细节

这取决于你想要改变什么。如果是字段名,那么您可以通过管理界面覆盖语言字符串。

如果要添加新的自定义字段,那么可以通过admin> users来完成。

如果它隐藏字段,那么应该可以使用一些自定义CSS规则。

除此之外,你可能需要做一些自定义的核心变化(或开始搞乱的页面布局使用javascript,通过主题注入)。

我能够通过在mypublic.php的主题中构建自定义布局来实现我想要做的事情,然后在这个主题中我包含了另一个php文件,该文件通过全局变量显示了我想要的所有属性:

<?php
       echo '<div id="profilename" class="col-sm-6">';
        function get_content () {
        global $USER, $CFG, $SESSION, $COURSE;
        $wwwroot = '';
        $signup = '';}
        if (empty($CFG->loginhttps)) {
            $wwwroot = $CFG->wwwroot;
        } else {
            $wwwroot = str_replace("http://", "https://", $CFG->wwwroot);
        }

       if (!isloggedin() or isguestuser()) {
       echo '<a href="'.$CFG->wwwroot.'/login/index.php">'.get_string('loggedinnot').'</a>';
       echo '</div>';
       echo '</div>';
       } else {
        echo '<ul id="custom_profileinfo">';
        echo '<li><span>'.get_string('username').': </span>'.'<a href="'.$CFG->wwwroot.'/user/view.php?id='.$USER->id.'&amp;course='.$COURSE->id.'">'.$USER->username.'</a></li>';
        echo '<li><span>'.get_string('firstname').': </span>'.'<a href="'.$CFG->wwwroot.'/user/view.php?id='.$USER->id.'&amp;course='.$COURSE->id.'">'.$USER->firstname.'</a></li>';
        echo '<li><span>'.get_string('lastname').': </span>'.'<a href="'.$CFG->wwwroot.'/user/view.php?id='.$USER->id.'&amp;course='.$COURSE->id.'">'.$USER->lastname.'</a></li>';
        echo '<li><span>'.get_string('email').': </span>'.'<a href="'.$CFG->wwwroot.'/user/view.php?id='.$USER->id.'&amp;course='.$COURSE->id.'">'.$USER->email.'</a></li>';
        echo '<li><a class="edit_profile" href="'.$CFG->wwwroot.'/user/edit.php?id='.$USER->id.'&amp;course='.$COURSE->id.'">'.get_string('updatemyprofile').'</a></li>';
        echo '</ul>';
        echo '</div>';
        echo '</div>';
       }