『壹』 【追加高分】魔獸地圖反作弊
"反WE類"
這類可以說是最常見的了,最早的加密就是為了使WE打不開地圖,方法也很多
1.刪除WE的使用而游戲不需要的地圖內部文件.
如war3map.wtg,war3map.w3c,war3map.w3s,war3map.w3r等文件,其中war3map.wtg是觸發文件,游戲運行時使用的是war3map.j腳本文件,而觸發文件是用來在WE中顯示更為直觀的T,其餘war3map文件則是鏡頭之類都可以在J文件中定義的東西,游戲也不需要,因此刪除這些文件可以使WE因為缺少文件而無法打開地圖.
加密方法:使用工具如w3mmaster,Wc3MapOptimizer,其中Wc3MapOptimizer是當前最好的工具,而且與其說是加密還不如說是優化,使用該工具除了刪除無用文件外,還可以優化腳本,加快地圖讀取速度等.(這里推薦使用時參照老狼寫的使用說明,寫的比較詳細,工具現在已經有偶漢化的4.5版,裡面集成了老狼的大部分說明,這里推薦大家使用- -).另外一方面還可以手動使用MPQ工具進行刪除或在WE中導入同名的空文件(最老的手動加密方式- -),當然手動方法是不被推薦的,因為沒有任何優化效果,而且這種加密是最容易破解的.
2.導入錯誤文件.
這種手段也是比較初級的加密手法,使用錯誤的war3map.wtg或在非正常數據環境下製作相關觸發數據(如修改MPQ包中的blizzard.j文件,加入新函數等- -),同樣造成WE錯誤,沒有優化效果.這樣做的原因是因為出現了可以忽略常規缺少文件錯誤的新WE(如反匯編製作的ENE WE等),這類WE可以打開缺少觸發等文件的地圖(不過由於缺少文件,你依然不能修改和存儲地圖,這也是一些菜鳥修改者修改完地圖後發現地圖完全不能游戲的原因),在使用錯誤數據後這類WE大多會出現內存讀取出錯.(可見加密技術都是解密而發展的- -)
值得一提的是某些修改war3map.w3u(單位文件)等基礎數據文件的做法,這種做法比較另類,向其中加入游戲中用不到的冗餘錯誤數據,同時造成其中數據與war3map.wts等文件中數據錯位.這種方式是針對現在比較流行MPQ工具導出相關文件進行外部修改的破解手段的,因為很多人喜歡導出w3u 文件單獨放入WE修改,而在沒有使用Wc3MapOptimizer的WTS字元優化時,還需要導入WTS文件來查看文本信息,這時冗餘的數據會造成錯誤,導致WE出錯退出- -,不得不說很有創意,不過如果使用w3mmaster修改的話就沒有任何效果了,外加沒有優化效果,因此也是不實用的方法.
3.SLK優化
這種方式最大的好處是可以大幅加快地圖讀取速度,SLK文件優化得當的話,體積也可能減小,是當前最好用的優化手段之一,很多優秀的地圖如DOTA都是這種優化的.
原理:懂得基本的地圖組成結構的人都應該知道,單位,技能等信息都是儲存在w3u,w3a這樣的文件中的,然而沒有實質的了解其結構的人可能就不會知道實際上這些文件中儲存的不過是改動信息,而這個改動是相對於魔獸基礎MPQ文件中的SLK文件而定的.地圖在讀取地圖時會讀取w3u等文件,而如果這些信息都作為SLK的基礎信息的話則不會佔用讀取時間,這樣就做到了優化,而且SLK的讀取速度也比較快.因此優化的過程實際上就是拆散w3u等文件再放到SLK文件中去.
SLK更多的是作為優化而言的,如果說到加密,那就是因為他可以防止w3mmaster這樣的外部修改器,同時對於不了解內幕的人,也會因為找不到單位等數據文件而無從下手,不過現在基本上人人都知道SLK文件可以用EXCEL這樣的工具來直接修改了,因此作為加密而言只是增加了修改的復雜性.
相關工具:Widgetizer(最早的SLK工具,性能可靠,可惜不支持中文,如果你是英文圖的話,還是用這個最好),U9MapOpt(U9地圖優化器,目前唯一支持中文的優化器,不過還不能優化大小,而且有加廣告的"BUG"...).
總體來說"反WE類"是目前最廣泛使用的加密方式,而且這類大部分是優化而非真正意義上的加密,同時我建議使用的SLK+Wc3MapOptimizer的優化方式.
"反MPQ類"
前面說過使用Wc3MapOptimizer等工具只能說是優化而非加密,原因之一是他們主要是做使地圖變小,讀取變快的優化,另一方面就是對於這類反 WE的地圖,修改者最常用的手段是使用MPQ工具進行內部文件的修改,對於這類修改,很長時間內可以說是無敵的解密方法,因此真正可以說得上是加密的就是反MPQ類.
1.MPQ頭文件修改
這種修改方式由來已久,直到不久前hackwaly的新加密方法出現之後才真正流行起來要講其原理,需要先了解一下mpq頭文件的結構
struct TMPQHeader文件頭結構定義
{
DWORD dwMpqFlag;頭文件標志,一般是'MPQ'
DWORD dwHeaderSize; 頭文件大小
DWORD dwArchiveSize; MPQ包大小
USHORT wFormatVersion;版本(這個直到WOW燃燒遠徵才開始有用,MPQ2這個值是1,魔獸的MPQ1是0)
USHORT wBlockSize; 塊大小,熟悉的人一般叫它BUFFER SIZE
DWORD dwHashTablePos;哈希表偏移位置
DWORD dwBlockTablePos;塊表偏移位置
DWORD dwHashTableSize;哈希表大小
DWORD dwBlockTableSize;塊表大小
};
具體的含義在MPQ講解中我還會介紹,這里只說和加密相關的.
1.同樣的這種加密也是隨著相關MPQ工具而發展的,最早是soar(GA的c-a)的mpqworkshop,這個工具有一個弱點是其尋找MPQ時需要檢驗頭文件大小(dwHeaderSize)這個值,而由於MPQ1的這個值顯然是固定的32,所以當人為的修改這個數為一個隨機數時,該工具就會認為這是個無效的MPQ文件,造成無法打開,當然明白了原理後這是很容易破解的,而且現在的MPQ工具都忽略這個錯誤.不過這個修改這個值幾乎成了習慣,雖然沒有作用也還一直沿用著.
2.之後出現了w3mmaster和mpqmaster,依然是soar的作品,使用自己製作的mpqlib,可以忽略dwHeaderSize的錯誤 (同時sfmpq也一樣).很長時間內MPQ頭的加密沒有新的發展,直到今年初,hackwaly公布了他的研究成果,新的killmpqmaster加密,實質上是修改塊表大小為大於哈希表大小的數.這里簡單講一下原理:
最通俗的語言來說,MPQ就可以看成一本書,但他有兩個目錄,哈希表是第一個,當你要找書中的一頁時需要先查哈希表,得到塊表這個目錄的位置,再從塊表中查找到具體的頁數,而MPQ這本書還有一個特殊之處是哈希表這個目錄的大小是固定的,也就是說書裡面最多能放的頁數也是固定的(這就是MPQ中文件數有上限的原因),而如果我們的內容不能裝滿整個書的話,那麼哈希表的一部分就是空的.而塊表不同,他只存放有效的頁,因此他的大小是不固定的,哈希表與塊表是一一對應的,因此塊表不可能比哈希表大.
再講一下MPQMASTER的文件查找原理,大家就會明白為什麼修改塊表大小會造成這類工具不能讀取地圖的原因了.MPQMASTER准確說是 mpqlib.dll是需要枚舉MPQ包中的每一個文件的,而魔獸則只需要查找其需要的文件,也就是說,魔獸在翻書時直接查找目錄找文件,而不必去管目錄到底有多大,什麼時候目錄會結束.而MPQMASTER則需要知道這個,他要先知道目錄的大小才能得知什麼時候已經找到了所有文件,mpqlib是根據塊表來查找的,因此如果修改了塊表大小,就相當於讓他去不存在的目錄查找文件,這當然是錯誤的.
3.修改MPQ包大小(dwArchiveSize)為0,這是我個人最先發明的,原理實際上也和修改塊表大小差不多,但實際上還是由於mpqlib的嚴謹性,mpqlib在讀取MPQ文件結構時會驗證一些數據的准確性,雖然不一定有用,但是正是這項檢查造成修改MPQ包大小後,mpqlib將地圖識別為錯誤MPQ.
4.修改哈希表大小(dwHashTableSize),這種加密也和我有一定關系,不過沒有流行起來,而且事實證明也並不是一種安全的加密
在killmpqmaster加密(工具為hackwaly的w3xmaster)流行後,mpqmaster的使用受到限制,當然也出現了不少手動破解方法,不過相對而言最好用的是winmpq和我的ShadowEditor,sfmpq是因為其在查表時是檢查哈希表而不受塊表錯誤的影響,同時也不檢查 MPQ包大小,因而可以正常打開w3xmaster加密的地圖,不過從w3xmaster0.006開始採用了修改哈希表的技術而造成其顯示錯誤文件而不那麼好用了.同時期我就結合了sfmpq的優點做了ShadowEditor,自動修復所有的頭文件錯誤,修復後可以用mpqmaster打開.作為反 ShadowEditor還原的第一例,就是55YOU的簡單做的修改哈希表大小加密,理論上說哈希表大小會直接影響查表的過程,因而不能修改,但確實在一些特例中成功了,但並不是所有圖都可以,再加上我第一時間修改了還原程序,這個加密貌似就只出現了那麼片刻的時間- -...
2.利用地圖大小限制
魔獸連網是有4M大小限制的,而在早期大家都使用MPQMASTER來修改地圖時,由於mpqlib的壓縮性能較差,因而總會造成地圖變大,有些加密就是利用這個漏洞,在地圖較大的情況下乾脆直接讓地圖接近4M,這樣隨便改動都會造成無法連網.這種加密實際上也在winmpq和偶的 ShadowEditor流行起來之後變得用處不大了,因為SFMPQ.DLL的壓縮效果要明顯好的多.
值得一提的是最近還能見到一些圖利用0byte文件來填充的方法把MPQ包添滿,當然這也是在地圖本身比較大的情況下,這種方法貌似是利用地圖大小的升級加密版本,因為這樣即使壓縮的很好也有可能超出4M,不過解起來也很簡單,把這種文件刪就好- -,所以感覺是種很搞笑的方法.
3.腳本文件加密
包括3種:
1.最早的是移動腳本,把根目錄下的war3map.j放到scripts\下依然可以用,在開始沒有人知道的情況下,確實找不到腳本,但是現在已經是路人皆知的事情了,使用Wc3MapOptimizer會自動移到那裡去.
2.雙腳本,一個在根目錄下,另一個在scripts\下,出現兩個腳本,迷惑新手罷了,當然只有一個是真的,我給他的評價是勞民傷財,白占體積- -.
3.替身腳本,這個理論上有些技術含量,和後面要講的我的文件隱藏法有一定的聯系,原理上說是利用了魔獸的storm與一般工具的MPQ庫之間讀取文件的原理差異,在地圖中放入兩個同名的war3map.j,一個是假的替身文件,在用一般的MPQ工具讀取時只能讀出假文件,游戲則會讀真的,識別方法可以用偶的ShadowEditor打開發現兩個同名的war3map.j 且大小不一樣(大小不一樣很重要,因為w3xmaster也有一種能造成這種假象的),這種方法對所有具有寫入功能的MPQ工具都有效,不過估計應該不是用某種專門加密器完成的,估計是用了某個MPQ工具的BUG,而且這種方法加大地圖體積,還可以用簡單的方法破解,因此我只說他是理論上有技術含量的東西 - -.
4.文件屬性加密
這種貌似是最扯淡的加密了,方法簡單的出奇,而且不容易察覺,就是把地圖的屬性改成只讀,這樣任何MPQ工具都不能對其進行寫操作了,當然還原方法不用多說了,不過不仔細的話還真以為是什麼厲害的加密呢,汗......
5.MPQ哈希表,塊表加密
這種才可以說是真正意義上有技術含量的加密(相對於Wc3MapOptimizer等工具也算不上有技術- -,不過那些是優化...),從hackwaly的w3xmaster開始.
這里只舉兩個例子:
1.w3xmaster0.009:未公布的地圖加密器,主要原理是將塊表擴充為確實比哈希表大,同時打亂哈希表與塊表間的連接,填充無用的哈希空位,迷惑性的復制哈希表項目(這就是為什麼ShadowEditor可能讀出兩個J文件的原因,大家也可以推想一下替身腳本的原理- -...),再詳細的原理我也不想說了,未公布的東西不能亂講,其實主要是防止我的ShadowEditor對地圖進行還原,同時也造成了無法重壓縮的問題,雖然不能防止解壓,但是確實比較有效的防止了在原圖上進行修改.
2.War3map Encrypt:未公布的加密器, 這個是我做的,也是只簡單的講一下原理:前面已經說過war3和一般的mpq工具讀圖原理是有差別的,這也是製作加密的突破口,簡單的說這個差異就是在 MPQ中出現同名文件時的處理機制,因為正常的MPQ是不會有同名文件的,因此一般的MPQ工具不會處理這個錯誤,而war3則會,因此才有了替身文件和隱藏文件的可能,與替身文件不同的是,我的加密是通過直接修改哈希表製作的,因此我不需要替身文件可以直接隱藏文件,同時在加密中加入了SFMPQ列表讀取崩潰和w3xmaster的一些反mpqlib機制,所以現在基本上可以防止所有流行的MPQ寫入工具進行修改,甚至讀取.不過既然魔獸能夠讀取,那麼就一定有辦法能解壓文件,這種方法是什麼我就不想多說了,這里只是加密講解.
話說回來任何加密都可以破解,懂得MPQ核心原理的人應該可以自己寫程序破解,不過我的SE暫時是不會再寫任何破解模塊了...
"腳本類"
從這類開始應該說就是反作弊的范疇了,這類出現的前提是無法阻止腳本文件的解壓,以及某些外掛作弊(MH)
1.打亂腳本,變數名替換.
這是最早的了,也是沿用至今的基本方法,代表工具是Wc3MapOptimizer,利用他進行腳本優化後,腳本中放在一起的T相關函數被分散並進行同類匯總,刪除注釋,這樣造成腳本可讀性變差,但是真正使可讀性變得很差的還是重新用字母或數字來替換那些有意義的函數名,這樣就給理解腳本造成了很大的麻煩,因此修改腳本時需要的是對於J文件的深刻理解了.
2.添加作弊檢查的函數.
這類方法很多,比如檢查玩家的資源數等,只要超出合理范圍就判定為作弊,同時可以檢查是否使用了單機秘籍.其中還有一類比較有趣的方法是在游戲中讀取wts文件的字元,如果修改者修改了某些字元,如作者信息之類就判定此圖為盜版.
3.禁止單人游戲.
這種多用於ORPG,防止單機秘籍的使用造成游戲平衡性破壞.
方法有幾種,比較好用的有判斷是否可以保存緩存,單機可以,多人就不行,另外判斷是否可以保存游戲也可以做到,同樣是只有單機可以.
單機判斷和作弊檢查函數聯合,同時分散寫上多個處判斷函數,可以使修改者不容易刪除判斷函數,而且在判斷為作弊後採用死循環或大量製造單位的方法來強制地圖出錯,也可以防止修改者通過文字信息來找到相關函數.
4.反MH函數.
MH無疑是最讓對戰地圖頭疼的東西,不過在kook,hackwaly,朱朱等人的研究下,確實找到了一些反MH的腳本方法,我沒有仔細看過他們的腳本,所以以下只是簡單的寫點基本原理,如有不對的地方還請指正- -:
1.通過觸發選擇不可見單位,然後判斷是否出現取消選擇的事件來判斷是否使用MH,在開了MH後是不會出現取消選擇的事件的.
2.通過在不可見區域創建閃電特效,如果沒有開MH不會返回句柄,開了就會有.
3.使用由hyp製作的看見就會造成游戲錯誤的模型.
"特殊標示類"
說到特殊標示,最先想到的應該是官方的蘭色小標志,這一類就是採用各種演算法來給地圖加上獨特的標示,通過標示可以方便的辨認正版地圖.
1.官方的簽名.
這個不知道有多少人想要破解了,不過現在還沒有人成功,而且估計也不可能有人成功
原理:對地圖內容進行SHA-1摘要,然後對摘要的結果進行RSA運算,當然懂RSA的人應該知道這運算是要有自己的私鑰的,結果是一個260位元組的簽名,放在地圖末尾,在game.dll中有檢驗這個簽名的公鑰,只要驗證成功就會加上蘭色小標志.
知道原理就不難理解為什麼這個是不可能破解的了,首先RSA現在還沒有破解理論,其次你不可能從暴雪手裡偷到那個私鑰,因此該簽名是目前最保險的防盜版方法.
2.GA的簽名.
既然我們不可能從官方得到地圖簽名,那我們就自己改,通過將game.dll中的公鑰修改為自定義的和自己的私鑰相匹配的數據,我們就可以做自己的簽名了,這就有了GA的補丁,不過確實這種補丁的推廣很難,廣大玩家並不像地圖作者那樣需要他......
3.盜版地圖刪除器.
這個東西的作用不是很大,但畢竟起過一些作用,這里把他放在標示類也有一些原因.
原理:早期的盜版地圖刪除器如3CORC之類的,是根據地圖大小來判斷是否正版的,這樣做的缺點是每更新一張地圖就需要更新一次刪除器的列表,比較麻煩. 後期我為WOW8製作的刪除器是採用類似簽名的摘要加密法,不知道原理的情況下很難仿製,而且隨便的更改都會造成不匹配,這樣只要用刪除器對簽名進行判斷就可以驗證是否是正版圖,不需要更新列表這種麻煩事.至於演算法可以自己隨便選擇,如MD5,RSA等有名的演算法...
4.(attributes)文件.
這個文件是官方檢驗地圖文件是否受損的文件,也是所有改圖者必刪的文件,否則游戲中就會提示文件錯誤.
原理:這個文件是按照MPQ中的文件順序將每個文件的CRC32值,文件時間等數據放入(attributes)中,游戲中進行檢驗,在MPQ2中應該還包括MD5校驗.
這個東西由於一般都被刪了所以也沒什麼作用,不過可以是另外一種盜版地圖刪除器的判斷方法,加入自定義的校驗文件(裡麵包含關鍵文件的MD5,CRC32等值),然後檢查時自動查找就可以了,由於是自定義文件名,也不容易被直接找出來.
我也不知道是不是。
『貳』 php -> =>的問題
在PHP裡面 ->用來引用對象的成員,包括屬性和方法,=>只用來數組賦值。
『叄』 thinkphp5 類庫映射怎麼用 addclassmap
ThinkPHP 類庫說明
ThinkPHP 基類庫
類庫是 ThinkPHP 的核心部分,而 ThinkPHP 又通過基類庫的概念把所有系統類庫都集中在一起管理。核心基類庫包括完成框架的通用性開發而必須的基礎類和常用工具類。
基類庫位於 ThinkPHP 系統目錄下面的 Lib/Think 目錄內,由下面幾個部分組成:
Core:核心類庫包
Db:資料庫類庫包
Exception:異常處理類庫包
Template:內置模板引擎類庫包
Util:系統工具類庫包
Core 核心類庫
Core 核心類庫包括如下類文件(目錄):
Think.class.php:系統基類
App.class.php:應用程序類,執行應用管理
Action.class.php:控制器基類
Model.class.php:模型基類
Model/AdvModel.class.php:高級模型類
Model/RelationModel.class.php:關聯模型類
Model/ViewModel.class.php:視圖模型類
Log.class.php:日誌處理類
View.class.php:視圖輸出類
Db 資料庫類庫
Db 核心類庫包括如下類文件(目錄):
Db.class.php:資料庫中間層實現類
Driver/DbMysql.class.php:Mysql 資料庫驅動類
Driver/DbMysqli.class.php:Mysqli 資料庫驅動類
Driver/DbPdo.class.php:PDO 資料庫驅動類
Driver/DbPgsql.class.php:Pgsql 資料庫驅動類
Driver/DbSqlite.class.php:Sqlite 資料庫驅動類
Driver/DbOracle.class.php:Oracle 資料庫驅動類
Driver/DbMssql.class.php:Mssql 資料庫驅動類
Driver/DbIbase.class.php:Ibase 資料庫驅動類
在 Driver 目錄下針對不同資料庫有不同的資料庫驅動類,然後再通過 Db.class.php 資料庫中間層實現類加工後,展現在 ThinkPHP 使用者面前的就是統一的資料庫操作模型。
Exception 異常處理類庫
Exception 異常處理類庫包只包含一個類文件:ThinkException.class.php 系統異常基類。
Template 內置模板引擎類庫
Template 內置模板引擎類庫包括如下類文件(目錄):。
ThinkTemplate.class.php:內置模板引擎類
TagLib.class.php:標簽庫基類
TagLib/TagLibCx.class.php:CX 標簽庫解析類
TagLib/TagLibHtml.class.php:HTML 標簽庫解析類
Util 系統工具類庫包
Util 系統工具類庫包提供了系統開發中一些基本的工具,具體包括:
Behavior.class.php:行為擴展基類
Cache.class.php:緩存管理類
Cookie.class.php:Cookie 管理類
Debug.class.php:系統調試類
Dispatcher.class.php:URL 解析、路由和調度管理類
HtmlCache.class.php:靜態緩存類
Session.class.php:Session 管理類
Widget.class.php:插件應用類
Cache/:各類型緩存類文件目錄,包括:文件緩存類、Sqlite緩存類、Apachenote緩存類、Memcache緩存類、Xcache緩存類、資料庫類型緩存類等
Template/:模板引擎解析類目錄,包括:EaseTemplate模板引擎解析類、TemplateLite模板引擎解析類、Smart模板引擎解析類、Smarty模板引擎解析類、Think模板引擎解析類
ThinkPHP 擴展類庫
ThinkPHP 官方網站額外提供了很多的基類庫擴展,這些擴展類庫必須放置於 ThinkPHP系統目錄/Lib 目錄下的 ORG 或 Com 類庫包內進行管理。
對於需要添加進入擴展類庫包的類庫,可以直接帶路徑拷貝類庫文件到擴展類庫管理目錄就可以使用了。例如要使用 Util/Page.class.php 分頁擴展類庫,直接到擴展類庫管理目錄形成 Lib/ORG/Util/Page.class.php 即可。
對擴展類庫需要使用 import 指令導入方可使用,具體參考本節內容《ThinkPHP import 類庫導入》。
應用類庫
應用類庫是指項目中自己定義或者使用的類庫。應用類庫目錄位於項目目錄下面的 Lib 目錄。
以上是 ThinkPHP 核心 —— 類庫的的介紹。了解 ThinkPHP 類庫有助於我們了解 ThinkPHP 的層次結構和工作原理,必要的時候參考這些類庫的源代碼也有助於問題的解決。
『肆』 你好!ThinkPHP,上下頁代碼怎麼寫
地址:http://www.thinkphp.cn/info/192.html
分頁查詢
分頁類需要和查詢相結合,我們可以使用ThinkPHP自帶的limit方法或者page方法,目的就是為了獲取當前分頁的數據(也有先獲取完整數據然後前端分頁顯示的方法,不在本文描述內容中,也不建議)。使用limit方法或者page方法是和資料庫類型無關的。
我們首先在資料庫裡面創建一個think_data數據表用於測試:
CREATE TABLE IF NOT EXISTS `think_data` (
`id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`content` varchar(255) NOT NULL,
`create_time` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
復制代碼
要使用分頁查詢,一般來說需要進行兩次查詢,即第一次查詢得到滿足條件的總數據量,然後第二次查詢當前分頁的數據,這樣做的作用是告訴分頁類當前的數據總數,以便計算生成的總頁數(如果你的顯示只是需要上下翻頁的話,其實總數查詢可以省略或者進行緩存)。
一個標準的分頁使用示例如下:
$Data = M('Data'); // 實例化Data數據對象
import('ORG.Util.Page');// 導入分頁類
$count = $Data->where($map)->count();// 查詢滿足要求的總記錄數 $map表示查詢條件
$Page = new Page($count);// 實例化分頁類 傳入總記錄數
$show = $Page->show();// 分頁顯示輸出
// 進行分頁數據查詢
$list = $Data->where($map)->order('create_time')->limit($Page->firstRow.','.$Page->listRows)->select();
$this->assign('list',$list);// 賦值數據集
$this->assign('page',$show);// 賦值分頁輸出
$this->display(); // 輸出模板
復制代碼
如果沒有任何數據的話,分頁顯示為空白。所以在進行測試之前,請確保你的數據表裡面有一定的數據,否則可能看不到分頁的效果。如果使用page方法查詢的話,則可以改成:
$Data = M('Data'); // 實例化Data數據對象
import('ORG.Util.Page');// 導入分頁類
$count = $Data->where($map)->count();// 查詢滿足要求的總記錄數
$Page = new Page($count);// 實例化分頁類 傳入總記錄數
// 進行分頁數據查詢 注意page方法的參數的前面部分是當前的頁數使用 $_GET[p]獲取
$nowPage = isset($_GET['p'])?$_GET['p']:1;
$list = $Data->where($map)->order('create_time')->page($nowPage.','.$Page->listRows)->select();
$show = $Page->show();// 分頁顯示輸出
$this->assign('page',$show);// 賦值分頁輸出
$this->assign('list',$list);// 賦值數據集
$this->display(); // 輸出模板
復制代碼
然後,我們在模板中添加分頁輸出變數即可:
<table cellpadding=3 cellspacing=5>
<volist name="list" id="vo">
<tr>
<td >[ {$vo.create_time|date='Y-m-d H:i:s',###} ] {$vo.title} </td>
</tr>
</volist>
<tr>
</tr>
</table>
<div class="result page">{$page}</div>