如何在Vtiger 7 CRM中用Vtlib函数创建PHP自定义函数按角色获取用户
在Vtiger 7中创建基于角色获取所有用户的Vtlib自定义函数
你可以通过Vtiger内置的PearDatabase类(Vtlib核心数据库操作类)实现这个需求,以下是完整的自定义函数实现步骤和代码:
1. 函数实现代码
将以下代码添加到你的Vtiger自定义文件中(比如include/CustomUtils.php,如果没有就新建该文件,确保被系统加载):
<?php /** * 根据角色ID获取该角色下的所有用户 * @param string $roleId 目标角色的ID(来自vtiger_role表的roleid字段) * @return array 包含用户信息的数组,每个元素是用户的键值对(id, user_name, email等) */ function getUsersByRoleId($roleId) { // 获取Vtiger数据库实例 $db = PearDatabase::getInstance(); // 构造查询SQL:关联用户表和用户-角色关联表 $sql = "SELECT u.id, u.user_name, u.email, u.first_name, u.last_name FROM vtiger_users u INNER JOIN vtiger_user2role ur ON u.id = ur.userid WHERE ur.roleid = ? AND u.status = 'Active'"; // 只查询活跃用户,可按需调整 // 执行查询,绑定角色ID参数防止SQL注入 $result = $db->pquery($sql, [$roleId]); $users = []; // 遍历结果集,组装用户数据 if ($db->num_rows($result) > 0) { while ($row = $db->fetchByAssoc($result)) { $users[] = $row; } } return $users; } ?>
2. 关键部分说明
PearDatabase::getInstance():这是Vtlib推荐的数据库操作方式,确保和Vtiger的数据库连接逻辑保持一致,避免兼容性问题。- SQL关联查询:通过
vtiger_user2role中间表关联用户表和角色表,精准获取指定角色下的用户。 - 参数绑定:使用
pquery并传入参数数组,避免SQL注入风险,是Vtiger开发的最佳实践。 - 活跃用户过滤:默认只返回状态为
Active的用户,若需要包含禁用用户,可移除AND u.status = 'Active'语句。
3. 调用示例
在自定义模块或业务逻辑中,可这样调用函数:
// 替换为你实际的目标角色ID $roleId = "12x3"; $roleUsers = getUsersByRoleId($roleId); // 遍历输出用户信息 foreach ($roleUsers as $user) { echo "用户ID: {$user['id']}, 用户名: {$user['user_name']}, 邮箱: {$user['email']}<br>"; }
4. 注意事项
- 确保自定义文件能被Vtiger正确加载,比如在
config.inc.php末尾添加include_once('include/CustomUtils.php');实现全局引入。 - 调用函数的用户需具备访问用户数据的权限,否则会因Vtiger权限机制限制返回空结果。
- 角色ID可从Vtiger后台角色管理页面获取,或通过查询
vtiger_role表得到。
内容的提问来源于stack exchange,提问作者Santosh Kumar
相关产品推荐
相关产品推荐

