在Discuz系统中实现投票结束前隐藏结果的需求,可通过以下两种方案实现:
方案一:系统原生功能改造(推荐)
1. 修改模板逻辑:
找到模板文件\template\default\forum\viewthread_poll.htm,在结果展示区域增加时间判断:
- <!--{if $poll['expirations'] && $poll['expirations'] > TIMESTAMP}-->
- <div class="alert">投票进行中,结果将于{echo dgmdate($poll['expirations'], 'Y-m-d H:i')}揭晓</div>
- <!--{else}-->
- [原版结果展示代码]
- <!--{endif}-->
复制代码
2. 加强数据层验证:
在source\module\forum\forum_poll.php中结果输出部分增加时效验证:
- if($poll['expirations'] > TIMESTAMP) {
- showmessage('poll_not_ended', '', array('endtime' => dgmdate($poll['expirations'])));
- }
复制代码
方案二:权限组合方案
1. 用户组策略:
- 后台 → 用户 → 用户组 → 详情 → 论坛相关 → 设置"允许查看投票结果"为否
- 配合"投票后自动升级用户组"插件,使投票后的用户进入新用户组
2. 版块维度控制:
在特定版块的"版块权限"中,取消普通用户的"允许查看投票参与人"权限,配合帖子审核功能实现结果延迟展示
两种方案均需注意:
1. 同步修改手机模板\template\default\touch\forum\viewthread_poll.htm
2. 在forumdisplay列表页增加角标提示:"结果延迟公布"
3. 对历史投票帖做差异化处理,避免影响已结束投票
如果需要进行更精细的权限控制(如按用户UID白名单预览),建议通过钩子机制扩展投票权限模块。这种深度改造需要建立完整的权限校验体系,包括前端展示层、接口层和数据层的统一验证。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |