織夢自定義標籤,還有模板頁字段無法輸出的注意事項

一、登錄後臺,模板—標籤源碼管理—[增加一個新的標籤](注意這裏,先創建頁面,不要着急寫代碼,保存的時候如果出現“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 /] -->  

注:模板頁字段輸出,不可有空格

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章