要实现分区下默认显示指定数量的子版块,并可通过点击展开全部,可通过模板修改结合前端交互实现。以下是具体实现方案:
========== 技术方案 ==========
1. 模板文件修改:
找到模板文件 template/default/forum/discuz.htm 约第105行附近(不同版本可能位置不同):
原代码:
- <!--{loop $forum['subforums'] $subfid}-->
- <!--{eval $subforum = $_G['forum'][$subfid];}-->
- <!--{subtemplate forum/forumdisplay_subforum}-->
- <!--{/loop}-->
复制代码
修改后:
- <!--{eval $show_limit = 6; $total_count = count($forum['subforums']);}-->
- <!--{loop $forum['subforums'] $key $subfid}-->
- <!--{if $key < $show_limit}-->
- <!--{eval $subforum = $_G['forum'][$subfid];}-->
- <!--{subtemplate forum/forumdisplay_subforum}-->
- <!--{/if}-->
- <!--{/loop}-->
- <!--{if $total_count > $show_limit}-->
- <div class="expand_trigger" style="cursor:pointer;color:#369;padding:8px;" onclick="toggleExpand(this, {$total_count})">
- <i class="fico-expand fc-l"></i>
- 展开剩余{$total_count-$show_limit}个版块
- </div>
- <div class="expand_content" style="display:none;">
- <!--{loop $forum['subforums'] $key $subfid}-->
- <!--{if $key >= $show_limit}-->
- <!--{eval $subforum = $_G['forum'][$subfid];}-->
- <!--{subtemplate forum/forumdisplay_subforum}-->
- <!--{/if}-->
- <!--{/loop}-->
- </div>
- <!--{/if}-->
复制代码
2. 添加JavaScript交互:
在页面底部模板 footer.htm 中添加:
- <script>
- function toggleExpand(obj, total) {
- var container = obj.parentNode;
- container.querySelector('.expand_content').style.display = 'block';
- container.querySelector('.expand_trigger').style.display = 'none';
-
- // 自动展开后调整分区高度
- if(typeof window.forumDisplayAdjustHeight === 'function') {
- forumDisplayAdjustHeight();
- }
- }
- </script>
复制代码
3. CSS样式优化(添加到css模板):
- .expand_content .forumdisplay_subforum {
- animation: fadeIn 0.3s ease-in;
- }
- @keyframes fadeIn {
- from { opacity: 0; }
- to { opacity: 1; }
- }
复制代码
========== 实现原理 ==========
1. 使用模板条件判断分割显示版块
2. 通过$show_limit变量控制初始显示数量
3. 利用DOM操作实现展开交互
4. 保留Discuz原有样式和功能
========== 注意事项 ==========
1. 修改前务必备份原始模板文件
2. 不同模板风格可能需要调整选择器
3. 若使用CDN缓存需要更新缓存
4. 开启调试模式时效果更直观(后台→全局→站点功能)
========== 扩展优化 ==========
如需更复杂的显示控制(如:不同分区设置不同数量),可通过以下方式增强:
1. 创建分区扩展字段:
- // 在插件或source/function/function_admincp.php中添加
- $extend = array(
- 'show_limit' => array(
- 'title' => '版块显示数量',
- 'type' => 'text'
- )
- );
- C::t('common_forum_field')->add_field($extend);
复制代码
2. 模板调用改为:
- <!--{eval
- $show_limit = !empty($_G['forum']['extfields']['show_limit']) ? intval($_G['forum']['extfields']['show_limit']) : 6;
- }-->
复制代码
该方案无需安装插件即可实现,且兼容Discuz X3.4/X3.5全系列版本。如需更复杂的功能扩展,可基于Discuz插件机制开发独立功能模块。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |