濮阳杆衣贸易有限公司

主頁 > 網(wǎng)站建設 > 建站知識 > 織夢dedecms聯(lián)動級別前臺調用

織夢dedecms聯(lián)動級別前臺調用

POST TIME:2017-11-12 23:50

織夢dedecms系統(tǒng)首頁調用分類信息聯(lián)動類別(地區(qū),類型等)的方法如下:

需要注意:這個方法只適用于dedecms V5.5,V5.6,V5.7

dede模板系統(tǒng)中默認是沒有辦法調用枚舉名(聯(lián)動菜單名稱)的,而只能調用枚舉值,為了方便大家在以后制作模板,今天就給大家?guī)硪粋€自定義的全局函數(shù),有了這個函數(shù),以后在調用聯(lián)動菜單的時候就非常方便了。

一、遇到問題描述

我們知道,聯(lián)動菜單它是保存到了附加表里,我們在arclist標簽中,要調用自定義附加表的字段,只能是通過:

{dede:arclist row='5' channelid='內(nèi)容模型ID' addfields='自定義字段'}

insertext

{/dede:arclist}

這種方法來調用,比如以下這個實例:

{dede:arclist titlelen='60' row='8' channelid='1' addfields='nativeplace'}

[field:nativeplace/][field:title /]

{/dede:arclist}

這個的意思是調用普通文章8條,并調用附加表中的nativeplace字段(注意:該字段是聯(lián)動類別),但是調用的結果就是枚舉值,是數(shù)字,不是地區(qū)。

二、解決方法

1)函數(shù)編寫

打開 /include/extend.func.php 文件(這個文件為自定義函數(shù)接口文件,若不存在,請自行創(chuàng)建),在最后一行的?>上添加如下代碼:

function Getsysenum($fields){

global $dsql;

$row = $dsql->GetOne("select * from dede_sys_enum where evalue = '".$fields."'");

if(!is_array($row)){

return "聯(lián)動類別不存在";

}

else{

return $row['ename'];

}

}

保存關閉即可!

2)函數(shù)調用

這個函數(shù)的調用非常簡單,只需要將“枚舉值”傳遞過來即可,這個緩存組名通常也就是內(nèi)容模型中的自定義聯(lián)動菜單字段名:

function Getsysenum(‘枚舉值');

3)調用實例

我們來看一下調用的實例代碼:

{dede:arclist titlelen='60' row='8' channelid='1' addfields='nativeplace'}

[field:nativeplace function="Getsysenum(@me)"/][field:title /]

{/dede:arclist}

其中[field:nativeplace function="Getsysenum(@me)"/] 就是將nativeplace字段進行Getsysenum函數(shù)處理。

這樣就可以解決這個調用的問題了。

下面是自定義表單調用聯(lián)動的使用方法:

織夢官方在自定義表單中把聯(lián)動類型加了注釋的,那么我們現(xiàn)在把注釋刪除就可以使用了,

找到

/dede/templets/diy_field_add.htm

/dede/templets/diy_field_edit.htm

把注釋掉的聯(lián)動選項給恢復。然后在自定義表單里增加字段,填寫聯(lián)動名,,前臺就可以用了。

還有一個就是,這樣做出來的聯(lián)動前臺和后臺都只顯示枚舉值,,很煩人,我在網(wǎng)上找到方法,如下:

1.在"后臺目錄"\templets\diy_list.htm找到(大約在41行):

$fields[$field] = "<a href='{$fields[$field]}' target='_blank'><img src='images/channeladd.gif' border='0' /> 其它附件</a>";

}

在下面加入:

//聯(lián)動類型顯示修正開始

else if($fielddata[1]=='stepselect')

{

$db->Execute('me',"SELECT * FROM `dede_stepselect` WHERE itemname='{$fielddata[0]}'");

while($arr = $db->GetArray(me))

{

$egroup = $arr['egroup'];

}

$fields[$field] = Getenums("{$fields[$field]}",$egroup);

}

//聯(lián)動類型顯示修正結束

2.找到:

{/dede:datalist}

在下面加入:

<?php

function Getenums($evalue=0,$egroup)

{

if( !isset($GLOBALS['em_'.$egroup.'s']) )

{

$cachefile = DEDEDATA.'/enums/'.$egroup.'.php';

if(!file_exists($cachefile))

{

require_once(DEDEINC.'/enums.func.php');

WriteEnumsCache();

}

if(!file_exists($cachefile))

{

return '';

}

else

{

require_once($cachefile);

}

}

if($evalue>=500)

{

if($evalue % 500 == 0)

{

return (isset($GLOBALS['em_'.$egroup.'s'][$evalue]) ? $GLOBALS['em_'.$egroup.'s'][$evalue] : '');

}

else if (preg_match("#([0-9]{1,})\.([0-9]{1,})#", $evalue, $matchs))

{

$esonvalue = $matchs[1];

$etopvalue = $esonvalue - ($esonvalue % 500);

$esecvalue = $evalue;

$GLOBALS['em_'.$egroup.'s'][$etopvalue] = empty($GLOBALS['em_'.$egroup.'s'][$etopvalue])? ''

: $GLOBALS['em_'.$egroup.'s'][$etopvalue];

$GLOBALS['em_'.$egroup.'s'][$esonvalue] = empty($GLOBALS['em_'.$egroup.'s'][$esonvalue])? ''

: $GLOBALS['em_'.$egroup.'s'][$esonvalue];

$GLOBALS['em_'.$egroup.'s'][$esecvalue] = empty($GLOBALS['em_'.$egroup.'s'][$esecvalue])? ''

: $GLOBALS['em_'.$egroup.'s'][$esecvalue];

return $GLOBALS['em_'.$egroup.'s'][$etopvalue].' - '.$GLOBALS['em_'.$egroup.'s'][$esonvalue].' - '.$GLOBALS['em_'.$egroup.'s'][$esecvalue];

}

else

{

$elimit = $evalue % 500;

$erevalue = $evalue - $elimit;

$GLOBALS['em_'.$egroup.'s'][$erevalue] = empty($GLOBALS['em_'.$egroup.'s'][$erevalue])? ''

: $GLOBALS['em_'.$egroup.'s'][$erevalue];

$GLOBALS['em_'.$egroup.'s'][$evalue] = empty($GLOBALS['em_'.$egroup.'s'][$evalue])? ''

: $GLOBALS['em_'.$egroup.'s'][$evalue];

return $GLOBALS['em_'.$egroup.'s'][$erevalue].' - '.$GLOBALS['em_'.$egroup.'s'][$evalue];

}

}

}

?>

修改完畢。

需要注意的是:添加新字段時候,表單提示文字必須和聯(lián)動的組類別名一致,比如我要添加一個表單提示文字是“地區(qū)”,那么新增類別組的時候 類別名也要填寫“地區(qū)”

很多朋友都遇到了DEDECMS自定義表單中地區(qū)二級聯(lián)動后,調用聯(lián)動字段時只顯示地區(qū)代碼如:

13003其實是貴州省遵義市的系統(tǒng)聯(lián)動類編號,

要讓其顯示成貴州省遵義市其實也比較容易。

需要動3個文件。

第一個是根目錄plus/diy.php。

第二個是上一個php對應的模板文件更目錄下templates/plus/view_diyform.htm和list_diyform.htm(兩個模板文件改法一樣)。

提醒一下注意備份要修改的這幾個文件。

現(xiàn)在開始了對于diy.php打開后找到elseif($action == 'list')這一行,再在它的下邊找到

include_once DEDEINC.'/datalistcp.class.php';下面加入

include_once(DEDEDATA.'/enums/nativeplace.php');

include_once(DEDEINC."/enums.func.php");

這樣兩個,

同樣找到elseif($action == 'view')這一行,也在

include_once DEDEINC.'/datalistcp.class.php';下加入上邊的紅色兩句

詳細代碼如下

elseif($action == 'list')

{

if(empty($diy->public))

{

showMsg('后臺關閉前臺瀏覽', 'javascript:;');

exit();

}

include_once DEDEINC.'/datalistcp.class.php';

include_once(DEDEDATA.'/enums/nativeplace.php');

include_once(DEDEINC."/enums.func.php");

if($diy->public == 2)

{

$query = "select * from `{$diy->table}` order by id desc";

}

else

{

$query = "select * from `{$diy->table}` where ifcheck=1 order by id desc";

}

$datalist = new DataListCP();

$datalist->pageSize = 10;

$datalist->SetParameter('action', 'list');

$datalist->SetParameter('diyid', $diyid);

$datalist->SetTemplate(DEDEINC."/../templets/plus/{$diy->listTemplate}");

$datalist->SetSource($query);

$fieldlist = $diy->getFieldList();

$datalist->Display();

}

//list部分完

elseif($action == 'view')

{

if(empty($diy->public))

{

showMsg('后臺關閉前臺瀏覽' , 'javascript:;');

exit();

}

if(empty($id))

{

showMsg('非法操作!未指定id', 'javascript:;');

exit();

}

include_once DEDEINC.'/datalistcp.class.php';

include_once(DEDEDATA.'/enums/nativeplace.php');

include_once(DEDEINC."/enums.func.php");

if($diy->public == 2)

{

$query = "select * from {$diy->table} where id='$id' ";

}

else

{

$query = "select * from {$diy->table} where id='$id' and ifcheck=1";

}

$row = $dsql->getone($query);

if(!is_array($row))

{

showmsg('你訪問的記錄不存在或未經(jīng)審核', '-1');

exit();

}

$fieldlist = $diy->getFieldList();

include DEDEROOT."/templets/plus/{$diy->viewTemplate}";

}

?>

//view部分完

然后打開view_diyform.htm

找到<table class='listtable' cellspacing="1">一行

把下一行還是的到</table>之間的

<?php

echo '<tbody>';

echo '<tr><td bgcolor="#eeeeee" width="20%">id</td><td bgcolor="#eeeeee">'.$row['id'].'</td></tr>';

$allowhtml = array('htmltext');

foreach($fieldlist as $field=>$fielddata)

{

if($row[$field]=='') continue;

if($fielddata[1]=='img')

{

$row[$field] = "<a href='{$row[$field]}' target='_blank'><img src='{$row[$field]}'/></a>\r\n";

}

else if($fielddata[1]=='addon')

{

$row[$field] = "<a href='{$row[$field]}' target='_blank'><img src='img/addon.gif' border='0' /> 相關附件</a>";

}

else

{

if(!in_array($fielddata[1], $allowhtml))

{

$row[$field] = htmlspecialchars($row[$field]);

}

}

echo '<tr><td bgcolor="#ffffff">'.$fielddata[0].'</td><td bgcolor="#ffffff">'.$row[$field].'</td></tr>';

}

echo '</tbody>';

?>

(也就是將那部分php代碼)都刪除掉,然后將下面的代碼加進去。

<tbody>

<tr><td bgcolor="#eeeeee" width="20%">id</td><td bgcolor="#eeeeee"><?php echo $row['id']; ?></td></tr>

<tr><td bgcolor="#eeeeee" width="20%">生日</td><td bgcolor="#eeeeee"><?php echo $row['shengri']; ?></td></tr>

<tr>

<td>目前所在地:</td>

<td> 省份:

<?php

$places = GetEnumsTypes($row['nativeplace']);

echo ( isset($em_nativeplaces[$places['top']]) ? $em_nativeplaces[$places['top']] : '');

?>

城市:

<?php

echo ( isset($em_nativeplaces[$places['son']]) ? $em_nativeplaces[$places['son']] : '');

?></td>

</tr>

</tbody>

效果請看

list_diyform.htm的改法類似。自己參照更改。

這里要說的是有人會問,替換完了就是地區(qū)一項了怎么辦?

你自定義表單里的其他項參照這個一行復制就行了<tr><td bgcolor="#eeeeee" width="20%">id</td><td bgcolor="#eeeeee"><?php echo $row['id']; ?></td></tr>

其中紅色的id可替換成你的其他字段的中文名,藍色id替換成字段對應的數(shù)據(jù)庫中的字段名(一定是英文或這拼音,這個不用我多說了吧?。?/p>



收縮
  • 微信客服
  • 微信二維碼
  • 電話咨詢

  • 400-1100-266
清水河县| 赣州市| 肥西县| 温州市| 额济纳旗| 浠水县| 苏尼特右旗| 商丘市| 巴林右旗| 巴青县| 乌兰浩特市| 图片| 呼玛县| 榆林市| 五莲县| 亚东县| 秦皇岛市| 会宁县| 鄂托克旗| 凤山县| 资阳市| 祥云县| 英德市| 吐鲁番市| 苏尼特左旗| 桂东县| 三明市| 嵊州市| 吉隆县| 福泉市| 东台市| 桓仁| 乐陵市| 定州市| 老河口市| 高阳县| 常德市| 麻阳| 石景山区| 紫金县| 蓝田县|