zblogphp1.5.0代碼分析(3) 顯示前臺頁面

在根目錄的 index.php 文件中,有一個函數(shù)很重要的函數(shù) ViewIndex(); 它的作用是顯示前臺的頁面.該函數(shù)位于c_system_event.php 事件相關(guān)函數(shù)文件中.首頁,搜索頁和feed頁面都是調(diào)用的這個顯示函數(shù).

這個函數(shù)首先設(shè)置全局變量 $zbp 和 $action, $zbp 對于 zblogphp 來說是一個很重要的全局對象,基本上系統(tǒng)的大部分?jǐn)?shù)據(jù)都可以通過這個對象來獲取.

例如:$zbp->option['ZC_BLOG_NAME'] 獲得的是網(wǎng)站博客的名稱

然后 foreach 循環(huán)輸出插件函數(shù),(只輸出位于 Filter_Plugin_ViewIndex_Begin 接口的,看位置應(yīng)該是模板之前的位置,index 和 view 的入口位置是不同的,也就是說 index 位置的插件函數(shù)比view位置的插件函數(shù)先執(zhí)行).

插件注冊的時候是把方法名賦值給插件名的,所以 return $fpname() 會直接執(zhí)行插件的函數(shù)

在插件掛載的時候是把中斷方式賦值給執(zhí)行函數(shù)名的,所以 $fpname => &$fpsignal 獲得插件的中斷方式

不過這里不管是什么中斷方式都會設(shè)置成無.保證頁面能順利執(zhí)行下去.

然后 $zbp->template->hasTemplate('404') 執(zhí)行模板類對象的 hasTemplate 方法,得到當(dāng)前使用模版的404.php內(nèi)容? 路徑:\zb_users\cache\compiled\default\404.php

如果主題有這個404文件,則在該文件掛載過濾接口 函數(shù) Include_ShowError404,這個是怎么掛載的?是在zblogphp.php文件初始化是調(diào)用的 ShowError 函數(shù),里面會有 foreach 輸出插件函數(shù).,這里的作用是判斷如果有錯誤頁則將插件掛載到這里,主要做特色化錯誤頁面的.默認(rèn)錯誤也是騰訊的公益404.

然后 switch 判斷 $action 的值是否為 feed 和 search ,這兩個操作有對應(yīng)的入口文件,默認(rèn)入口 index 是沒有這個參數(shù)的,所以會執(zhí)行 default 部分的代碼塊.

該代碼首先判斷 請求的路徑 和 保存在cookie的路徑是否相同,如果相同則調(diào)用 ViewList 函數(shù) 且所有參數(shù)為 null 以默認(rèn)方式顯示首頁列表頁面

如果不一樣的話則判斷

偽靜態(tài)模式是否為 ACTIVE 或是否 GET rewrite 且 GET 了 id 或者 alias

如果是的話說明請求的是文章內(nèi)容頁,調(diào)用 ViewPost 顯示頁面

如果也不是請求的文章內(nèi)容頁的話,則調(diào)用 ViewList 以 對應(yīng)參數(shù)請求結(jié)果列表,這包括page,cate,auth,date,tags,詳細(xì)實現(xiàn)過程這里略過不寫.

如果還不是的話,最后會調(diào)用 ViewAuto 函數(shù)來根據(jù) 偽靜態(tài)規(guī)則顯示頁面

附加內(nèi)容: ViewList函數(shù)分析

ViewList函數(shù)是顯示列表頁面的函數(shù),默認(rèn) ViewList(null, null, null, null, null) 輸出首頁列表內(nèi)容,偽靜態(tài)參數(shù)默認(rèn)為false

函數(shù)首頁 global 全局對象 $zbp

然后 foreach 輸出 掛在列表開始的插件函數(shù),設(shè)定類型為 index

然后判斷第2-5個參數(shù),根據(jù)對應(yīng)參數(shù)來設(shè)置類型(非null),后者覆蓋前者.

定義4個變量值為 null ,(分離,作者,日期,標(biāo)簽),定義w數(shù)組,看起來是原來匹配文章是否置頂?shù)?

$w = array();

$w[] = array('=', 'log_IsTop', 0);

$w[] = array('=', 'log_Status', 0);

獲取參數(shù)1的內(nèi)容,得到分頁值,設(shè)置文章列表結(jié)果數(shù)組和文章置頂列表結(jié)果數(shù)組

執(zhí)行 switch ,根據(jù) 類型不同執(zhí)行不同的代碼,默認(rèn) index 執(zhí)行第一個 case

首先以偽靜態(tài)正則 'ZC_INDEX_REGEX' => '{%host%}?page={%page%}', 為參數(shù)實例化 Pagebar分頁類

將$zbp 的緩存對象的文章總數(shù)設(shè)置為分頁類 count 的值,文章總數(shù)是通過 CountNormalArticleNums 函數(shù)獲取的

然后獲得首頁(列表)默認(rèn)模板(index),內(nèi)容(頁面)的默認(rèn)是(single)

如果頁面是第一個,則 設(shè)置 $zbp->title 為 網(wǎng)站副標(biāo)題,否則 $zbp->title 為 第xx頁

也就是說,如果不是第一頁的列表是不會顯示網(wǎng)站副標(biāo)題的!

之后 break 來到

$pagebar->PageCount = $zbp->displaycount;

$pagebar->PageNow = $page;

$pagebar->PageBarCount = $zbp->pagebarcount;

$pagebar->UrlRule->Rules['{%page%}'] = $page;

依次設(shè)置每頁顯示數(shù)量,當(dāng)前頁,一共有多少頁,URL規(guī)則類 Rules {%page%} 的值設(shè)置為 當(dāng)前頁數(shù)

輸出 Filter_Plugin_ViewList_Core 的插件函數(shù),看參數(shù)應(yīng)該是在輸出內(nèi)容前執(zhí)行的,官方WIKI也沒有寫出這個接口的說明

接下來判斷如果頂部列表關(guān)閉(ZC_LISTONTOP_TURNOFF)是否等于false,也就是如果打開了置頂功能的話則獲取全部置頂文章,還說了優(yōu)先從緩存的數(shù)組里獲取.(不過我還沒看到對應(yīng)的實現(xiàn)代碼,反正 $zbp->GetTopArticle() 之后就獲取到了置頂?shù)臄?shù)據(jù)了),然后依次 foreach 得到全局置頂?shù)?首頁置頂?shù)暮头诸愔庙數(shù)奈恼骂愋偷臄?shù)組待用

循環(huán)輸出 Filter_Plugin_LargeData_Aritcle 的插件函數(shù),看情況是在查詢數(shù)據(jù)庫之前(獲取數(shù)據(jù)之前)的插件接口,官方WIKI依然沒有這個接口的說明.

然后就是執(zhí)行 $zbp->GetArticleList 函數(shù)查詢獲得文章列表了.

獲取主題標(biāo)簽中的網(wǎng)站標(biāo)題,中的文章

如果總頁數(shù)等于0,則將分頁類對象刪除?(不知道,反正他是把對象 pagebar 設(shè)置為了 null)

一長串的 SetTags 設(shè)置主題標(biāo)簽和對應(yīng)的值,有什么用?不知道,反正在這個函數(shù)內(nèi)沒看到他用這個!

之后使用 hasTemplate 判斷對應(yīng)的主題文件是否存在,如果存在則 SetTemplate設(shè)置主題類中的 entryPage 的值為對應(yīng)的主題文件的名稱,如果不存在則設(shè)置為 index (如果 index 也不存在呢?哈哈)

這里有循環(huán)輸出 Filter_Plugin_ViewList_Template 位置接口的插件函數(shù),官方WIKI終于有說明了,是 處理列表頁模板接口 ,然后呢?我還是沒有理解能在這里做什么啊,不過可以知道的是這個位置肯定在顯示模板文件之前的,因為后面 $zbp->template->Display(); 就是顯示模板頁面的函數(shù).

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末推捐,一起剝皮案震驚了整個濱河市隙赁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌着饥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哺徊,死亡現(xiàn)場離奇詭異缺虐,居然都是意外死亡抽诉,警方通過查閱死者的電腦和手機齐帚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門妒牙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人对妄,你說我怎么就攤上這事湘今。” “怎么了剪菱?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵摩瞎,是天一觀的道長。 經(jīng)常有香客問我孝常,道長旗们,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任构灸,我火速辦了婚禮上渴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冻押。我一直安慰自己驰贷,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布洛巢。 她就那樣靜靜地躺著,像睡著了一般次兆。 火紅的嫁衣襯著肌膚如雪稿茉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天芥炭,我揣著相機與錄音漓库,去河邊找鬼。 笑死园蝠,一個胖子當(dāng)著我的面吹牛渺蒿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彪薛,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼茂装,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了善延?” 一聲冷哼從身側(cè)響起少态,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎易遣,沒想到半個月后彼妻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年侨歉,在試婚紗的時候發(fā)現(xiàn)自己被綠了屋摇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡幽邓,死狀恐怖炮温,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颊艳,我是刑警寧澤茅特,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站棋枕,受9級特大地震影響白修,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜重斑,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一兵睛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窥浪,春花似錦祖很、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骨稿,卻和暖如春笨鸡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坦冠。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工形耗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辙浑。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓激涤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親判呕。 傳聞我的和親對象是個殘疾皇子倦踢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)佛玄,斷路器硼一,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,107評論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法梦抢,內(nèi)部類的語法般贼,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,630評論 18 399
  • 【除了賺錢之外哼蛆,金錢整理更重要】 第一步:召集8個好友互相報告今天的錢包情況蕊梧,冰箱狀況,負(fù)債狀況腮介。 第二步:清楚自...
    娜么好玩閱讀 451評論 0 3
  • 功成名遂身退肥矢,天之道。 選自《老子的心事——雪煮<道德經(jīng)>第一輯》雪漠著 退一步海闊天空 前面老子說過叠洗,建立了功勛...
    陽焱焱閱讀 729評論 0 4