织梦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 文件(这个文件为自定义函数接口文件,若不存在,请自行创建),在最后一行的?>上添加如下代码:

  function Getsysenum($fields){

  global $dsql;

  $row = $dsql->GetOne(“select * from dede_sys_enum where evalue = ‘”.$fields.”‘”);

  if(!is_array($row)){

  return “联动类别不存在”;

  }

  else{

  return $row[‘ename’];

  }

  }

  保存关闭即可!

  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.在”后台目录” empletsdiy_list.htm找到(大约在41行):

  $fields[$field] = “ 其它附件“;

  }

  在下面加入:

  //联动类型显示修正开始

  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);

  }

  //联动类型显示修正结束

  2.找到:

  {/dede:datalist}

  在下面加入:

  =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];

  }

  }

  }

  ?>

  修改完毕。

  需要注意的是:添加新字段时候,表单提示文字必须和联动的组类别名一致,比如我要添加一个表单提示文字是“地区”,那么新增类别组的时候 类别名也要填写“地区”

  很多朋友都遇到了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.”/https://www.genban.org/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(‘你访问的记录不存在或未经审核’, ‘-1’);

  exit();

  }

  $fieldlist = $diy->getFieldList();

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

  }

  ?>

  //view部分完

  然后打开view_diyform.htm

  找到

一行

  把下一行还是的到

之间的

  ‘;

  echo ‘

id ‘.$row[‘id’].’

‘;

  $allowhtml = array(‘htmltext’);

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

  {

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

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

  {

  $row[$field] = “

  ”;

  }

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

  {

  $row[$field] = “ 相关附件“;

  }

  else

  {

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

  {

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

  }

  }

  echo ‘

‘.$fielddata[0].’ ‘.$row[$field].’

‘;

  }

  echo ‘

‘;

  ?>

  (也就是将那部分php代码)都删除掉,然后将下面的代码加进去。

  

  

id

  

生日

  

  

目前所在地:

  

省份:

  

  城市:

  

  

  

  效果请看

  list_diyform.htm的改法类似。自己参照更改。

  这里要说的是有人会问,替换完了就是地区一项了怎么办?

  你自定义表单里的其他项参照这个一行复制就行了

id
☉免责声明:本站所有模板均来自用户分享和网络收集,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服,我们核实后会立即删除。
☉本站提供的源码、模板、软件工具等其他资源,都不包含技术服务,请大家谅解!
pbootcms模板网 » 织梦dedecms联动级别前台调用

Pbootcms模板网 提供优质的模板集合

立即查看 了解详情