织梦dedecms联动级别前台调用
织梦dedecms系统首页调用分类信息联动类别(地区,类型等)的方法如下:
需要注意:这个方法只适用于dedecms V5.5,V5.6,V5.7
dede模板系统中默认是没有办法调用枚举名(联动菜单名称)的,而只能调用枚举值,为了方便大家在以后制作模板,今天就给大家带来一个自定义的全局函数,有了这个函数,以后在调用联动菜单的时候就***方便了。
一、遇到问题描述
我们知道,联动菜单它是保存到了附加表里,我们在arclist标签中,要调用自定义附加表的字段,只能是通过:
{dede:arclist row='5' channelid='内容模型ID' addfields='自定义字段'}
insertext
{/dede:arclist}
这种方法来调用,比如以下这个实例:
{dede:arclist titlelen='60' row='8' channelid='1' addfields='nativeplace'}
[field:nativeplace/][field:title /]
{/dede:arclist}
这个的意思是调用普通文章8条,并调用附加表中的nativeplace字段(注意:该字段是联动类别),但是调用的结果就是枚举值,是数字,不是地区。
二、解决方法
1)函数编写
打开 /include/extend.func.php 文件(这个文件为自定义函数接口文件,若不存在,请自行创建),在***后一行的?>上添加如下代码:
保存关闭即可!
2)函数调用
这个函数的调用***简单,只需要将“枚举值”传递过来即可,这个缓存组名通常也就是内容模型中的自定义联动菜单字段名:
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函数处理。
这样就可以解决这个调用的问题了。
下面是自定义表单调用联动的使用方法:
织梦官方在自定义表单中把联动类型加了注释的,那么我们现在把注释删除就可以使用了,
找到
/dede/templets/diy_field_add.htm
/dede/templets/diy_field_edit.htm
把注释掉的联动选项给恢复。然后在自定义表单里增加字段,填写联动名,,前台就可以用了。
还有一个就是,这样做出来的联动前台和后台都只显示枚举值,,很烦人,我在网上找到方法,如下:
1.在"后台目录"\templets\diy_list.htm找到(大约在41行):
$fields[$field]=" 其它附件";
}
在下面加入:
2.找到:
{/dede:datalist}
在下面加入:
修改完毕。
需要注意的是:添加新字段时候,表单提示文字必须和联动的组类别名一致,比如我要添加一个表单提示文字是“地区”,那么新增类别组的时候 类别名也要填写“地区”
很多朋友都遇到了DEDECMS自定义表单中地区二级联动后,调用联动字段时只显示地区代码如:
13003其实是贵州省遵义市的系统联动类编号,
要让其显示成贵州省遵义市其实也比较容易。
需要动3个文件。
***个是根目录plus/diy.php。
第二个是上一个php对应的模板文件更目录下templates/plus/view_diyform.htm和list_diyform.htm(两个模板文件改法一样)。
提醒一下注意备份要修改的这几个文件。
现在开始了对于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."/>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('你访问的记录不存在或未经审核', '-1');
exit();
}
$fieldlist=$diy->getFieldList();
include DEDEROOT."/templets/plus/{$diy->viewTemplate}";
}
?>
//view部分完
然后打开view_diyform.htm
找到
echo '
';echo '
$allowhtml=array('htmltext');
foreach($fieldlist as $field=>$fielddata)
{
if($row[$field]=='') continue;
if($fielddata[1]=='img')
{
}
else if($fielddata[1]=='addon')
{
$row[$field]=" 相关附件";
}
else
{
if(!in_array($fielddata[1], $allowhtml))
{
$row[$field]=htmlspecialchars($row[$field]);
}
}
echo '
}
echo '
';?>
(也就是将那部分php代码)都删除掉,然后将下面的代码加进去。
$places=GetEnumsTypes($row['nativeplace']);
echo ( isset($em_nativeplaces[$places['top']]) ? $em_nativeplaces[$places['top']] : '');
?>
城市:
echo ( isset($em_nativeplaces[$places['son']]) ? $em_nativeplaces[$places['son']] : '');
?>
效果请看
list_diyform.htm的改法类似。自己参照更改。
这里要说的是有人会问,替换完了就是地区一项了怎么办?
你自定义表单里的其他项参照这个一行复制就行了
其中红色的id可替换成你的其他字段的中文名,蓝色id替换成字段对应的数据库中的字段名(***是英文或这拼音,这个不用我多说了吧!)。
时间:(2024-02-06 13:40:14)
本站资源均来自互联网或会员发布,如果不小心侵犯了您的权益请与我们联系。我们将立即删除!谢谢!