1. 程式人生 > 實用技巧 >織夢TAG標籤列表頁和搜尋結果頁呼叫自定義欄位內容

織夢TAG標籤列表頁和搜尋結果頁呼叫自定義欄位內容

我們在給模型新增自定義欄位後,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 為自定義欄位名,換成你自己的自定義欄位。