You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter提交筛选表单后丢失URL分类参数全量展示产品如何解决

问题修复方案

核心问题是筛选表单提交的目标地址未携带当前分类参数,导致控制器无法获取分类标识,分类筛选条件失效。同时原有模型的查询逻辑存在条件优先级错误,会出现跨分类查询的问题,可按以下步骤修改:

1. 修改控制器方法,将当前分类名传递到视图

public function products()
{
    $id = $this->uri->segment(3);
    $material = $this->input->post('material1');       
    $material2 = $this->input->post('material2');
    // 将当前分类名传入视图,用于拼接表单提交地址
    $data['current_cname'] = $id;
    // 把选中的材质也传入视图,用于提交后保留勾选状态
    $data['selected_m1'] = $material;
    $data['selected_m2'] = $material2;
    $data['products'] = $this->product->findAll($id,$material,$material2);
    $this->load->view('products', $data);
}

2. 修改筛选表单的提交地址,携带分类参数

和你原分类跳转的URL结构保持一致,同时添加勾选状态保留逻辑:

<form action="<?php echo base_url('homecontroller/products/'.$current_cname); ?>" method="post">
<input type="checkbox" name="material1" value="cotton" class="form-check-input filled-in" id="new" onChange="this.form.submit()" <?php if($selected_m1 == 'cotton') echo 'checked';?>>
<input type="checkbox" name="material2" value="polyster" class="form-check-input filled-in" id="used" onChange="this.form.submit()" <?php if($selected_m2 == 'polyster') echo 'checked';?>>
</form>

3. 修复模型查询的逻辑错误

原有逻辑的or_where会导致条件优先级错误,会查询出其他分类下匹配材质的产品,需要用分组查询包裹材质筛选条件:

function findAll($id,$material,$material2)
{
    $this->db->where('cname', $id);
    if(!empty($material) || !empty($material2)) {
        // 开启条件分组,保证材质筛选和分类筛选是AND关系
        $this->db->group_start();
            if(!empty($material)) {
                $this->db->where('material', $material);
            }
            if(!empty($material2)) {
                $this->db->or_where('material', $material2);
            }
        $this->db->group_end();
    }
    return $this->db->get('product')->result();
}

内容的提问来源于stack exchange,提问作者Zubi Da

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:48:03