如何从代码中的 moodle 中的自定义配置文件字段中获取值?

How to get value from custom profile field in moodle in code?

如何从 moodle 中的自定义配置文件字段中获取值?
我想在 user.php

中包含配置文件字段

如果要加载所有用户配置文件字段,则可以从用户对象开始

$user = $DB->get_record('user', array('id' => $userid));

然后调用

profile_load_custom_fields($user); 

用所有自定义字段的数组填充 $user->profile。

或者,您可以通过以下方式获取单个配置文件字段的内容:

$sql = "SELECT ud.data 
FROM {user_info_data} ud 
JOIN {user_info_field} uf ON uf.id = ud.fieldid
WHERE ud.userid = :userid AND uf.shortname = :fieldname";
$params = array('userid' =>  $userid, 'fieldname' => 'NameOfCustomField');

$fieldvalue = $DB->get_field_sql($sql, $params);

请注意,此代码是我随手写下的,未经测试,因此其中可能有一些拼写错误。

我终于成功了!!!
$sql = 'SELECT DISTINCT u.id AS userid, u.username, uif.shortname, uid.data FROM prefix_user u JOIN prefix_user_info_data as uid on uid.userid = u.id JOIN prefix_user_info_field as uif on uid.fieldid = uif.id JOIN prefix_user_enrolments ue ON ue.userid = u.id 加入 prefix_enrol e ON e.id = ue.enrolid JOIN prefix_role_assignments ra ON ra.userid = u.id JOIN prefix_context ct ON ct.id = ra.contextid和 ct.contextlevel = 50 JOIN prefix_course c ON c.id = ct.instanceid AND e.courseid = c.id JOIN prefix_role r ON r.id = ra.roleid 其中 uif.shortname = \'fieldname\' 和 u.id ='.$userid;
$records = $DB->get_recordset_sql($sql, array(), $params=null, $limitfrom=0, $limitnum=0);

foreach($records as $record){
$user['fieldname'] = $record->data;
}

您可以使用:

$Data = $USER->profile['YourCustomField'];

自定义字段存储在 'user_info_field' table 中,每个字段和用户的数据存储在 'user_info_data' table 那么您应该知道数据库中的字段 ID 和 select 基于此id的数据:

$field = $DB->get_record('user_info_field', array('shortname' => 'customfieldshortname'));
$fieldvalues = $DB->get_records('user_info_data',array('fieldid' => $field->id));

我希望我的解决方案对任何人都有帮助:

需要这个库

require_once($CFG->dirroot.'/user/profile/lib.php'); 

现在您可以使用:

profile_load_data($USER);
$USER->profile_field_%your_field_name%

示例 $USER->profile_field_HaveAnotherGradeBook;