ThinkPhp框架:分頁查詢和補充框架知識


上一篇的隨筆寫的是基本操作,現在可以做一些高級操作,例如有條件的查詢數據,有分頁的條件查詢數據

一、一個條件的查詢數據

查詢數據自然是先要顯示出數據,然后根據條件進行查詢數據

(1)顯示出表的數據

這個方法我還是寫在了HomeController.class控制器文件中

(1.1)寫了一個方法shouye()

public function shouye()
{
    $n = M("nation");	//數據庫中的表
    $arr = $n->select();  //查詢表中的所有數據
    $this->assign("shuju",$arr);  //將二維數組注入變量
    $this->show();  //顯示數據
}

(1.2)方法寫完了之后,下面就是寫顯示頁面了,這個名字和方法名一致

這里我們用表格來顯示一下數據

<table width="50%" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td>代號</td>
        <td>名稱</td>
        <td>操作</td>
    </tr>
<!--注意:這里的循環沒有{}這是和smarty模板的區別--> <foreach name="shuju" item="v" > <!--參數name是php頁面中的注入的名字,item是賦值的量--> <tr> <td>{$v.code}</td> <!--這就是顯示的code列--> <td>{$v.name}</td> <!--這是顯示的name列--> <td>操作</td> </tr> </foreach> </table>

下面運行看下效果:注意地址欄的書寫:http://localhost/tp/index.php/Home/Home/shouye

(2)添加查詢條件

(2.1)這樣的話就要添加查詢的文本框和查詢按鈕了,我們添加在表的前面

這里用表單來寫,因為提交嘛,所以用表單進行寫

<form action="__ACTION__" method="post">
    <div>
        根據名稱查詢:<input type="text" name="name" />
        <input type="submit" value="查詢"/>
    </div>
</form>        

看下顯示效果

(2.2)顯示出來之后,就是后面的處理頁面了

這個查詢和添加、修改的邏輯處理方式還不一樣,這里就不用if判斷了

public function shouye()
{
    $tj = " 1=1 "; //條件恆成立
    if(!empty($_POST["name"]))  //判斷傳過來的name值是不是空的
    {
        $name = $_POST["name"];  
        $tj = " Name like '%{$name}%' ";  //修改$tj的值
    }
    $n = M("nation");	
    $arr = $n->where($tj)->select();  //因為是tp框架,所以直接可以調用這個條件,用where()方法
    $this->assign("shuju",$arr);
    $this->show();
}        

這樣運行一下,然后查看一下結果

查詢一下“回”的信息,可以實現這個查詢

(2.3)可以在這個查詢中添加分頁,也就是分頁的顯示

1.這里我們引用一下以前寫過的page分頁的類,先把這個page的類放到自己的模塊下面,我放在了這里

打開這個類文件,修改一下命名空間如下所示:

然后關閉就可以了。

2.在shouye()方法中調用Page類

  2.1首先要調用這個page類

  2.2這個類要有兩個參數:分頁的總條數,顯示的條數

$page = new \Home\shuju\page($zts,2);  //第一個參數:數據總條數;第二個參數是顯示幾條

  2.3總條數:查詢也是要顯示總條數

$zts = $n->where($tj)->count();  //總條數也要包括查詢

  2.4在limit這里要對源文件,進行修改

$page->limit;  //LIMIT 10,3

  這樣的話會多着個limit,那么在page.class.php源文件中刪除就可以

  2.5查詢所有條件時加上這個limit($page->limit)方法

$arr = $n->where($tj)->limit($page->limit)->select();

  2.6注入變量(將分頁的信息顯示信息注入)

$this->assign("fenye",$page->fpage());  //page的fpage分頁的顯示信息

看下總的這個shouye()的方法,上面的綜合

public function shouye()
{
  $tj = " 1=1 ";
  if(!empty($_POST["name"]))
  {
    $name = $_POST["name"];
    $tj = " Name like '%{$name}%' ";	
  }		
  $n = M("nation");	
  $zts = $n->where($tj)->count();  //總條數也要包括查詢
		
  $page = new \Home\shuju\page($zts,2);  //第一個參數:數據總條數;第二個參數是顯示幾條
  //$page->limit;  //LIMIT 10,3
		
  $arr = $n->where($tj)->limit($page->limit)->select();  //這是顯示的分頁
  $this->assign("shuju",$arr);  //注入變量(總的數據的)
  $this->assign("fenye",$page->fpage());  //注入變量(分頁的顯示信息)
  $this->show();
}

  2.7在顯示頁面,顯示這個變量

<div>{$fenye}</div>

看先運行結果,是有了分頁信息

但是這樣有個缺陷,就是在查詢一個條件時,第一條是顯示的總條數是正確的額,但是后面的是錯誤的,那么就是要修改代碼

注意:將數據的傳輸方式修改(post修改為get)

3.查詢的文本框顯示默認值

這里在條件恆成立下,定義一個name值為空,然后在注入變量

在顯示頁面的文本框的中,添加value值是前面注入的變量

注意:

1.看下完整的php頁面的代碼

public function shouye()
{
      $tj = " 1=1 ";
      $name = "";
  if(!empty($_POST["name"]))
  {
    $name = $_POST["name"];
    $tj = " Name like '%{$name}%' ";	
  }		
  $n = M("nation");	
  $zts = $n->where($tj)->count();  //總條數也要包括查詢
		
  $page = new \Home\shuju\page($zts,2);  //第一個參數:數據總條數;第二個參數是顯示幾條
  //$page->limit;  //LIMIT 10,3
		
  $arr = $n->where($tj)->limit($page->limit)->select();  //這是顯示的分頁
  $this->assign("shuju",$arr);  //注入變量(總的數據的)
  $this->assign("fenye",$page->fpage());  //注入變量(分頁的顯示信息)
      $this->assign("name",$name);  //將name的值注入變量     
  $this->show();
}

