如何从代码中的 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;
如何从 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;