【问题标题】:Dynamic Filter Pagination Not working in Codeigniter动态过滤器分页在 Codeigniter 中不起作用
【发布时间】:2018-09-14 08:29:16
【问题描述】:

我有一个完美运行的分页列表页面!很好!我在这里看到了很多关于让分页工作的帖子,但我没有看到同样的问题。如果您认为有一个帖子会有所帮助,请直接在那里。

现在我转到同一页面上的一个表单,用户可以在其中“过滤”结果,并且该模型/函数将结果返回到同一页面。虽然搜索结果的分页不起作用。

我的猜测是 Total_rows 需要更改,但我不确定是否是这样。

要更广泛地了解正在发生的事情,heres my repository for it.

控制器

public function searchGiraffe($offset = 0)
{
        // pagination configuration
    $config['base_url'] = base_url() . 'MainForms/searchGiraffe/';
    $config['total_rows'] = $this->session->flashdata('resultcount');//$this->db->count_all('heroes');
    $config['per_page'] = 10;
    $config['uri_segment'] = 3;
    // Init pagination
    $this->pagination->initialize($config);

        $GiraffeName = $_POST['name'];
        $GiraffeWork = $_POST['FieldsOfWork'];
        $GiraffeLocation = $_POST['location'];
        $GiraffeGender = $_POST['gender'];
        $GiraffeAge = $_POST['age'];
        $GiraffeOccupation = $_POST['occupation'];

        $data = array('h_name' => $GiraffeName,
                        'type_of_activism1' => $GiraffeWork,
                        'type_of_activism2' => $GiraffeWork,
                        'type_of_activism3' => $GiraffeWork,
                        'global_area_1' => $GiraffeLocation,
                        'global_area_2' => $GiraffeLocation,
                        'state_1' => $GiraffeLocation,
                        'state_2' => $GiraffeLocation,
                        'gender' => $GiraffeGender,
                        'age' => $GiraffeAge,
                        'occupation' => $GiraffeOccupation); // end of array

    $results = $this->Main_model->searchForGiraffe($data,$config['per_page'],$offset);
    //$count = $this->Main_model->countForGiraffe($data);

    if($results != null)
    {
        $data['g_heroes'] = $results;
        //$this->girafferesult($results);
        $this->load->view('header');
        $this->load->view('heroes/find-giraffe',$data);
        $this->load->view('footer');

    } //end if
    else
    {
        $data['g_heroes'] = 'error';
        $this->load->view('header');
        $this->load->view('heroes/find-giraffe',$data);
        $this->load->view('footer');

    }

}  // end of SearchGiraffe() 

模型

public function searchForGiraffe($data,$limit = FALSE,$offset = FALSE){

    if($limit){

        $this->db->limit($limit,$offset);

    }
    $search_for = array();

    foreach($data as $key => $value){
        if(!empty($value) && $value != 'Select'){
            array_push($search_for, $key);

        }else{
            // do nothing
        }
    }

    $counter = 1;
    $filter = 'SELECT * FROM heroes WHERE ';

foreach($data as $key => $search){
    if(!empty($search) && $search != 'Select'){
        if($counter < count($search_for)){

            if($key == 'type_of_activism1' || $key == 'global_area_1'){

                $filter .= '(' . $key . '="' . $search . '" OR ';

            }else if($key == 'type_of_activism2' || $key == 'global_area_2' || $key == 'country_2' || $key == 'state_1' || $key == 'country_1'){

                $filter .= $key . '="' . $search . '" OR ';

            }else if($key == 'type_of_activism3'){

                $filter .= $key . '="' . $search . '") AND ';

            }else if($key == 'state_2'){

                $filter .= $key . '="' . $search . '") AND ';

            }
            else
            {

                $filter .= $key . '="' . $search . '" AND ';

            }

            $counter = $counter + 1;

        }else if($counter == 3 && $key == 'type_of_activism3'){

            $filter .= $key . '="' . $search . '")';

        }else{
            $filter .= $key . '="' . $search . '"';
        }
    }else{
        // do nothing
    }

} // end of foreach($data as $search)

    $result = $this->db->query($filter);
    $count = $result->num_rows();
    $this->session->set_flashdata('resultcount', $count);

    return($result->result());

} // end searchForGiraffe

对于我的最后一个技巧,视图:

 <main id="find">
<?php 
    if(isset($g_heroes)){
        foreach($g_heroes as $row){
?>
<section class="giraffe">
    <div class="ghero">
        <a href="view-giraffe/<?php echo $row->id; ?>">
            <?php echo $row->h_name; ?>
        </a>
    </div>

    <div class="intro">
    <?php echo $row->blurb; ?>
    </div>


</section>
    <?php

        } // end of foreach

    } // end of else
echo '<div id="pagination">';
echo $this->pagination->create_links();
echo '</div>';
?>

【问题讨论】:

    标签: php codeigniter search pagination codeigniter-3


    【解决方案1】:

    分页创建链接系统

    假设您总共有 30 行,每页 10 行 如果你设置一个过滤器,你会得到 20 行总共 2 页

    当您单击数字“2”时,您正在刷新帖子,并且您发布的数字为 2,没有过滤器,因此数据库为您提供第 2 页,共 3 页

    你可以使用会话来解决这个问题

    if ($this->input->get()) {
        $postdata = array(
                        'GiraffeName' =>   $_POST['name'],
                        'GiraffeWork' =>  $_POST['FieldsOfWork'],
                        'GiraffeLocation' => $_POST['location'],
                        'GiraffeGender' => $_POST['gender'],
                        'GiraffeAge' => $_POST['age'],
                        'GiraffeOccupation' =>  $_POST['occupation'],
                    );
    
                    $this->session->set_userdata($postdata);
             }
                    $GiraffeName = $this->session->userdata('GiraffeName');
                    $GiraffeWork = $this->session->userdata('GiraffeWork');
                    $GiraffeLocation = $this->session->userdata('GiraffeLocation');
                    $GiraffeGender = $this->session->userdata('GiraffeGender');
                    $GiraffeAge = $this->session->userdata('GiraffeAge');
                    $GiraffeName = $this->session->userdata('GiraffeName');
                    $GiraffeOccupation = $this->session->userdata('GiraffeOccupation');
    

    【讨论】:

    • 非常感谢!我会试一试的!我会告诉你进展如何!
    【解决方案2】:

    虽然上一个答案帮助我解决了另一个问题。

    我还弄清楚了为什么分页不起作用。

    由于我必须使用表单和数据库表,我有一个构建动态 SELECT 语句的函数,然后我使用 $this->db-query() 运行 SQL 语句。

    这意味着我的 $this->db->limit() 不起作用,它与 codeigniters $this->db->get() 一起工作。

    所以我在模型中添加了一行,在其中将限制和偏移量添加到 SQL 语句。

    现在它开始工作了!

    【讨论】:

      猜你喜欢
      • 2017-03-05
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多