在Discuz分类信息发布页面调用用户信息,需要特别注意模板变量的作用域和加载时机。以下是具体解决方案:
1. **用户信息调用方法**:
- 核心用户字段可直接通过`$_G['member']`调用,例如:
- $_G['member']['uid'] // 用户ID
- $_G['member']['email'] // 邮箱
- $_G['member']['regdate'] // 注册时间
复制代码
2. **自定义字段处理**:
- 确认在【用户→栏目管理】已开启「在帖子中显示」选项
- 通过`profile`方法获取扩展字段:
- loadcache('profilesetting');
- $profile = C::t('common_member_profile')->fetch($_G['uid']);
复制代码
3. **模板变量注入**:
在`/source/module/forum/forum_post.php`的_post_edit_extra方法中追加:
- if($_G['uid']) {
- loadcache('profilesetting');
- $profile = C::t('common_member_profile')->fetch($_G['uid']);
- $profile = array_merge((array)$_G['member'], (array)$profile);
- foreach($profile as $k=>$v){
- if(strpos($k,'field_') === 0){
- $k = substr($k,6);
- }
- $this->config['var']['member'][$k] = $v;
- }
- }
复制代码
4. **模板调用方式**:
在发布页模板(如:`post_editor_extra.htm`)使用:
- <!--{if $_G['uid']}-->
- <div class="user-custom-field">
- 用户公司:{$_G['member']['company']}
- 联系电话:{echo output_phone($_G['member']['mobile'])} <!-- 手机号脱敏示例 -->
- </div>
- <!--{/if}-->
复制代码
5. **字段处理函数**:
在`/source/function/function_profile.php`追加数据处理方法:
- function output_phone($str) {
- return substr($str,0,3).'****'.substr($str,7);
- }
复制代码
6. **特殊场景处理**:
- 对手机号、地址等敏感字段建议做前端脱敏处理
- 使用`<!--{eval var_dump($_G['member'])}-->`调试输出完整用户数据
- 启用「模版调试模式」排查变量加载问题
注意:如果调用企业字段等复杂数据,建议通过Hook机制在`post_editor_extra`钩子点挂载自定义处理逻辑,避免直接修改核心文件。建议在DZ插件网查阅《Discuz! X3.4二次开发手册》获取更多字段处理技巧。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |