我們在使用DedeCMS自定義字段的時候,有時候可能會用到圖片字段,而Dede固化的圖片字段調(diào)用出來的樣式是下面這樣的:
{dede:img text='' width='270' height='129'}/uploads/101017/1-10101H21F54P.gif {/dede:img}
很多時候這樣的樣式并不是我們需要的,所以我們需要進行修改來保證我們調(diào)用的自定義圖片就是純路徑,這樣就比較方便我們使用了,例如下面這種格式:
/uploads/101017/1-10101H21F54P.gif
要實現(xiàn)這樣的調(diào)用并不難,我們需要添加一段自定義函數(shù),打開/include/extend.func.php文件,在最下面加上代碼:
//自定義模型圖片字段調(diào)用
function GetOneImgUrl($img,$ftype=1){
if($img <> ''){
$dtp = new DedeTagParse();
$dtp->LoadSource($img);
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;
}
}
然后我們在調(diào)用自定義圖片字段的時候加上個函數(shù),如下:
{dede:field.sjto function='GetOneImgUrl(@me,1)'/} // 調(diào)用圖片的信息,自動調(diào)用寬度和高度(已包含Html代碼的<img/>),sjto為自定義的圖片字段。
{dede:field.sjto function='GetOneImgUrl(@me,1)'/}//只調(diào)用圖片地址,sjto為自定義的圖片字段。
這樣就能根據(jù)我們具體情況來調(diào)用自定義圖片的純路徑或者圖片信息,但是淘站網(wǎng)在自己本地測試的時候發(fā)現(xiàn)一個bug,就是在文章中上傳自定義字段的圖片后,保存到數(shù)據(jù)庫的樣式是下面這樣的:
DedeCMS自定義圖片字段調(diào)用方法與無斜杠“/”的解決方法
系統(tǒng)自動把圖片路徑中的斜杠/給去掉了,最終調(diào)出來的圖片路徑中也沒有斜杠,這個問題就涉及到dede底層函數(shù)了,淘站網(wǎng)查看不少文件,最后在/include/customfields.func.php文件中尋求到解決方法,這個文件中,第300行有一段代碼:
$iurl = trim(str_replace($GLOBALS['cfg_basehost'],"",$iurl));
看代碼就知道,這里把圖片的路徑給做了一次替換,替換掉的內(nèi)容就是變量cfg_basehost,這個變量就在后面系統(tǒng)設(shè)置里面:
DedeCMS自定義圖片字段調(diào)用方法與無斜杠“/”的解決方法
就是站點根網(wǎng)址了,因為淘站網(wǎng)的移動站點與pc站點共用一個數(shù)據(jù)庫,這里站點根網(wǎng)址就用斜杠/代替,而自定義圖片經(jīng)過那段函數(shù)處理就自動把這個斜杠給刪除了,最終原因找到,那么解決方法也很簡單,有兩種:
一、在系統(tǒng)——系統(tǒng)基本參數(shù)設(shè)置里,把站點根網(wǎng)址的斜杠/換成自己的網(wǎng)址,這個方法適用于pc站與m站分離不用同一個數(shù)據(jù)庫的網(wǎng)站,淘站網(wǎng)的網(wǎng)站不適用。
二、打開/include/customfields.func.php,找到代碼:
$iurl = trim(str_replace($GLOBALS['cfg_basehost'],"",$iurl));
DedeCMS自定義圖片字段調(diào)用方法與無斜杠“/”的解決方法
注視掉或者刪掉。
這樣就能解決DedeCMS自定義圖片字段中路徑無斜杠的問題了。