{dede:php} //echo 'vvvv'; {/dede:php} {dede:php} //print_r($refObj->Fields); $sql = "select ars.*, art.typedir from dede_archives AS ars LEFT JOIN dede_arctype AS art ON ars.typeid=art.id where typeid=2 ORDER BY weight ASC "; $dsql->SetQuery($sql);//将SQL查询语句格式化 $dsql->Execute();//执行SQL操作 //通过循环输出执行查询中的结果 while($row = $dsql->GetArray()){ $link = $refObj->Fields['indexurl'].'/'.$row['typedir'].'/'.$row['id']; $link = str_replace('{cmspath}', '', $link); $class = "ahy"; if($refObj->Fields['id'] == $row['id']) $class="ahytt"; echo '<a href="'.$link.'.html" class="'.$class.'">'; echo $row['title']; echo '</a> '; } {/dede:php}
{dede:sql}標籤的用法
sql標籤可以稱得上是萬能標籤了,查詢資料庫將其輸出,這裡介紹一些關於這個標籤的用法:
1.用來輸出統計內容,這個是不錯的,舉個例子,我們來統計下總共發了多少的文章,想法就是輸出dede_addonarticle這個文章附加表內容總數就可以了。
{dede:sql sql="SELECT COUNT(*) AS nums FROM dede_addonarticle"} [field:name = "nums"/] {/dede:sql}
2.使用~field~來進行特殊的查詢,例如之前論壇上面很多會員需要做一個輸出當前發布文章會員的相關內容,之前用sql或者arclist標籤是沒辦法實現的,因為每篇內容是不同的,這裡我們來用5.5的sql語句來做個示範。
我們先在文章範本中對應的位置加上下面的標籤
{dede:sql sql="SELECT * FROM dede_archives WHERE writer=~writer~"} [field:id/], DEDE模板 {/dede:sql}
這個放到article_article.htm頁面,將會檢索目前會員發佈的相關文章,這裡的~ writer ~會根據目前內容的環境變數進行替換後再執行查詢。
這裡出現在SQL語句中條件查詢的~ writer~,也就是$refObj->Fields[$value]這個裡面的相關內容
模板中使用PHP
# 許多人希望織夢的模板標籤能夠更加靈活,加入可以運行PHP的功能,這裡在DedeCMS V5.5中就加入了一個可以執行php的特殊標籤{dede:php}{/dede:php},這個標籤可以執行PHP語句了。
我在這裡舉幾個常用的例子:
1.最簡單的輸出內容:
{dede:php} $numA = 1; $numB = 2; echo $numA + $numB; {/dede:php}
在 {dede:php}裡想要輸出訊息 可以直接使用print , echo 之類的列印出來 賦值給@me 無效
這個輸出的內容為計算結果:
rree#
3
{dede:php} $row = $dsql->GetOne('select id,typename from dede_arctype where id=2'); print_r($row); {/dede:php}
Array ( [id] => 2 [typename] => 问答 )
#
{dede:php} print_r($refObj->Fields); {/dede:php}
Array ( [typeid] => 0 [phpurl] => /plus [indexurl] => / [templeturl] => /templets [memberurl] => /member [specurl] => /special [indexname] => 主页 [templetdef] => /templets/default )
Array ( [id] => 3 [reid] => 0 [topid] => 0 [sortrank] => 1 [typename] => 产品 [typedir] => {cmspath}/product … … [indexname] => 主页 [templetdef] => /templets/default [position] => 主页 > 产品 > [title] => 产品 )
{dede:php} $thisid = $refObj->Fields['id']; $row = $dsql->GetOne('select id,typename from dede_arctype where id='.$thisid); print_r($row); {/dede:php}
$dsql->Execute('me',$sql); while($rs = $dsql->GetArray('me')) { //根据属性处理查询变量 $rs['title'] = cn_substr($rs['title'], $titlelen); //获取底层模板 $ctp->LoadSource($innertext); foreach($ctp->CTags as $tagid=>$ctag) { if(!empty($rs[strtolower($ctag->GetName())])) { $ctp->Assign($tagid,$rs[$ctag->GetName()]); DEDE模板 } } //根据底层模板及查询变量得到处理结果 $revalue .= $ctp->GetResult(); }
if(!defined('DEDEINC')) { exit("Request Error!"); } function lib_writerarc(&$ctag,&$refObj) { global $dsql,$envs; //属性处理 $attlist="row|12,titlelen|24"; FillAttsDefault($ctag->CAttribute->Items,$attlist); extract($ctag->CAttribute->Items, EXTR_SKIP); $revalue = ''; $innertext = $ctag->GetInnerText(); $ctp = new DedeTagParse(); $ctp->SetNameSpace('field', '[', ']'); $sql = "SELECT * FROM dede_archives WHERE writer='{$refObj->Fields['writer']}' limit 0, $row"; $dsql->Execute('me',$sql); while($rs = $dsql->GetArray('me')) { //根据属性处理查询变量 $rs['title'] = cn_substr($rs['title'], $titlelen); //获取底层模板 $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; } ?>
相關建議:
dedecms5.7最新sql利用guestbook .php注射漏洞
dedecms SESSION變數覆寫導致SQL注入common.inc.php的解決
##PHP指令注入dedecms遠端寫入檔案連結實例分享
#
以上是怎樣在dede中用php標籤結合sql使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!