|
DEDECMS自帶的{dede:channelartlist}標(biāo)簽只能獲取當(dāng)前欄目的子欄目的內(nèi)容列表,在首頁模板中就是頂級欄目的內(nèi)容列表,在做垃圾站的時(shí)候表現(xiàn)不夠靈活。假如我要在一個(gè)沒有下級欄目的欄目中使用{dede:channelartlist}標(biāo)簽的話就不會獲得任何內(nèi)容。有時(shí)候我們會發(fā)現(xiàn)網(wǎng)站在列表頁和內(nèi)容頁內(nèi)容不夠充實(shí),又怕麻煩去手動添加一些內(nèi)容列表(所添加的常見內(nèi)容也不過是最新、熱門、推薦文檔等這些全局標(biāo)簽),又不想去制作多個(gè)列表和內(nèi)容頁模板使其內(nèi)容豐富起來,如果你非要做的話,其做法不過就是使用arclist標(biāo)簽讀取一些指定欄目的內(nèi)容,這種做法的缺點(diǎn)就是如果你要鏈接到你指定的欄目就要手動在HTML代碼里寫出來,不夠機(jī)動。
假如有一個(gè)全局標(biāo)簽,能用于網(wǎng)站模板的任意位置,隨機(jī)列出指定數(shù)目的網(wǎng)站欄目及內(nèi)容列表,豈不使你的垃圾站內(nèi)容更加豐富多彩哈。
于是我自制的全局標(biāo)簽{dede:randomartlist}誕生了
它可以在任意模板位置列出你指定數(shù)目(標(biāo)簽里的row參數(shù))的隨機(jī)欄目,并且這些只能非隱藏、文章模型、不是封面和外鏈的欄目(既此欄目會有實(shí)實(shí)在在的文章內(nèi)容),且排除自身(如果用于欄目列表和文章內(nèi)容顯示頁面)。不過如果你要在首頁調(diào)用欄目內(nèi)容列表的話還是推薦使用{dede:channelartlist}標(biāo)簽。
使用方法:
一、在任意模板位置中切入標(biāo)簽:
{dede:randomartlist row=3}
<h3><a href="{dede:field name='typeurl'/}" title="{dede:field name='typename'/}">{dede:field name='typename'/}</a></h3><span><a href="{dede:field name='typeurl'/}">更多</a></span>
<ul>
{dede:arclist titlelen=40 row='8'}
<li><a href="[field:arcurl/]" title="[field:fulltitle/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
{/dede:randomartlist}復(fù)制代碼
標(biāo)簽唯一的一個(gè)參數(shù)row為要隨機(jī)顯示的欄目數(shù)目
標(biāo)簽里面的內(nèi)置html代碼可以自行修改,里面的其他標(biāo)簽相信用過DEDE的都很熟悉,如果該標(biāo)簽沒有內(nèi)置模板的話(即用法為:{dede:randomartlist row=3}{/dede:randomartlist})將會使用{dede:channelartlist}標(biāo)簽的系統(tǒng)默認(rèn)模板(模板目錄/system/part_channelartlist.htm),因?yàn)檫@個(gè)標(biāo)簽我是從{dede:channelartlist}修改過來的,所以也就沒有重新配置,建議大家都自己定義。
二、在 include/taglib目錄里添加如下標(biāo)簽代碼文件randomartlist.lib.php:
<?php
/**
* [全局]隨機(jī)任意調(diào)用欄目內(nèi)容列表,DEDE現(xiàn)有的channelartlist標(biāo)簽只能在首頁調(diào)用頂級欄目和欄目頁調(diào)用其子欄目列表
* 本標(biāo)簽是對channelartlist的修改,去除了它的上下文環(huán)境,標(biāo)簽可用于任意模板位置
* @author Summer 2009.04.15 qq 10256288
*/
if(!defined('DEDEINC')) exit('Request Error!');
require_once(DEDEINC.'/arc.partview.class.php');
function lib_randomartlist(&$ctag,&$refObj)
{
global $dsql,$envs,$_sys_globals;
//處理標(biāo)記屬性、innertext
$attlist = 'typeid|0,row|10';
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$innertext = trim($ctag->GetInnerText());
if($innertext=='') $innertext = GetSysTemplets('part_channelartlist.htm');
$totalnum = $row;
if(empty($totalnum)) $totalnum = 20;
//獲得類別ID總數(shù)的信息
$typeids = array();
//只讀取內(nèi)容模型為文章的欄目[且欄目不是封面和外部鏈接,非隱藏欄目]
$tpsql = "id<>".$_sys_globals['typeid']." AND ispart=0 And ishidden<>1 And channeltype=1";
$dsql->SetQuery("Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath from `#@__arctype` where $tpsql order by rand() limit $totalnum");
$dsql->Execute();
while($row = $dsql->GetArray()) {
$typeids[] = $row;
}
if(!isset($typeids[0])) return '';
$artlist = '';
$GLOBALS['itemindex'] = 0;
$GLOBALS['itemparity'] = 1;
for($i=0;isset($typeids[$i]);$i++)
{
$GLOBALS['itemindex']++;
$pv = new PartView($typeids[$i]['id']);
$pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]);
$pv->SetTemplet($innertext,'string');
$artlist .= $pv->GetResult();
$GLOBALS['itemparity'] = ($GLOBALS['itemparity']==1 ? 2 : 1);
}
//注銷環(huán)境變量,以防止后續(xù)調(diào)用中被使用
$GLOBALS['envs']['typeid'] = $_sys_globals['typeid'];
$GLOBALS['envs']['reid'] = '';
return $artlist;
}
?>復(fù)制代碼
當(dāng)然你也可以在DEDECMS后臺 -> 模板 -> 標(biāo)簽源碼管理 添加這個(gè)新的標(biāo)簽,然后你就可以在任意模板位置使用{dede:randomartlist}標(biāo)簽調(diào)用隨機(jī)欄目了 |
|