标签归档:moodle_dev

让moodle支持Google Analytics

Google Analytics是一个很好用的网站访问数据统计、分析工具。Moodle有一个支持它的版块——Google analytics block。但并不是所有页面都能加入版块。还有一种方法是修改主题(theme)的footer.html文件,但是如果允许课程、用户自选主题的话,就要每个主题都修改,很麻烦。所以我做了下面这个补丁。

Index: lib/weblib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/weblib.php,v
retrieving revision 1.970.2.166
diff -r1.970.2.166 weblib.php
3072a3073,3088
> /// Hack by sunner@gmail.com to include google analytics tracking code
>     $gscripts = '
> <script type="text/javascript">
>     var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
>     document.write(unescape("%3Cscript src=\'" + gaJsHost + "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));
> </script>
> <script type="text/javascript">
>     try {
>         var pageTracker = _gat._getTracker("UA-xxxxxxx-x");   //Chang UA-xxxxxxx-x into your own GA id
>         pageTracker._trackPageview();
>     } catch(err) {}</script>
> ';
>     $footers = explode('</body>', $output, 2);
>     $output = $footers[0] . $gscripts . '</body>' . $footers[1];
> /// Hack ends
>

显示学号的moodle补丁

曾经问过moodle的开发者,为什么用户资料中的学号(idnumber)在整套系统中都几乎被忽略。得到的回答是,学号在西方高校属于个人隐私,通过它可以获得一些秘密信息,所以不能随便公开。但中国不是这样,很多的管理都需要通过学号进行。所以,我在cms.hit.edu.cn上设定了注册时强制输入学号。但这个信息只有在看用户资料的时候才能看到,很多时候挺不方便。于是有了这个补丁,它会在学生全名的前面加上学号,例如:(96510103)张三。

Index: lib/moodlelib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/moodlelib.php,v
retrieving revision 1.960.2.137
diff -r1.960.2.137 moodlelib.php
2686c2686
<         return $user->firstname .' '. $user->lastname;
---
>         $fullname = $user->firstname .' '. $user->lastname;
2689c2689
<         return $user->lastname .' '. $user->firstname;
---
>         $fullname = $user->lastname .' '. $user->firstname;
2693c2693
<             return get_string('fullnamedisplay', '', $user);
---
>             $fullname = get_string('fullnamedisplay', '', $user);
2695c2695
<             return $user->firstname;
---
>             $fullname = $user->firstname;
2699c2699,2705
<     return get_string('fullnamedisplay', '', $user);
---
>     $fullname = get_string('fullnamedisplay', '', $user);
>
>     if (!empty($user->idnumber)) {
>         $fullname = "($user->idnumber)" . $fullname;
>     }
>
>     return $fullname;

不过,并不是所有显示姓名的地方都会把idnumber从数据库查询出来。所以如果想在某个特定地方看到学号,就必须得修改相关代码,select的时候包含上idnumber。

让Moodle支持多域名、多IP

Moodle内所有的链接都是绝对地址,通过config.php文件中的$CFG->wwwroot定义根位置。这使网站无法支持多域名、多IP。

比如,http://cms.hit.edu.cn的IP是202.118.253.67。为方便被割裂到校园网外的学生访问,现在想给它加一个网通IP,61.167.60.4,绑定在域名http://cms-hit.sunner.cn上。一切都配置好之后,访问http://cms-hit.sunner.cn,再继续点击链接,就都被指向http://cms.hit.edu.cn了。网通IP形同虚设。

解决办法:在config.php文件中加上这样一段代码:

if ($_SERVER['HTTP_HOST'] == 'cms-hit.sunner.cn')
    $CFG-&gt;wwwroot   = 'http://cms-hit.sunner.cn';
else
    $CFG-&gt;wwwroot   = 'http://cms.hit.edu.cn';

也可以干脆直接:

$CFG-&gt;wwwroot  =  'http://' . $_SERVER['HTTP_HOST'];