织梦dedecms商业教程 织梦dedecms联动级别前台调用

织梦dedecms商业教程 织梦dedecms联动级别前台调用

学习教程tuzi2018-10-28 21:25:43A+A-

织梦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.在"后台目录"\templets\diy_list.htm找到(大约在41行):

 

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

}

在下面加入:

 

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

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}

 

在下面加入:

 

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

}

}

}

?>

修改完毕。

 

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

 

很多朋友都遇到了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."/../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

找到<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的改法类似。自己参照更改。

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

你自定义表单里的其他项参照这个一行复制就行了<tr><td bgcolor="#eeeeee" width="20%">id</td><td bgcolor="#eeeeee"><?php echo $row['id']; ?></td></tr>

其中红色的id可替换成你的其他字段的中文名,蓝色id替换成字段对应的数据库中的字段名(一定是英文或这拼音,这个不用我多说了吧!)。


点击这里复制本文地址

声明

本站发布所有广告信息、下载资源,均来自互联网,非本站自制,与本站无关。 如有侵犯您的合法权益请来信告之。我们会在三个工作日内予以清除。


本站中所有资料、资源文件均来自于网络搜索,仅作为技术学习研究之用,请必须在24小时内删除所下载文件,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担。


本站保证站内提供的所有可下载资源(软件等等)都是按“原样”提供,本站未做过任何改动;但本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 


访问本站的用户必须明白,[资源爱好者]对提供下载的软件等不拥有任何权利,其版权归该下载资源的合法拥有者所有。


本站所有资源均不提供相关技术服务,如果源码下载地址失效则请联系站长进行补发。


本站所有资源展现图片仅供参考

资源爱好者 © 本站发布所有资源,均来自互联网,非本站自制,分享目的仅供大家学习与参考,与本站无关。
如有侵犯您的合法权益请来信告之。我们会在三个工作日内予以清除。邮箱:admin?aihao.org
关于我们|广告合作|网站地图|冀ICP备14009590号|冀公网安备 13018302000072号