学号,在国内的用处非常的大,就像身份证一样,用户的唯一标识。但在国外,学号却是非常隐私的,注册时既不是必填项,选填项都谈不上,只有在用户编辑个人资料时,在可选项中有学号的选项,与网页、ICQ号码、Skype号码、机构、系别、电话等在一起,显得可有可无。在国内,我们就非常的不适应,因为学号是唯一的,本人一直在思考这个问题,主要是想添加学号字段,并能在名单、作业、成绩等列表中能实现按学号排序的功能。
随着时间的推移,Moodle慢慢 走向国际化,学号慢慢也突显起来,不仅在用户列表、课程成员列表占有一席之地,在成绩列表也有学号的一栏。所有,Moodle搜集学号也非常有必要了。
学号,既不需要添加用户自定义字段,因为,Moodle本身就带有,学号——idnumber,早就存在于mdl_user表里,一直闲置。
如何拿到学号,最最直接的方式,就是注册、且必填。
经过翻越代码,做如下修改即可:
moodle\login\signup_form.php
添加如下代码:
$mform->addElement('text', 'idnumber', get_string('idnumber'), 'maxlength="255" size="25"');
$mform->setType('idnumber', core_user::get_property_type('idnumber'));
$mform->addRule('idnumber', get_string('required'), 'required', null, 'client');
$mform->setForceLtr('idnumber');
遗憾的时,idnumber为必填项了,不能提示“学号没填”,仅显示“必须的”,关键是没有解决
$mform->addRule('idnumber', get_string('required'), 'required', null, 'client');
get_string('missingidnumber');不能正确解析,尝试过修改moodle\lang\en\moodle.php,添加$string['missinglastname'] = 'Missing surname';然并卵,只能用“required”。
备注:
//You have couple of options:
//Use server side rules and check them in php code (implement method validation in form class).
$mform->addRule('fieldname', get_string('required'), 'required');
//Use client side rules but do not force them
$mform->addRule('fieldname', get_string('required'), 'required', '', 'client', false, false);
虽然这个问题解决了,但这个办法却不是一劳永逸的,每次Moodle一升级,就得改代码。
另外一个折中办法,就是直接导入注册用户,excel表中加入idnumber字段。