Jquery中文網 www.8833040.live
Jquery中文網 >  建站教程  >  phpcms  >  正文 PHPCMS V9主站調用全站最新內容的方法

PHPCMS V9主站調用全站最新內容的方法

發布時間:2014-07-20   編輯:www.8833040.live
PHPCMS v9默認只能調用一張表,無法一次性調取不同模型的內容?;艘粋€下午的時間,在debug中尋找到了最佳結果。

PHPCMS v9默認只能調用一張表,無法一次性調取不同模型的內容。
花了一個下午的時間,在debug中尋找到了最佳結果。

一般有以下三種情況:
1、一個欄目的調用。這沒什么好說的,使用系統自帶的content標簽即可實現。
2、所有頂級欄目(同一模型)的調用。若直接使用content標簽,并指定catid=0,是無法輸出內容的。
3、多個模型的調用,也就是所謂的全站調用。這個......有點兒難。

第二種,使用get標簽即可搞定,但存在一個非常不人性化的分頁問題和一個bug。
分頁問題:一般來講,調用全站內容、排行榜之類的東西,都是新建一個單頁面欄目(在主頁等地方調用的先不談),然后在 模板添加加入代碼。但是,num屬性只能指定每一頁的列表內容條數,沒有參數可以指定頁碼數量,坑爹的是,LIMIT竟然無法使用。有人建議使用if判斷 分頁數,break跳出--貌似行不通,頁碼那里還是顯示所有分頁序號......接著就出現了第二個問題--bug
Bug:動態頁面、靜態頁面、偽靜態頁面。動態頁面,頁碼序號的鏈接中竟然包含2個page參數,不過不影響使用,算了;偽靜態頁面的鏈接都是一樣的,靜態的沒試過,有人說也一樣。

第三種,同樣也是用get標簽,但是這里涉及到表的連接。一般可以使用JOIN、UNION之類的操作符,但UNION ALL操作符最合適,且查詢效率最高。但是別以為這樣就可以OK了,新的問題又來了,就算使用了page屬性,也就只能顯示一頁??拥?,有木有......
也曾經試過新建一個推薦位,發布文章時自動添加到這個推薦位。這樣做也行得通,但是感覺有點麻煩,且無法自動更新。

既然分頁出現問題,那我就自己構造分頁,看代碼!

復制代碼 代碼如下:

<!--先自定義幾個變量-->
{php $p=1;$pn=10;$pe=20;$ltime=time()-86400*3;}
<!--調用數據,分頁顯示-->
{pc:get sql="SELECT title,inputtime,url FROM phpcms_news WHERE inputtime>$ltime UNION ALL SELECT title,inputtime,url FROM phpcms_download WHERE inputtime>$ltime UNION ALL SELECT title,inputtime,url FROM phpcms_picture WHERE inputtime>$ltime ORDER BY inputtime DESC" page="$page" num=$pe cache="600" return="data"} <ul>
  {loop $data $r}
  <li><a href='{$r[url]}'>{$r[title]}</a></li>
  {/loop}
</ul>
{/pc}
<!--自定義頁碼顯示-->
<div id="pages" class="text-c">
  <a class="a1">
{php echo $pn*$pe;}
{L('page_item')}</a>
  {loop $data $r}
  {if $p==1}{if $_GET[page]!="" && $_GET[page]!=1}<a href="{$CATEGORYS[$catid][url]}&amp;page=
{php echo $_GET[page]-1}
" class="a1">{L('previous')}</a>{else}<a href="{$CATEGORYS[$catid][url]}" class="a1">{L('previous')}</a>{/if}{/if}
  {if ($_GET[page]=="" && $p==1) || $_GET[page]==$p}<span>{$p}</span>{else}<a href="{$CATEGORYS[$catid][url]}&amp;page={$p}">{$p}</a>{/if}
  {if $p==$pn}{if $_GET[page]==""}<a href="{$CATEGORYS[$catid][url]}&amp;page=2" class="a1">{L('next')}</a>{else}{if $_GET[page]==$pn}<a href="{$CATEGORYS[$catid][url]}&amp;page={$pn}" class="a1">{L('next')}</a>{else}<a href="{$CATEGORYS[$catid][url]}&amp;page=
{php echo $_GET[page]+1}
" class="a1">{L('next')}</a>{/if}{/if}{/if}
  {php $p++}
  {php if($p>$pn) break;}
{/loop}

代碼解析:
1、先定義幾個變量,索引$p、頁面數量$pn、每頁內容數量$pe、范圍時間$ltime。大家可以按需修改。
2、使用SQL語句從news、download和picture三張表中調出title、inputtime和url三個字段的記錄,使用UNION ALL將它們連接起來,并按時間倒序排列。請將news、download、picture改成自己的、或者按需增加和刪除。
3、自定義顯示頁碼。樣式可以自定義。但是不要刪除某些代碼的換行,會報錯的。
完成后的效果圖:
img1

您可能感興趣的文章:
PhpCms v9 調用全站文章排行的實現代碼
phpcms V9 全站文章點擊排行榜的實現代碼
PHPCMS V9主站調用全站最新內容的方法
phpcms v9生成sitemap靜態地圖(圖文詳解)
phpcms v9更換域名后上傳圖片功能無效的解決辦法
PHPCMS V9調用全站最新內容的方法
PHPCMS V9按瀏覽次數(月、周、總)排行GET標簽調用文章
修復PHPCMS V9發布文章不顯示用戶名的bug
PHPCMS V9源碼-網站入口文件index.php
GET標簽調用全站內容月排行

[關閉]
000069股票行情