高级搜索在codeigniator中使用分页

时间:2016-06-14 11:31:40

标签: php codeigniter pagination

我想使用session设置所有高级搜索参数如何在时间设置所有参数。

我正在使用以下功能,但它只在时间设置一个参数如何在时间设置所有参数

public function searchterm_handler($searchterm)
  { 
   if($searchterm)
    {
        $this->session->set_userdata('searchterm', $searchterm);
        return $searchterm;
    }
    elseif($this->session->userdata('searchterm'))
    {
        $searchterm = $this->session->userdata('searchterm');
        return $searchterm;
    }
    else
    {
        $searchterm ="";

        return $searchterm;
    } }

1 个答案:

答案 0 :(得分:0)

方法一(推荐)

因此,对于CodeIgniter中的分页,您必须设置3个主要变量以及要调用的配置方法。您还必须加载库。

图书馆是$this->load->library('pagination');

3个变量和配置如下所示:

//This next line is used mainly so the page number links on your pagination work.
$config['base_url'] = 'http://example.com/index.php/test/page/';
$config['total_rows'] = $NumberOfRecords;
$config['per_page'] = 20;

$this->pagination->initialize($config);

如果您使用的是 MVC ,那么这很简单。您可以在 controller 中使用上述代码,从第n行开始抓取您想要显示的数据,其中n是page number * $config['per_page'],结束于((page number * $config['per_page']) + $config['per_page'])-1

获取必要的数据后,您可以将该链接代码返回到您的视图。链接代码为$this->pagination->create_links();

所以你的回报可能是这样的:

$data["results"] = $this->MyModel->MySqlMethod($config["per_page"], $CurrentPage);
$data["links"] = $this->pagination->create_links();

然后在您的视图中,您将遍历$data["results"],在循环之后,您将显示$data["links"]

这会显示您的数据,然后底部的分页看起来像

enter image description here

所以你的控制器应该像:

$config['base_url'] = 'http://example.com/index.php/controllerName/ViewName/';
$config['total_rows'] = $NumberOfRecords;
$config['per_page'] = 20;

$this->pagination->initialize($config);
$data["results"] = $this->MyModel->MySqlMethod($config["per_page"], $CurrentPage);
$data["links"] = $this->pagination->create_links();

return $this->load->view("ViewName", $data);

方法二(不推荐)

现在你提到了一些关于在Session Variables中存储数据的内容。我的意思是,如果你想要你可以做到这一点。如果您打算使用该方法,那么告诉您不使用MVC。 CodeIgniter适用于MVC。如果您不使用MVC,那么您可能不需要CodeIgniter。如果您习惯使用CodeIgniter并且不想尝试实现MVC,请务必继续。

要在此方法中执行CodeIgniter分页,您将更改公共searchterm_handler($ searchterm)函数。会话变量的内容是它们存储在用户浏览器中,这样您(程序员)就可以在站点的任何位置访问它们,而无需返回并将它们从类传递给类或方法传递给方法。如果您设置了一个会话变量,那么您将返回该变量,这是一个冗余且不必要的。

你真的不需要这种方法,这是不必要的,但你可以这样做:

public function searchterm_handler($searchterm) { 
   $result = mysqli_query("SELECT count(*) FROM User_info");
   $row = mysqli_fetch_row($result);
   $TotalDataCount = $row[0];
   $this->session->set_userdata("TotalDataCount", $TotalDataCount);
   $this->session->set_userdata("RecordsPerPage", 20);
   $this->session->set_userdata("BaseURL", www.example.com/link/to/your/page.php);
   $this->pagination->initialize($config);

   if($searchterm) {
        $this->session->set_userdata('searchterm', $searchterm);
        //Unnecessary
        //return $searchterm;
    } else {
       $this->session->set_userdata('searchterm', "");
        //return $searchterm;
    }
}

然后在调用searchterm_handler($searchterm)的代码中,您将执行此操作:

searchterm_handler($input);
$searchterm = $this->session->userdata('searchterm');
$dataToReturn = array();
if($searchterm!="") {
   $result = mysqli_query("SELECT * FROM table WHERE field LIKE '%$this->session->userdata('searchterm')%'");
   if($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
    }
} else {
    echo "0 results";
}
echo $this->pagination->create_links();

让我知道你

第二种方法,粗糙,丑陋,令人讨厌,写得非常糟糕。写下你想要写的东西没有真正好的方法。使用CodeIgniter的目的是为了MVC并内置CodeIgniter功能,当你摆脱MVC时,你几乎失去了它。

我知道我有可能误解你要做什么,但这是我最好的猜测。我最好的建议是在CodeIgniter中使用MVC。

如果您使用第一种方法,以下是一些可能对您有帮助的来源:

https://www.sitepoint.com/pagination-with-codeigniter/

https://www.codeigniter.com/userguide3/libraries/pagination.html

我希望这有帮助,我花了很多时间写它......

更新 - 方法3

我试着再次查看你的问题,也许这会有所帮助

public function searchterm_handler($searchterm)
  { 
   if($searchterm && $this->session->userdata('email'))
    { //user logged in
        $this->session->set_userdata('searchterm', $searchterm);
        $array = array(
                "searchterm" => $searchterm,
                "email" => $this->session->userdata('email'),
                "username" => $this->session->userdata('username') 
        );
        return $array;
    } 
    else if($searchterm && !$this->session->userdata('searchterm'))
    { //user not logged in
        $this->session->set_userdata('searchterm', $searchterm);
        return $searchterm;
    }
    elseif($this->session->userdata('searchterm') && $this->session->userdata('searchterm')) 
    { //user logged in
         $searchterm = $this->session->userdata('searchterm');
        $array = array(
                "searchterm" => $searchterm,
                "email" => $this->session->userdata('email'),
                "username" => $this->session->userdata('username') 
        );
        return $array;
    }
    elseif($this->session->userdata('searchterm') && !$this->session->userdata('searchterm')) 
    { //user not logged in
        $searchterm = $this->session->userdata('searchterm');
        return $searchterm;
    }
    else
    {
        $searchterm ="";

        return $searchterm;
    } }

对不起,如果可以的话,我是在手机上做的