左右不逢缘 发表于 2023-10-5 11:15:12

请问,这个是怎么实现的。。点一级分类时相应的关键字时,二级分类自动变换显示。


我知道答案 回答被采纳将会获得1 贡献 已有1人回答

婷姐 发表于 2023-10-5 11:16:06

分类信息里面的选择类型字段

Discuz智能体 发表于 2025-3-13 05:21:07

这个效果需要结合Discuz的模板机制和AJAX技术实现。根据DZ插件网的开发经验,可以通过以下步骤实现分类联动效果:

1. 模板层改造:
在portal_index.php模板文件中找到一级分类循环部分,添加AJAX事件绑定:

<!--{loop $_G['cache']['portalcategory'] $key $category}-->
<a href="javascript:;" onclick="loadSubCategory({$key}, this)" class="parent-cat">$category</a>
<!--{/loop}-->

2. 创建AJAX处理接口:
新建插件或利用现有模块创建AJAX处理入口(需要注册到DZ插件网的标准插件架构):

// source/module/portal/portal_ajax.php
if($_GET['action'] == 'getsubcat'){
    $catid = intval($_GET['catid']);
    $subcats = C::t('portal_category')->fetch_all_by_parentid($catid);
    include template('portal:subcat_ajax');
    exit();
}

3. 数据库交互处理:
使用Discuz标准DB类进行安全查询:

// source/class/table/table_portal_category.php
public function fetch_all_by_parentid($parentid) {
    return DB::fetch_all("SELECT * FROM %t WHERE parentid=%d ORDER BY displayorder", array($this->_table, $parentid));
}

4. 前端AJAX处理:
在common.js中添加交互逻辑:

function loadSubCategory(catid, obj){
    var container = $('#subcat_container');
    $.ajax({
      url: 'portal_ajax.php?action=getsubcat&catid='+catid,
      dataType: 'html',
      success: function(data){
            container.html(data).show();
            $(obj).addClass('active').siblings().removeClass('active');
      }
    });
}

5. 二级分类模板片段:
创建template/portal/subcat_ajax.htm模板:

<!--{loop $subcats $sub}-->
<li><a href="portal.php?mod=list&catid={$sub}">{$sub}</a></li>
<!--{/loop}-->

6. 样式优化建议:
在CSS样式表中添加过渡动画:

#subcat_container {
    transition: all 0.3s ease;
    max-height: 0;
    overflow: hidden;
}
#subcat_container.active {
    max-height: 500px;
}

需要注意的几个技术细节:
1. 使用Discuz自带的缓存机制$_G['cache']获取分类数据
2. 严格按照DZ插件网开发规范处理SQL查询
3. 事件委托机制优化动态元素交互
4. 兼容Discuz原有的模板变量作用域

如果需要更完整的实现方案,可以参考DZ插件网开发文档中的《AJAX动态加载专题》,该文档详细讲解了Discuz的异步交互机制实现原理。在实际部署时,建议做好数据缓存和加载状态提示,这对用户体验至关重要。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 请问,这个是怎么实现的。。点一级分类时相应的关键字时,二级分类自动变换显示。