程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> smarty簡單分頁的實現方法,smarty分頁實現

smarty簡單分頁的實現方法,smarty分頁實現

編輯:關於PHP編程

smarty簡單分頁的實現方法,smarty分頁實現


本文實例講述了smarty簡單分頁的實現方法,分享給大家供大家參考。具體實現方法如下:

以下是模板中的smarty代碼,用smarty簡單的代入相關的變量就行了,非常簡單,但是在php代碼中還要傳入page這個參數。我覺得這樣分挺好,非常簡單。我越來越喜歡用smarty了。
 
Php代碼如下:
復制代碼 代碼如下:{if $pageCount > 1} 
{foreach  item=i from=$pagerList} 
  {if $pageNum eq $i} 
  {$i}   
  {else} 
<a href ="/space/index.php?uid={$userId}&page={$i}">{$i}</a>   
{/if} 
{/foreach} 
{if $pageNum eq 1} 
上一頁   
{else} 
<a href ="/space/friendlist.php?uid={$userId}&page={$pagePre}">上一頁</a>   
{/if} 
{if $pageNum eq $pageCount } 
下一頁   
{else} 
<a href ="/space/friendlist.php?uid={$userId}&page={$pageNext}">下一頁</a>   
{/if} 
{if $pageNum eq 1} 
首頁   
{else} 
<a href ="/space/friendlist.php?uid={$userId}&page=1">首頁</a>   
{/if} 
          
{if $pageNum eq $pageCount} 
最後一頁   
{else} 
<a href ="/space/friendlist.php?uid={$userId}&page={$pageCount}">最後一頁</a>   
{/if} 
{/if} 
(共{$pageCount}頁) 

這裡只是給出一個思想,其實分頁沒有那麼復雜。

希望本文所述對大家的PHP程序設計有所幫助。


PHP怎實現數字分頁效果?smarty裡怎調用了?怎使用php代碼來循環頁數?

有一個php系統我看他是用的smarty ,你可以參考下
ecshop
商城程序,我也打算學,今年過年就開始試著做一個系統,給予smarty的
 

smarty 分頁問題

第一種方法:
思路是根據頁號取出兩部分數據,比如取出前90條,然後取出前100條,然後比較取出兩次結果的差集。

在30萬條記錄的情況下,如果只分100頁(結果有10000條記錄),大約需要1分半鐘。索引建得好的話,1分鐘左右。

//select * from //這一句是不能修改的了,因為它是從結果中讀取,所以必須要用*
//(select top @h_count (@filedlist) from @tableName .....) as big //取出符合條件的上限的記錄
//where
//big.guid //這裡是關鍵,根據主鍵從下限結果中過濾掉重復的記錄(只留下不同的數據,也就是求交集)
//not in
//(select top @l_count guid from @table .....)//下限
//order @orderby //原來的格式,這裡只保留了orderby之後的,應該保留條件之後所有的,包括gruopby什麼的

函數類似如此:
public string MakeSqlPager(string sourceSql,int pageIndex)
{
//使用默認頁面大小
string orderbyStr=sourceSql.Substring(sourceSql.ToLower().IndexOf("order by"));
int index=sourceSql.ToLower().IndexOf("select");
string bigRes="("+ sourceSql.Insert(index+6," top "+((pageIndex+1)*_pageSize).ToString()+" ")+") as big";
string smallRes="("+ sourceSql.Insert(index+6," top "+(pageIndex*_pageSize).ToString()+" ")+")";
return "select * from "+bigRes+" where big.guid not in "+smallRes+" "+orderbyStr;
}

這種方法還可以改進,就是第二次取過濾時從第一個的結果裡面過濾。

第二種方法:
掐頭去尾,程序還沒寫
SELECT * FROM
(
SELECT TOP 100 * FROM
(
SELECT TOP 100000 * FROM pagetest ORDER BY regt ASC
) as a
ORDER BY regt desc
) as b
ORDER BY regt ASC

測試了一下,大約用時間29秒。

比較:
第一種方法的效率很低,猜測是因為多次需要循環比較,時間復雜度要高一個等級。比如,這種方法的響應時間和所取得的頁號有很大關系。
第二種方法還是可以接受的,......余下全文>>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved