【问题标题】:How to create custom filter option box in datatables, Codeigniter如何在数据表中创建自定义过滤器选项框,Codeigniter
【发布时间】:2018-01-24 06:48:27
【问题描述】:

如何在数据表中创建自定义数据过滤器?,

如果我在选项框中选择其中一行:

那么datatables会在datatables中显示选项框的值:

这是我想要在自定义搜索中使用的示例:

终于我的自定义搜索成功了

我在数据库中显示与表部门连接的数据(部门)

在我的数据表中,我在数据库中使用了表 emp

这是我的代码选项框

<div class="row">
    <div class="col-md-6">
      <form action="<?=site_url('proses/pindah_departemen');?>" method="get">
        <div class="panel panel-primary">
            <div class="panel-heading">Filter Data</div>
            <div class="panel-body">
                <table class="table table-bordered">
                    <tr>
                        <td width="20%">Pilih Departemen</td>
                        <td width="30%">
                            <select class="form-control" name="filter_departemen">
                                <option value="" <?php if(empty($this->input->get('filter_departemen'))) echo 'selected';?>>Show All data</option>
                                <?php
                                foreach($groups as $city)
                                {
                                    $selected = $this->input->get('filter_departemen')==$city['dept_id_auto'] ? 'selected':'';
                                    echo '<option value="'.$city['dept_id_auto'].'" '.$selected.'>'.$city['dept_name'].'</option>';
                                }
                                ?> 
                            </select>
                        </td>
                    </tr>
                </table>
            </div>
            <div class="panel-footer text-right">
                <button type="submit" class="btn btn-primary">Tampilkan Data</button>
            </div>
        </div>
      </form>
    </div>
  </div>

这是我的控制器命名(散文):

public function pindah_departemen()
{
    $data = array(
        'title'     => 'Pindah Departemen',
        'data' => $this->Pindah_dept_model->GetSiswa($this->input->get('filter_departemen'))
    );

    $data['groups'] = $this->Pindah_dept_model->getAllGroups();

    $this->template->load('template','proses/pindah_departemen', $data);
}

我的模型命名为 (Pindah_dept_model):

var $table = 'emp';

public function GetSiswa()
{
    /*i dont know exactly  your query. please fix this is this wrong*/
    $this->db->select(array('emp_id', 'first_name', 'nik', 'gender', 'pin', 'dept_name'))
        ->from('emp AS e')
        ->join('dept AS d','d.dept_id_auto = e.dept_id_auto', 'left');
    if(!empty($dep)) $this->db->where('d.dept_id_auto', $dep); 
    $data = $this->db->order_by('emp_id','ASC')->get();
    return $data->result_array();
}

public function getAllGroups()
{
    $query = $this->db->query('SELECT dept_id_auto,dept_name FROM dept');
    return $query->result_array();
}

【问题讨论】:

  • wew..你不使用ajax吗?真的吗?
  • 如果我写了新的代码,你从中学到了什么?因为如果我回答这个问题,它完全没用,因为你不明白如何正确地做到这一点
  • 好的,兄弟,我等着

标签: php jquery codeigniter datatable datatables


【解决方案1】:

您的过滤器 html

<div class="row">
    <div class="col-md-6">
        <form action="<?=site_url('proses/pindah_departemen');?>" method="get">
            <div class="panel panel-primary">
                <div class="panel-heading">Filter Data</div>
                <div class="panel-body">
                    <table class="table table-bordered">
                        <tr>
                            <td width="20%">Pilih Departemen</td>
                            <td width="30%">
                                <select class="form-control" name="filter_departemen">
                                    <option value="" <?php if(empty($this->input->get('filter_departemen'))) echo 'selected';?>>Show All data</option>
                                    <?php
                                    foreach($groups as $city)
                                    {
                                        $selected = $this->input->get('filter_departemen')==$city['dept_id_auto'] ? 'selected':'';
                                        echo '<option value="'.$city['dept_id_auto'].'" '.$selected.'>'.$city['dept_name'].'</option>';
                                    }
                                    ?> 
                                </select>
                            </td>
                        </tr>
                    </table>
                </div>
                <div class="panel-footer text-right">
                    <button type="submit" class="btn btn-primary">Tampilkan Data</button>
                </div>
            </div>
        </form>
    </div>
</div>

你的控制器

public function pindah_departemen()
{
    // MASUKKAN PARAMETER DATA DISINI, BIASANYA HASIL DARI QUERY
    $data = array(
            'title'     => 'Pindah Departemen',
            'data' => $this->Pindah_dept_model->GetSiswa($this->input->get('filter_departemen'))
        );
    $data['groups'] = $this->Pindah_dept_model->getAllGroups();
    $this->template->load('template','proses/pindah_departemen', $data);
}

你的模型

var $table = 'emp';

public function GetSiswa($dep=NULL)
{
    $this->db->select(array('emp_id', 'first_name', 'nik', 'gender', 'pin', 'dept_name')) //or select(array('emp_id, first_name, nik, gender, pin, dept_name')
        ->from('emp AS e')
        ->join('dept AS d','d.dept_id_auto = e.dept_id_auto', 'left');
    if(!empty($dep)) $this->db->where('dept_id_auto', $dep);
    $data = $this->db->order_by('emp_id','ASC')->get();
    return $data->result_array();
}

