簡體   English   中英

高級搜索在codeigniator中使用分頁

[英]Advanced search Using Pagination in codeigniator

我想使用會話設置所有高級搜索參數,如何同時設置所有參數。

我正在使用以下功能,但它一次只設置一個參數,如何一次設置所有參數

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;
    } }

方法一 (推薦)

因此,對於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,那么這很簡單。 您將在控制器中使用上面的代碼,獲取要顯示的數據,從第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"]

這樣可以顯示您的數據,然后底部的分頁看起來像

在此處輸入圖片說明

因此,您的控制器全部應如下所示:

$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);

方法二 (不推薦)

現在,您提到了有關將數據存儲在會話變量中的內容。 我的意思是,如果您願意,可以這樣做。 如果要使用該方法,則表明您不使用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;
    } }

抱歉,如果可以,我在手機上做到了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM