POST TIME:2017-11-12 23:50
織夢(mèng)dedecms系統(tǒng)首頁(yè)調(diào)用分類信息聯(lián)動(dòng)類別(地區(qū),類型等)的方法如下:
需要注意:這個(gè)方法只適用于dedecms V5.5,V5.6,V5.7
dede模板系統(tǒng)中默認(rèn)是沒(méi)有辦法調(diào)用枚舉名(聯(lián)動(dòng)菜單名稱)的,而只能調(diào)用枚舉值,為了方便大家在以后制作模板,今天就給大家?guī)?lái)一個(gè)自定義的全局函數(shù),有了這個(gè)函數(shù),以后在調(diào)用聯(lián)動(dòng)菜單的時(shí)候就非常方便了。
一、遇到問(wèn)題描述
我們知道,聯(lián)動(dòng)菜單它是保存到了附加表里,我們?cè)赼rclist標(biāo)簽中,要調(diào)用自定義附加表的字段,只能是通過(guò):
{dede:arclist row='5' channelid='內(nèi)容模型ID' addfields='自定義字段'}
insertext
{/dede:arclist}
這種方法來(lái)調(diào)用,比如以下這個(gè)實(shí)例:
{dede:arclist titlelen='60' row='8' channelid='1' addfields='nativeplace'}
[field:nativeplace/][field:title /]
{/dede:arclist}
這個(gè)的意思是調(diào)用普通文章8條,并調(diào)用附加表中的nativeplace字段(注意:該字段是聯(lián)動(dòng)類別),但是調(diào)用的結(jié)果就是枚舉值,是數(shù)字,不是地區(qū)。
二、解決方法
1)函數(shù)編寫
打開(kāi) /include/extend.func.php 文件(這個(gè)文件為自定義函數(shù)接口文件,若不存在,請(qǐng)自行創(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)動(dòng)類別不存在";
}
else{
return $row['ename'];
}
}
保存關(guān)閉即可!
2)函數(shù)調(diào)用
這個(gè)函數(shù)的調(diào)用非常簡(jiǎn)單,只需要將“枚舉值”傳遞過(guò)來(lái)即可,這個(gè)緩存組名通常也就是內(nèi)容模型中的自定義聯(lián)動(dòng)菜單字段名:
function Getsysenum(‘枚舉值');
3)調(diào)用實(shí)例
我們來(lái)看一下調(diào)用的實(shí)例代碼:
{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字段進(jìn)行Getsysenum函數(shù)處理。
這樣就可以解決這個(gè)調(diào)用的問(wèn)題了。
下面是自定義表單調(diào)用聯(lián)動(dòng)的使用方法:
織夢(mèng)官方在自定義表單中把聯(lián)動(dòng)類型加了注釋的,那么我們現(xiàn)在把注釋刪除就可以使用了,
找到
/dede/templets/diy_field_add.htm
/dede/templets/diy_field_edit.htm
把注釋掉的聯(lián)動(dòng)選項(xiàng)給恢復(fù)。然后在自定義表單里增加字段,填寫聯(lián)動(dòng)名,,前臺(tái)就可以用了。
還有一個(gè)就是,這樣做出來(lái)的聯(lián)動(dòng)前臺(tái)和后臺(tái)都只顯示枚舉值,,很煩人,我在網(wǎng)上找到方法,如下:
1.在"后臺(tái)目錄"\templets\diy_list.htm找到(大約在41行):
$fields[$field] = "<a href='{$fields[$field]}' target='_blank'><img src='images/channeladd.gif' border='0' /> 其它附件</a>";
}
在下面加入:
//聯(lián)動(dòng)類型顯示修正開(kāi)始
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)動(dòng)類型顯示修正結(jié)束
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];
}
}
}
?>
修改完畢。
需要注意的是:添加新字段時(shí)候,表單提示文字必須和聯(lián)動(dòng)的組類別名一致,比如我要添加一個(gè)表單提示文字是“地區(qū)”,那么新增類別組的時(shí)候 類別名也要填寫“地區(qū)”
很多朋友都遇到了DEDECMS自定義表單中地區(qū)二級(jí)聯(lián)動(dòng)后,調(diào)用聯(lián)動(dòng)字段時(shí)只顯示地區(qū)代碼如:
13003其實(shí)是貴州省遵義市的系統(tǒng)聯(lián)動(dòng)類編號(hào),
要讓其顯示成貴州省遵義市其實(shí)也比較容易。
需要?jiǎng)?個(gè)文件。
第一個(gè)是根目錄plus/diy.php。
第二個(gè)是上一個(gè)php對(duì)應(yīng)的模板文件更目錄下templates/plus/view_diyform.htm和list_diyform.htm(兩個(gè)模板文件改法一樣)。
提醒一下注意備份要修改的這幾個(gè)文件。
現(xiàn)在開(kāi)始了對(duì)于diy.php打開(kāi)后找到elseif($action == 'list')這一行,再在它的下邊找到
include_once DEDEINC.'/datalistcp.class.php';下面加入
include_once(DEDEDATA.'/enums/nativeplace.php');
include_once(DEDEINC."/enums.func.php");
這樣兩個(gè),
同樣找到elseif($action == 'view')這一行,也在
include_once DEDEINC.'/datalistcp.class.php';下加入上邊的紅色兩句
詳細(xì)代碼如下
elseif($action == 'list')
{
if(empty($diy->public))
{
}
include_once DEDEINC.'/datalistcp.class.php';
include_once(DEDEDATA.'/enums/nativeplace.php');
include_once(DEDEINC."/enums.func.php");
if($diy->public == 2)
{
}
else
{
}
$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))
{
}
if(empty($id))
{
}
include_once DEDEINC.'/datalistcp.class.php';
include_once(DEDEDATA.'/enums/nativeplace.php');
include_once(DEDEINC."/enums.func.php");
if($diy->public == 2)
{
}
else
{
}
$row = $dsql->getone($query);
if(!is_array($row))
{
}
$fieldlist = $diy->getFieldList();
include DEDEROOT."/templets/plus/{$diy->viewTemplate}";
}
?>
//view部分完
然后打開(kāi)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')
{
}
else if($fielddata[1]=='addon')
{
}
else
{
}
echo '<tr><td bgcolor="#ffffff">'.$fielddata[0].'</td><td bgcolor="#ffffff">'.$row[$field].'</td></tr>';
}
echo '</tbody>';
?>
(也就是將那部分php代碼)都刪除掉,然后將下面的代碼加進(jìn)去。
<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>
</tbody>
效果請(qǐng)看
list_diyform.htm的改法類似。自己參照更改。
這里要說(shuō)的是有人會(huì)問(wèn),替換完了就是地區(qū)一項(xiàng)了怎么辦?
你自定義表單里的其他項(xiàng)參照這個(gè)一行復(fù)制就行了<tr><td bgcolor="#eeeeee" width="20%">id</td><td bgcolor="#eeeeee"><?php echo $row['id']; ?></td></tr>
其中紅色的id可替換成你的其他字段的中文名,藍(lán)色id替換成字段對(duì)應(yīng)的數(shù)據(jù)庫(kù)中的字段名(一定是英文或這拼音,這個(gè)不用我多說(shuō)了吧?。?/p>