Drupal 7:能否通过现有模块编程在用户个人页展示数据库查询结果
在Drupal 7中实现用户资料页的数据库查询表格展示
当然可以实现这个需求!下面我会带你一步步用代码在现有模块里完成这个功能,完全匹配你的要求:
1. 先配置专属权限
首先通过hook_permission()钩子添加一个自定义权限,这样你就能通过后台权限管理页面精准控制哪些角色能看到这个表格。在你的模块文件(比如mymodule.module)里添加这段代码:
/** * Implements hook_permission(). */ function mymodule_permission() { return array( 'view user profile query table' => array( 'title' => t('查看用户资料页的查询数据表格'), 'description' => t('允许用户查看个人资料页中的数据库查询结果表格'), ), ); }
启用模块后,你就能在admin/people/permissions页面找到这个权限,给需要的角色分配即可。
2. 在用户资料页嵌入查询表格
接下来用hook_user_view()钩子,在用户个人资料页加载时自动执行数据库查询、生成表格并嵌入页面。这里直接把当前查看的用户ID作为查询参数:
/** * Implements hook_user_view(). */ function mymodule_user_view($account, $view_mode, $langcode) { // 先检查当前用户是否拥有查看权限,没有就直接返回 if (!user_access('view user profile query table')) { return; } // 替换成你的实际数据库查询逻辑,这里用当前用户ID作为条件 $result = db_select('your_target_table', 'tt') ->fields('tt', array('field_name_1', 'field_name_2', 'field_name_3')) // 替换成你要展示的字段 ->condition('uid', $account->uid) ->execute() ->fetchAll(); // 如果没有查询结果,就不显示表格 if (empty($result)) { return; } // 构建表格表头 $header = array( t('表头1'), t('表头2'), t('表头3'), ); // 组装表格行数据 $rows = array(); foreach ($result as $row) { $rows[] = array( $row->field_name_1, $row->field_name_2, $row->field_name_3, ); } // 用Drupal内置的theme_table生成标准表格HTML $table_html = theme('table', array( 'header' => $header, 'rows' => $rows, 'attributes' => array('class' => array('user-profile-custom-table')), // 自定义CSS类方便样式调整 )); // 将表格添加到用户资料页的"账户"区域,也可以换成"profile"等其他区域 $account->content['mymodule_custom_table'] = array( '#type' => 'markup', '#markup' => $table_html, '#weight' => 10, // 调整权重控制显示位置,数值越大越靠下 '#title' => t('我的专属数据'), // 表格的标题 ); }
3. 自定义调整小贴士
- 把代码里的
your_target_table、field_name_1/2/3替换成你实际的数据库表名和字段 - 可以修改
#weight值调整表格在资料页的显示顺序 - 如果需要美化表格样式,直接用
user-profile-custom-table这个类写CSS就行 - 如果你更倾向用区块实现,也可以创建自定义区块,把查询和表格生成逻辑放到区块内容里,记得在区块里也要加权限检查,最后把区块放置到用户资料页的对应区域就好
完成这些步骤后,给对应角色分配权限,访问任意用户的个人资料页,就能看到基于该用户ID查询出的表格数据啦!
内容的提问来源于stack exchange,提问作者T. Maxx
相关产品推荐
相关产品推荐