2.顯示頁面的整體內容

<form action="__ACTION__" method="get">
     <div>
        根據名稱查詢:<input type="text" name="name"  value="{$name}"/>
        <input type="submit" value="查詢"/>
    </div>
</form>
<br />
<table width="50%" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td>代號</td>
        <td>名稱</td>
        <td>操作</td>
    </tr>
            
    <foreach name="shuju" item="v" >
        <tr>
            <td>{$v.code}</td>
            <td>{$v.name}</td>
            <td>操作</td>
        </tr>
    </foreach>
</table>
        
<div>{$fenye}</div>        

這樣總的效果就已經結束了

進行查詢后,文本框顯示查詢的名字,顯示的條數也是會變換的

二、數據取值方式

1.寫一個方法,來進行數據的傳值差別:正常的GET方式取值

public function testget()
{
    echo $_GET["name"];	
}

在瀏覽器的地址欄地址中輸入:

(1)后面是:?名稱="值"

1.沒有傳值的話是空

http://localhost/tp/index.php/Home/Home/testget

輸出就是空的:

 

2.有值的傳值

http://localhost/tp/index.php/Home/Home/testget?name=%22%E4%BD%A0%E5%A5%BD%22

這樣就會輸出:你好

(2)后面是路徑的方式:/名稱/值

地址欄中輸入:

http://localhost/tp/index.php/Home/Home/testget/name/qqqqqq

輸出結果

注意:傳多值就是/名字/值/名字/值

2.給方法賦值的方式取值

public function testget($code)
{
  echo $code;		
}

 

三、session方法和cookie方法

(1)session方法

1.默認情況下,初始化之后系統會自動啟動session,如果不希望系統自動啟動session的話,可以設置SESSION_AUTO_START為false,例如:

'SESSION_AUTO_START' =>false

關閉自動啟動后可以項目的公共文件或者在控制器中通過手動調用session_start或者session('[start]')啟動session。

2.session賦值

session('name','value');  //設置session

3.session判斷

// 判斷名稱為name的session值是否已經設置
session('?name');

4.session管理

session('[pause]'); // 暫停session寫入
session('[start]'); // 啟動session
session('[destroy]'); // 銷毀session
session('[regenerate]'); // 重新生成session id

(2)cookie方法

Cookie設置

cookie('name','value');  //設置cookie
cookie('name','value',3600); // 指定cookie保存時間

四、模板(三元運算)

模板可以支持三元運算符

{$status?'正常':'錯誤'}
{$info['status']?$info['msg']:$info['error']}

注意:三元運算符中暫時不支持點語法。

 

五、AJAX返回

要使用ajax就要引用jQuery了,我們把jQuery拿進來

(1)我放到了Public文件夾下,新建一個js文件夾下

(2)然后就是在顯示的頁面調出這個js文件

<script src="__PUBLIC__/js/jquery-1.11.2.min.js"></script>

(3)看下這個文件是不是引入了

在瀏覽器的地址欄中輸入:http://localhost/tp/index.php/Home/Home/shouye

查看源代碼查看是不是引入了

點開之后要是能夠出現就是引入成功了

(4)在控制器中寫一個方法chuli,讓ajax返回這個方法

public function chuli()
{
   
}

(5)就要寫ajax了

<script type="text/javascript">
  $.ajax({
  url:"__CONTROLLER__/chuli",  //處理方法的
  dataType:"TEXT",
  success: function(data){
    //成功之后的輸出的信息
    }
			
  })
</script>

(6)在chuli方法頁面就要寫返回值了

public function chuli()
{
    $this->ajaxReturn("hello","eval");   //返回的值,返回值的方式eval就是text方式	
}

 注意:如果是JSON/JSONP格式,會自動編碼成JSON字符串,如果是XML方式,會自動編碼成XML字符串,如果是EVAL方式的話,只會輸出字符串data數據。 

完整的顯示頁面的代碼:

<script type="text/javascript">
    $.ajax({
        url:"__CONTROLLER__/chuli",
        dataType:"TEXT",
        success: function(data){
            alert(data);  //返回的信息
            }
			
    })
</script>        

看下效果:

 

也可以是關聯數組的數據,就不寫了

 

六、跳轉和重定向

(1)頁面跳轉

使用方法很簡單

$User = M('User'); //實例化User對象
$result = $User->add($data); 
if($result){   
     //設置成功后跳轉頁面的地址,默認的返回頁面是$_SERVER['HTTP_REFERER']    
    $this->success('新增成功', 'User/list');
} 
else 
{    //錯誤頁面的默認跳轉頁面是返回前一頁,通常不需要設置    
    $this->error('新增失敗');
}

注意:success和error方法的第一個參數表示提示信息,第二個參數表示跳轉地址,第三個參數是跳轉時間(單位為秒)

// 操作完成3秒后跳轉到 /Article/index
$this->success('操作完成','/Article/index',3);
// 操作失敗5秒后跳轉到 /Article/error
$this->error('操作失敗','/Article/error',5);

注意:跳轉地址是可選的,success方法的默認跳轉地址是$_SERVER["HTTP_REFERER"],error方法的默認跳轉地址是javascript:history.back(-1);。  

 

 

這就是tp框架的另外的一些知識和操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM