phpcms教程- PHPCMS V9調用全站最新內容的解決方案
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屬性,也就只能顯示一頁。坑爹啊,有木有......
也曾經試過新建一個推薦位,發布文章時自動添加到這個推薦位。這樣做也行得通,但是感覺有點麻煩,且無法自動更新。
既然分頁出現問題,那我就自己構造分頁,看代碼!PHPCMS中國http://phpcms.org.cn
- <!--先自定義幾個變量-->
- {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]}&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]}&page={$p}">{$p}</a>{/if}
- {if $p==$pn}{if $_GET[page]==""}<a href="{$CATEGORYS[$catid][url]}&page=2" class="a1">{L('next')}</a>{else}{if $_GET[page]==$pn}<a href="{$CATEGORYS[$catid][url]}&page={$pn}" class="a1">{L('next')}</a>{else}<a href="{$CATEGORYS[$catid][url]}&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、自定義顯示頁碼。樣式可以自定義。但是不要刪除某些代碼的換行,會報錯的。