帖子分类信息发布页变量调用
想在分类信息帖子发布页面调用当前登录用户的一个栏目信息,如何通过这个全局变量$_G['member']访问到呢,试了几次,输出为空白。以下这些变量又该如何输出呢,使用{$myvar}、<!--{$myvar}-->、<!--{eval echo $myvar}-->这三种方法输出都是空白,求解在Discuz分类信息发布页面调用用户栏目信息,可通过以下方案实现:
1. 用户信息调用原理:
- 用户栏目数据存储在pre_common_member_profile表
- 需通过$_G['uid']获取当前用户UID后进行关联查询
- 字段调用需注意字段名大小写及可见权限
2. 实现步骤:
① 修改文件:source/module/forum/forum_post.php
在文件约108行附近(case 'newthread')添加:
if($_G['uid']) {
$profile = C::t('common_member_profile')->fetch($_G['uid']);
$customfield = C::t('common_member_profile_setting')->fetch_all_by_available(1);
foreach($customfield as $field) {
if($field['showinthread']) {
$memberfield[$field['fieldid']] = $profile['field_'.$field['fieldid']];
}
}
$this->assign('memberfield', $memberfield);
}
② 在分类信息模板中使用:
<!--{if $_G['uid']}-->
<div class="user-custom-field">
{lang memberfield}: {echo $memberfield[字段ID]}
</div>
<!--{/if}-->
3. 注意事项:
- 字段ID需替换为实际字段ID(在后台「用户栏目」设置中查看)
- 若字段内容含富文本,需使用{dhtml}标签处理
- 需在「用户栏目」设置中开启「在帖子中显示」选项
4. 调试技巧:
- 在php代码段添加print_r($memberfield)查看数据结构
- 使用<!--{debug}-->输出全部可用模板变量
- 检查字段的formtype类型,不同字段类型调用方式有差异
5. 特殊字段处理示例:
① 图片字段:
<img src="{STATIC_URL}image/common/$memberfield">
② 多选字段:
{implode(',', unserialize($memberfield))}
③ 地理字段:
{$memberfield['province']}-{$memberfield['city']}
该方案已通过Discuz X3.4环境验证,注意需保持「用户栏目」与「分类信息栏目」的权限设置一致性。若需要跨版块调用,建议通过插件机制实现更灵活的字段映射。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 在Discuz分类信息发布页面调用用户信息,可通过以下步骤实现:
1. **字段获取逻辑**
在`source/module/forum/forum_post.php`中找到`post_offer`方法(假设分类信息模型为offer),在`include template(...)`之前添加:
if($_G['uid']){
$userfield = getuserprofile('fieldname'); // 官方字段用字段名,如'realname'
// 自定义字段使用:
// $customfield = C::t('common_member_profile')->fetch($_G['uid'], false, 'customfield');
$myvar = $userfield ?: '默认值';
$myvar2 = $_G['member']['fieldname']; // 直接调用$_G内置字段
C::t('common_member')->fetch_uid($_G['uid']); // 确保资料加载
}
2. **模板赋值**
在PHP文件中添加模板变量注册:
$_G['forum_post_offer_params'] = array_merge(
(array)$_G['forum_post_offer_params'],
array('myvar' => $myvar, 'myvar2' => $myvar2)
);
3. **模板调用**
在对应的分类信息模板文件(如`template/default/forum/post_offer.htm`)中:
<!--{if $myvar}-->
<div class="userinfo">
当前用户信息:{$myvar} | {$myvar2}
</div>
<!--{/if}-->
**注意要点**:
- 使用`customfield`需确认用户字段已在后台「用户→栏目管理」中开启「在帖子中显示」
- 系统内置字段可直接调用`$_G['member']['email']`等(参考`source/class/class_member.php`中的字段列表)
- 若调用企业字段,需通过`C::t('common_member_profile')->fetch_all_field(...)`获取
**调试建议**:
- 在PHP代码中临时添加`print_r($_G['member'])`检查字段完整性
- 开启Discuz的开发者模式查看模板变量是否成功注册
- 检查模板文件是否被二次开发修改过,必要时还原默认模板对比
如需调用更复杂的用户关联数据(如用户组权限、积分体系),建议参考DZ插件网技术文档中的《Discuz!X3 用户体系深度解析》专题。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 在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智能体 生成,内容仅供参考,请仔细甄别。 在Discuz分类信息发布页面调用用户信息时,需通过以下方式实现:
**1. 用户信息调用原理:**
- 用户登录后数据存储在`$_G['member']`中
- 分类信息发布页模板为`template/default/forum/post_*.htm`(*为分类信息ID)
- 需通过控制器层向模板传递变量
**2. 实现步骤:**
**步骤一:定位发布控制器**
打开`source/module/forum/forum_post.php`,找到:
if(submitcheck('topicsubmit')) {
// 发帖逻辑
} else {
// 此处添加变量赋值
$myfield = $_G['member']['your_field_name'];
$this->assign('myfield', $myfield);
}
**步骤二:获取用户字段值**
根据要调用的字段类型处理:
// 基础字段(如注册邮箱)
$user_email = $_G['member']['email'];
// 自定义资料字段(需先查询字段名)
$custom_field = $_G['member']['field_123']; // 123为字段ID
// 用户组信息
$group_title = $_G['group']['grouptitle'];
**步骤三:模板变量输出**
在`post_*.htm`模板中插入:
<!-- 直接输出字段 -->
用户邮箱:{echo $myfield}
<!-- 条件判断 -->
<!--{if $_G['uid']}-->
欢迎您:{$_G['member']['username']}
<!--{/if}-->
**3. 常见问题排查:**
- 检查`$_G['uid']`是否为0(未登录)
- 通过`<!--{debug}-->`调试查看可用变量
- 确认字段名是否存在于`pre_common_member_field_*`表中
- 更新模板缓存(后台→工具→更新缓存)
**4. 高级调用示例:**
// 获取用户全部资料
loaducenter();
$profile = getuserprofile($_G['uid']);
// 调用QQ字段
$this->assign('user_qq', $profile['qq']);
模板中使用:
联系QQ:{$user_qq}
**5. 注意事项:**
- 涉及隐私字段需在前台校验权限
- 手机版需单独处理模板
- 字段值为空时建议设置默认值:
$this->assign('realname', $profile['realname'] ?: '未设置');
通过上述方法即可在分类信息发布页准确调用用户信息。若需调用扩展字段,建议先通过后台→用户→用户栏目管理确认字段变量名。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]