織夢TAG標籤列表頁和搜尋結果頁呼叫自定義欄位內容
阿新 • • 發佈:2020-08-13
我們在給模型新增自定義欄位後,TAG標籤列表頁和搜尋頁需要顯示自定義的欄位時,織夢預設是無法顯示自定義欄位的內容的。
網上很多教程都是寫死或者改動系統檔案,這樣不僅不夠人性化,而且改動系統檔案對升級存在影響。本文章介紹個完美的方法,既不改動系統核心檔案,又不寫死任何東西。
這個自定義方法適用於織夢整站,包括會員和後臺使用
開啟 include/extend.func.php ,在最下面加入
function GetAddField($aid,$addField) { global $dsql; $row = $dsql->GetOne("SELECT c.addtable FROM #@__archives AS a LEFT JOIN #@__channeltype AS c ON a.channel=c.id where a.id='$aid'"); $addtable = trim($row['addtable']); $row = $dsql->GetOne("SELECT $addField FROM `$addtable` WHERE aid=$aid"); return $row["$addField"]; }
taglist.htm(TAG標籤列表頁) search.htm(搜尋結果頁)模板呼叫標籤
[field:id function=GetAddField(@me,"自定義欄位名")/]
如果是時間型別欄位,你需要這樣呼叫
[field:id function=MyDate('Y-m-d',GetAddField(@me,"時間型別欄位名"))/]
如果是圖片型別欄位,你需要繼續在 include/extend.func.php ,在最下面加入
/** * 自定義圖片欄位呼叫圖片地址 * * @access public * @param string $fieldname 欄位名 * @param string $ftype 輸出樣式 * @return string */ if(!function_exists('GetImgUrl')) { function GetImgUrl($fieldname, $ftype = 1) { if($fieldname != '') { $dtp = new DedeTagParse(); $dtp->LoadSource($fieldname); if(is_array($dtp->CTags)) { foreach($dtp->CTags as $ctag) { if($ctag->GetName() == 'img') { $width = $ctag->GetAtt('width'); $height = $ctag->GetAtt('height'); $imgurl = trim($ctag->GetInnerText()); $img = ''; if($imgurl != '') { if($ftype == 1) { $img .= $imgurl; } else { $img .= '<img src="' . $imgurl . '" width="' . $width . '" height="' . $height . '" />'; } } } } } $dtp->Clear(); return $img; } } }
然後在模板中呼叫圖片欄位
[field:id function=GetImgUrl(GetAddField(@me,"圖片型別欄位名"))/]
什麼?不喜歡新增自定義方法,那就直接用runphp吧
[field:id runphp=yes]global $dsql;$row = $dsql->GetOne("SELECT c.addtable FROM #@__archives AS a LEFT JOIN #@__channeltype AS c ON a.channel=c.id where a.id=@me");$result = $dsql->GetOne("SELECT body FROM `$row[addtable]` WHERE aid=@me");@me = cn_substr(html2text($result['body']),500);[/field:id]
body 為自定義欄位名,換成你自己的自定義欄位。