public function getAllGroups()
{
    $query = $this->db->query('SELECT dept_id_auto,dept_name FROM dept');
    return $query->result_array();
}

public function get_by_id_siswa($id)
{
    $this->db->from($this->table);
    $this->db->where('emp_id',$id);
    $query = $this->db->get();

    return $query->row();
}

建议:下一次,请在再次构建新应用之前学习 jquery 和 ajax。

【讨论】:

  • wew.. 我只知道我的问题是否与eiji 完全相同。只有 5% 不同。但没关系。如果我的答案解决了您的问题,请检查 Eiji 答案(不是我的)
  • 写这段代码真的完全没用。因为您最好使用 ajax 而不是本机来解决这个问题。使用 ajax,您可以这样做:keenthemes.com/preview/metronic/theme/admin_1/… 但很遗憾,我现在很困,无法创建 ajax 示例。无论如何,如果您需要帮助,请加入我们kask.us/ikiNI
  • 请检查我的新帖子兄弟,它仍然错误,谢谢之前
  • 找到这一行并更改为:if(!empty($dep)) $this-&gt;db-&gt;where('d.dept_id_auto', $dep); ps:我现在正在使用手机。编辑不好。我只是在 dept_id_auto 前面添加d
  • 查看我的最新帖子,这仅适用于数据表,无法显示数据库中的数据
【解决方案2】:

如果我正确理解了这个问题,您想从选择框中的“getAllGroup”函数上添加一个过滤器。如果我错了,请纠正我。

  1. 您应该为选择添加一个名称,我将其命名为“dept_filter”。

    <div class="row">
      <div class="col-md-6">
        <div class="panel panel-primary">
            <div class="panel-heading">Filter Data</div>
            <form action="" method="post">
            <div class="panel-body">
                      <table class="table table-bordered">
                <tr>
                  <td width="20%">Pilih Departemen</td>
                  <td width="30%">
                    <select class="form-control" name="dept_filter">
                      <?php
                        foreach($groups as $city)
                        {
                            echo '<option value="'.$city['dept_id_auto'].'">'.$city['dept_name'].'</option>';
                        }
                      ?> 
                    </select>
                  </td>
                </tr>
              </table>          
            </div>
            <div class="panel-footer text-right">
              <input type="submit" class="btn btn-primary" value="Tampilkan Data">
            </div>
            </form>
          </div>
        </div>
      </div>
    
  2. 在您的 Proses 控制器中:

    public function pindah_departemen()
    {
    
        //we take the current selected option (return false when none)
        $filter_dept = $this->input->post('dept_filter');
    
        //and we pass it to the model
        $data = array(
            'title'     => 'Pindah Departemen',
            'data' => $this->Pindah_dept_model->GetSiswa($filter_dept)
        );
        $data['groups'] = $this->Pindah_dept_model->getAllGroups();
    
        $this->template->load('template','proses/pindah_departemen', $data);
    }
    
  3. 在您的模型中:我已将您的 sql 查询转换为 codeigniter 查询构建器语法。

        /*to avoid any conflict if this function is used anywhere else, 
        I made the param optionnal, so if there is none, 
        the filter is set to "false"*/
        public function GetSiswa($filter = FALSE)
        {
    
            $this->db->select();
            $this->db->from($this->table); //here "emp"
            //do the same join as your query
            $this->db->join('dept', 'debt.dept_id_auto = emp.dept_id_auto'); 
    
            //when the filter isn't false, we add a "where" condition
            if($filter){
                $this->db->where("dept_id_auto", $filter);
            }
    
            $this->db->order_by("emp_id", "DESC");
    
            $query = $this->db->get();
    
            return $data->result_array();
        }
    

更新:代码已更新到当前问题。

Udpate2:在 SQL where 条件中将“dept_name”更改为“dept_id_auto”

**更新3:**通过添加表单标签修复HTML

如果你没有好的结果:

  1. &lt;select&gt;...&lt;/select&gt; 中有 &lt;form&gt; 吗?
  2. 您是否在您的&lt;form&gt; 中使用method="post"
  3. 您能否检查您是否在控制器中收到发布数据 var_dump($this-&gt;input-&gt;post());
  4. 能否通过添加行来检查 GetSiswa() 函数中当前运行的查询 echo $this-&gt;db-&gt;last_query(); 就在返回之前?

【讨论】:

  • 感谢您的回复,但我的意思是,如果您在下拉列表中选择其中一行并单击“显示数据”按钮,数据表将重新加载并显示您想要的数据。例如,如果您在下拉列中选择“STAFF”,则数据表将重新加载并在列中显示值为“STAFF”的数据部门
  • 我已经编辑了我的帖子,请再次查看,请帮助我修复我的代码
  • 请给我你的表“emp”的数据库结构
  • 我已经编辑了我的帖子,请再看一遍,请帮助我
  • 好的,所以。您必须通过他们的“dept_id”过滤您的列表“员工”。所以主要的工作是在 GetSiswa 中做,我们必须在你当前的请求中添加一个过滤器。我正在努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 2020-04-28
  • 1970-01-01
  • 2023-04-07
  • 2019-04-04
  • 2012-04-30
  • 1970-01-01
相关资源
最近更新 更多