一、登錄後臺,模板—標籤源碼管理—[增加一個新的標籤](注意這裏,先創建頁面,不要着急寫代碼,保存的時候如果出現“DedeCMS:CSRF Token Check Failed!”,請打開/dede/config.php,在69行左右,那串錯誤提示函數的第一行加一個return)
二、打開新建的標籤頁面,如下:
<?php
/* author: zhang
time: 2020-5-13 13:50
qq: [email protected]
*/
if(!defined('DEDEINC'))
{
exit("Request Error!");
}
//函數名稱lib_後面的這個要和文件名一樣
function lib_randlist(&$ctag,&$refObj)
{
global $dsql,$envs;
//屬性處理
$attlist="row|12,titlelen|24";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$revalue = '';
//你需編寫的代碼,不能用echo之類語法,把最終返回值傳給$revalue
//------------------------------------------------------
/**獲取標籤內的值 <span>[field:title/]</span>*/
$innertext = $ctag->GetInnerText();
$ctp = new DedeTagParse(); /** 聲明Dede織夢模板類*/
$ctp->SetNameSpace('field', '[', ']'); /** 設置標記的命名空間,默認爲dede*/
$sql = "SELECT * FROM `#@__arctype` WHERE ishot=1"; /** 編寫sql語句,我們主要是改這個*/
$dsql->Execute('me',$sql); /** 執行一個帶返回結果的函數*/
while($rs = $dsql->GetArray('me')) /*我這裏只是單純的查詢,下面的不用改*/
{
/**根據屬性處理查詢變量*/
$rs['title'] = cn_substr($rs['title'], $titlelen);
/**獲取底層模板,將模板設置到CTags變量中*/
$ctp->LoadSource($innertext);
foreach($ctp->CTags as $tagid=>$ctag) {
if(!empty($rs[strtolower($ctag->GetName())])) {
$ctp->Assign($tagid,$rs[$ctag->GetName()]);
}
}
/**根據底層模板及查詢變量得到處理結果*/
$revalue .= $ctp->GetResult();
}
//------------------------------------------------------
return $revalue;
}
?>
<!-- 字段輸出,[]中括號一定不要有空格,不然輸不出來 -->
{dede:randlist}
<li><a href="[field:typedir/]">[field:typename/]</a></li>
{/dede:randlist}
<!-- 正確 [field:typedir/] -->
<!-- 錯誤 [field:typedir /] -->
注:模板頁字段輸出,不可有空格