dede 自增 autoindex

1

<ul>{dede:arclist row='6' titlelen='60' orderby='pubdate' typeid='1' idlist='' channelid='1'}
<li>
[field:global name=autoindex/]
[field:global name=autoindex runphp="yes"]@me=@me+5;[/field:global]
[field:global name=autoindex runphp="yes"](@me%2==0)? @me="|":@me="";[/field:global][field:textlink/]

[field:global name=autoindex runphp="yes"](@me!=8)? @me="|":@me="";[/field:global]
意思就是當autoindex等於8時候這個標籤爲空,否則爲“|”。
</li>
{/dede:arclist}
</ul>






2
在{dede:arclist/}這個標籤中大家都知道有個[field:global.autoindex/],這個變 量每生成一行就+1,那很多人希望{dede:sql/}標籤也需要加上這個功能,很多朋友提問,肯定會認爲官方不會去做,其實不然,官方主要希望大家能 夠一同分享這種使用、開發的小技巧,小經驗,其實這個東西很簡單,自己稍微摸索下就可以知道。
下面 我們就開始增加這個小擴展,我們知道在V5.3中織夢的標籤已經分離出來,也就是類似於arclist這樣的標籤可以自己修改或者二次開發,程序這些標籤 存放的目錄在/include/taglib文件夾下面,我們可以看那個文件名,就很容易知道這些標籤文件名和標籤的對應關係。
那我們現在需要修改的是{dede:sql/}這個標籤,那我們就修改sql.lib.php這個文件。
打開後我們找到第34行,也就是代碼
$ctp->LoadSource($Innertext);
處,在下面加上以下一段代碼:
$GLOBALS['autoindex'] = 0;
這段代碼就是定義一個全局變量,並賦值爲0,接下來我們只需要將下面代碼進行下修改:
while($row = $dsql->GetArray($thisrs))
{
   $sqlCt++;
   foreach($ctp->CTags as $tagid=>$ctag){
    if(!empty($row[$ctag->GetName()])){ $ctp->Assign($tagid,$row[$ctag->GetName()]); }
   }
   $GLOBALS['autoindex']++; //每循環一次加上一個1然後解析出來
   $revalue .= $ctp->GetResult();
}

這樣一來,這個[field:global.autoindex/]標籤就可以在那個{dede:sql/}中使用了,我們舉個例子:
{dede:sql sql='select * from [url=mailto:#@__archives]#@__archives'[/url]}
[field:global.autoindex/]-[field:title/]</br>
{/dede:sql}

怎麼樣?很簡單吧,其實這種擴展還有很多很多,自己可以試試哦。

 

你這樣寫就行了:
{dede:global name='b' runphp='yes'}
ob_start();
extract($GLOBALS,   EXTR_SKIP);
//-----------------------
//下面是任意PHP代碼
print_r($this->refObj->Fields); //測試調用當前文檔類的字段數組(只支持PHP5)



//----------------------
//返回值給標籤自身
@me = ob_get_contents();
ob_clean();
{/dede:global}

當然,你想支持<?php   ?>這種語法也行,修改一下模板類,載入模板內容時把<?php 替換爲
{dede:global name='b' runphp='yes'}
ob_start();
extract($GLOBALS,   EXTR_SKIP);

把 ?> 替換爲
@me = ob_get_contents();
ob_clean();
{/dede:global}

 

還有一種做法,自定義一個PHP標籤
Copy code
<?php
if(!defined('DEDEINC')) exit('Request Error!');

function lib_php(&$ctag, &$refObj)
{
     $phpcode = trim($ctag->GetInnerText());
     if($phpcode=='') return '';
     ob_start();
     extract($GLOBALS,   EXTR_SKIP);
     @eval($phpcode);
     $revalue = ob_get_contents();
     ob_clean();
     return $revalue;
}

?>


把這代碼保存爲

include/taglib/php.lib.php

這樣直接用
{dede:php}
//這裏就能用任意PHP代碼了,不過需要注意的是,如果有include文件的,一定要用 DEDEROOT 作爲引入目錄
//如:reuqire_once(DEDEROOT.'/xxx.inc.php');
{/dede:php}

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