2016-06-14 37 views
0

我想使用會話設置所有高級搜索參數如何在時間設置所有參數。高級搜索在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; 
    } } 
+0

我想嘗試回答你的問題上,但我很困惑的你在問什麼。糾正我,如果我錯了。您希望用戶能夠輸入一個搜索詞,它應該保存在$ searchterm和會話中的userdata中。存儲之後,您想要設置內置分頁的CodeIgniter?如果我是對的,我想我可以幫忙。請讓我知道。 – Jwags

+0

我想在會話中設置多個變量。所以在分頁我可以使用該變量在下一頁 – riya

+0

太多的細節丟失,你不明白你在這裏問什麼。 「高級搜索參數」是什麼意思?你提供的代碼和問題本身有什麼分頁? '$ searchterm'包含什麼,如果它是一個數組,它將被存儲在會話中。 – jtheman

回答

0

方法一(推薦)

所以對於笨,你分頁有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"]

這給你的數據顯示,然後在底部的分頁看起來像

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

方法二(不推薦)

現在你提到一些有關存儲在會話變量數據。我的意思是如果你想你可以做到這一點。如果你打算使用這種方法,那就告訴你沒有使用MVC。 CodeIgniter用於MVC。如果你不使用MVC,那麼你可能不需要CodeIgniter。如果你對使用CodeIgniter感到滿意,並且不想嘗試和實現MVC,那麼一定要繼續。

要在此方法中執行CodeIgniter分頁,您需要更改公共searchterm_handler($ searchterm)函數。會話變量的事情是它們存儲在用戶瀏覽器中,這樣程序員就可以在站點的任何位置訪問它們,而無需返回並將它們從類傳遞到類或方法。如果你設置了一個會話變量,那麼你會返回它,這是重複的和不必要的。

你並不真的需要這個方法,這是不必要的,但你可以做這樣的事情:在調用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($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(); 

讓我用舊YOU

這個第二種方法很粗糙,很醜陋,而且寫得很糟糕。沒有真正的好方法來寫你想寫的東西。使用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; 
    } } 

對不起,如果這是可能的,我做到了我的電話

+0

感謝您的幫助..但它是沒有用的 – riya

+0

這是不是你在找什麼?如果你進一步詳細描述你的答案,我可以嘗試和幫助! – Jwags

+0

我用另一個解決方案更新了我的答案 – Jwags