在本文中,我们将为您详细介绍dede独立模型中的联动类型字段是怎么在新闻页面中显示枚举名的的相关知识,此外,我们还会提供一些关于DedeCMS新建模型自定义联动类别调用及修改办法、DedeCMS新建模
在本文中,我们将为您详细介绍dede独立模型中的联动类型字段是怎么在新闻页面中显示枚举名的的相关知识,此外,我们还会提供一些关于DedeCMS 新建模型自定义联动类别调用及修改办法、DedeCMS 新建模型自定义联动类别调用及修改方法、DedeCms5.6自定义模型中的多个联动教程、dedecms5.7 联动类型无法显示的有用信息。
本文目录一览:- dede独立模型中的联动类型字段是怎么在新闻页面中显示枚举名的
- DedeCMS 新建模型自定义联动类别调用及修改办法
- DedeCMS 新建模型自定义联动类别调用及修改方法
- DedeCms5.6自定义模型中的多个联动教程
- dedecms5.7 联动类型无法显示
dede独立模型中的联动类型字段是怎么在新闻页面中显示枚举名的
dede的联动类型是是通过将字段和系统枚举表dede_sys_enum相关联的,独立模型的表中联动类别字段存储的是表dede_sys_enum的枚举值,这是一个数值,类似于代号的意思,当要显示独立模型的联动类别字段时,首先根据这个枚举值在dede_sys_enum中找出相应枚举名,然后才显示出来。在模版文件中我们不需要知道这个过程是怎么进行的,只需按照显示一般字段的方式就能正确显示联动类型了。
这篇新闻主要讨论的就是在dede代码中是怎么显示联动类型字段的。
不管是在新闻页面还是栏目页面都能直接使用[field:codecategory/]这样的方式来显示联动类型,这里就以栏目页面为例。
显示独立模型的列表是通过/include/arc.sglistview.class.php来完成的,在arc.sglistview.class.php的GetArcList办法中如下代码完成了对独立模型所有字段的特殊处理:
foreach($this->ChannelUnit->ChannelFields as $k=>$arr) { if(isset($row[$k])) { $row[$k] = $this->ChannelUnit->MakeField($k,$row[$k]); } }没有这段代码独立模型的联动字段就显示的是乱七八糟的数字。ChannelUnit的MakeField的在/include/channelunit.class.php中,用于处理某个字段的值,代码如下:
/** * 处理某个字段的值 * * @access public * @param string $fname 字段名称 * @param string $fvalue 字段值 * @param string $addvalue 增加值 * @return string */ function MakeField($fname, $fvalue, $addvalue='') { //处理各种数据类型 $ftype = $this->ChannelFields[$fname]['type']; if($fvalue=='') { if($ftype != 'checkbox') $fvalue = $this->ChannelFields[$fname]['default']; } if($ftype=='text') { $fvalue = HtmlReplace($fvalue); } else if($ftype=='textdata') { if(!is_file($GLOBALS['cfg_basedir'].$fvalue)) { return ''; } $fp = fopen($GLOBALS['cfg_basedir'].$fvalue,'r'); $fvalue = ''; while(!feof($fp)) { $fvalue .= fgets($fp,1024); } fclose($fp); } else if($ftype=='addon') { $foldvalue = $fvalue; $tmptext = GetSysTemplets("channel_addon.htm"); $fvalue = str_replace('~link~',$foldvalue,$tmptext); $fvalue = str_replace('~phpurl~',$GLOBALS['cfg_phpurl'],$fvalue); } else if(file_exists(DEDEINC.'/taglib/channel/'.$ftype.'.lib.php')) { echo "$fname-"; echo "$fvalue $ftype<br>"; include_once(DEDEINC.'/taglib/channel/'.$ftype.'.lib.php'); $func = 'ch_'.$ftype; echo "$func"; $fvalue = $func($fvalue,$addvalue,$this,$fname); } return $fvalue; }其中,上面的不同case值处理不同字段类型,联动类型在*后一个case中,他引入了\include\taglib\channel\stepselect.lib.php文件(因为联动类型的$ftype值为stepselect),然后*终的代码进入stepselect.lib.php的ch_stepselect办法中。
<?php if(!defined('DEDEINC')) exit("Request Error!"); function ch_stepselect($fvalue,&$arcTag,&$refObj,$fname='') { return GetEnumsValue2($fname,$fvalue); } /** * 获取二级枚举的值 * * @version $Id: stepselect.lib.php 16:24 2010年7月26日Z tianya $ * @package DedeCMS.Taglib * @copyright Copyright (c) 2007 - 2010, DesDev, Inc. * @license * @link */ function GetEnumsValue2($egroup,$evalue=0) { 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]; } } }其实我并没有去研究ch_stepselect办法以及其调用的GetEnumsValue2办法,因为这里的关键是arc.sglistview.class.php的GetArcList办法中的那段代码。
本文章网址:http://www.ppssdd.com/code/13360.html。转载请保留出处,谢谢合作!DedeCMS 新建模型自定义联动类别调用及修改办法
找了好几天资料,没找到新建模型中自定义联动类别如何用,自己就改了改..现在可以用了 把办法分享一下...不对的地方请大家帮助改正。
先修改 include\taglib\infolink.lib.php 文件
require_once(DEDEROOT.'/data/enums/infotype.php');
下面添加
require_once(DEDEROOT.'/data/enums/自定义联动类别字段名.php');
function lib_infolink(&$ctag,&$refObj)
{
global $dsql,$nativeplace,$infotype,$自定义联动类别字段名,$hasSetEnumJs,$cfg_cmspath,$cfg_mainsite;
global $em_nativeplaces,$em_infotypes,$em_自定义联动类别字段名s; //看清晰,这里后面的个S
$fields = array('nativeplace'=>'','infotype'=>'','自定义联动类别字段名'=>'','typeid'=>$typeid,
'channelid'=>$channelid,'linkallplace'=>'','linkealltype'=>'','linkeall自定义联动类别字段名'=>'');
$fields['nativeplace'] = $fields['infotype'] = $fields['自定义联动类别字段名'] = '';
$fields['linkalltype'] = "<a href='{$baseurl}plus/list.php?channelid={$channelid}&tid={$typeid}&nativeplace={$nativeplace}'>不限</a>";
//下面添加一行
$fields['linkeall自定义联动类别字段名'] = "<a href='{$baseurl}plus/list.php?channelid={$channelid}&tid={$typeid}&自定义联动类别字段名={$自定义联动类别字段名}&nativeplace={$nativeplace}'>不限</a>";
搜索 if(is_array($ctp->CTags)) 在这句上面添加
//自定义联动类别字段链接
if(empty($自定义联动类别字段名))
{
foreach($em_自定义联动类别字段名s as $eid=>$em)
{
if($eid % 500 != 0) continue;
$fields['自定义联动类别字段名'] .= " <a href='{$baseurl}plus/list.php?channelid={$channelid}&tid={$typeid}&自定义联动类别字段名={$eid}&nativeplace={$nativeplace}'>{$em}</a>";
}
}
else
{
$sontype = ( ($自定义联动类别字段名 % 500 != 0) ? $自定义联动类别字段名 : 0 );
$toptype = ( ($自定义联动类别字段名 % 500 == 0) ? $自定义联动类别字段名 : ( $自定义联动类别字段名-($membertype%500) ) );
$fields['自定义联动类别字段名'] = "<a href='{$baseurl}plus/list.php?channelid={$channelid}&tid={$typeid}&自定义联动类别字段名={$toptype}&nativeplace={$nativeplace}'><b>{$em_自定义联动类别字段名s[$toptype]}</b></a> ";
foreach($em_自定义联动类别字段名s as $eid=>$em)
{
if($eid < $toptype+1 || $eid > $toptype+499) continue;
if($eid == $自定义联动类别字段名) {
$fields['自定义联动类别字段名'] .= " <b>{$em}</b>";
}
else {
$fields['自定义联动类别字段名'] .= " <a href='{$baseurl}plus/list.php?channelid={$channelid}&tid={$typeid}&自定义联动类别字段名={$eid}&nativeplace={$nativeplace}'>{$em}</a>";
}
}
}
再修改 plus\list.php 文件
搜索 $infotype = ( (empty($infotype) || !is_numeric($infotype)) ? 0 : $infotype ); 在下面添加一句
$自定义联动类别字段名 = ( (empty($自定义联动类别字段名) || !is_numeric($自定义联动类别字段名)) ? 0 : $自定义联动类别字段名 );
再搜索 if(!empty($infotype)) $cArr['infotype'] = $infotype;
在下面添加
if(!empty($自定义联动类别字段名)) $cArr['自定义联动类别字段名'] = $自定义联动类别字段名;
找到 include\arc.sglistview.class.php 文件
搜索 if(!empty($this->searchArr['keyword'])) 在上面添加
//自定义联动类别
if(!empty($this->searchArr['自定义联动类别字段名']))
{
if($this->searchArr['自定义联动类别字段名'] % 500 ==0 )
{
$naddQuery .= " And arc.自定义联动类别字段名 >= '{$this->searchArr['自定义联动类别字段名']}' And arc.自定义联动类别字段名 < '".($this->searchArr['自定义联动类别字段名']+500)."'";
}
else
{
$naddQuery .= "And arc.自定义联动类别字段名 = '{$this->searchArr['自定义联动类别字段名']}'";
}
}
源码调用
[field:linkeall自定义联动类别字段名/] [field:自定义联动类别字段名 /]
本文章网址:http://www.ppssdd.com/code/4941.html。转载请保留出处,谢谢合作!DedeCMS 新建模型自定义联动类别调用及修改方法
总结
以上是小编为你收集整理的DedeCMS 新建模型自定义联动类别调用及修改方法全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
Dedecms相关文章
- • 织梦系统 dedecms pagelist标签使用修改
- • 织梦网站怎么搬家?dede系统网站迁移数
- • 织梦网站安全设置方法 dede系统网站如何
- • 织梦自动生成网站地图sitemap代码 dede
- • dede织梦纯代码制作网站地图 dede网站地
- • 织梦dede自定义表单添加全选功能 dede自
- • dede cms如何定时主动推送文章 dede实现
- • 织梦dede发布文章实时api主动推送
- • 织梦dedecms当前位置标签代码的5种写法
- • 织梦DEDECMS文章、栏目页获取当前页面顶
DedeCms5.6自定义模型中的多个联动教程
之前看过好几个发布关于联动的应用教程帖,但是发现只适合一个联动项目,多个的话就不会联动了,自己按照分类信息里的联动改了一下成功了,现在写个教程给那些也想使用多个联动项目的朋友。(注:这个我只在自定义独立模型中测试过,其他的没有测试)我这里是五个联动项目,如果需要跟多或是少一点的话,可以根据我给的代码修改一下。
下面我们开始修改:
第一步:修改include aglibinfolink.lib.PHP文件
第一处:
require_once(DEDEROOT.''/data/enums/infotype.PHP'');
下面添加
require_once(DEDEROOT.''/data/enums/自定义联动类别字段名1.PHP'');
require_once(DEDEROOT.''/data/enums/自定义联动类别字段名2.PHP'');
require_once(DEDEROOT.''/data/enums/自定义联动类别字段名3.PHP'');
require_once(DEDEROOT.''/data/enums/自定义联动类别字段名4.PHP'');
require_once(DEDEROOT.''/data/enums/自定义联动类别字段名5.PHP'');
第二处:
function lib_infolink(&$ctag,&$refObj)
{
global $dsql,$nativeplace,$infotype,$自定义联动类别字段名1,$自定义联动类别字段名2,$自定义联动类别字段名3,$自定义联动类别字段名4,$自定义联动类别字段名5,$hasSetEnumJs,$cfg_cmspath,$cfg_mainsite;
global $em_nativeplaces,$em_infotypes,$em_自定义联动类别字段名1s,$em_自定义联动类别字段名2s,$em_自定义联动类别字段名3s,$em_自定义联动类别字段名4s,$em_自定义联动类别字段名5s;??//看清楚,这里后面的个S
第三处:
在
$fields = array(''nativeplace''=>'''',''infotype''=>'''',''typeid''=>$typeid,
''channelid''=>$channelid,''linkallplace''=>'''',''linkalltype''=>'''');
$fields[''nativeplace''] = $fields[''infotype''] = '''';
后面添加
$fields = array(''自定义联动类别字段名1''=>'''',''自定义联动类别字段名2’=>'''',''自定义联动类别字段名3''=>'''',''自定义联动类别字段名4''=>'''',''自定义联动类别字段名5''=>'''',''linkalltype''=>'''',''linkall自定义联动类别字段名1''=>'''',''linkall自定义联动类别字段名2‘=>'''',''linkall自定义联动类别字段名3''=>'''',''linkall自定义联动类别字段名4''=>'''',''linkall自定义联动类别字段名5''=>'''');
$fields[''自定义联动类别字段名1''] = $fields[''自定义联动类别字段名2''] = $fields[''自定义联动类别字段名3''] = $fields[''自定义联动类别字段名4''] = $fields[''自定义联动类别字段名5''] = '''';
第四处:
在
$fields[''linkalltype''] = <a href=''{$baseurl}plus/list.PHP?channelid={$channelid}&tid={$typeid}&nativeplace={$nativeplace}''>不限</a>;
后面添加
$fields[''linkall自定义联动类别字段名1''] = <a href=''{$baseurl}plus/list.PHP?channelid={$channelid}&tid={$typeid}&自定义联动类别字段名1={$eid}&自定义联动类别字段名2={$自定义联动类别字段名2}&自定义联动类别字段名3={$自定义联动类别字段名3}&自定义联动类别字段名4={$自定义联动类别字段名4}&自定义联动类别字段名5={$自定义联动类别字段名5}''>全部</a>;
(这里注意了,想要联动这个地方是关键之一,后面的联动字段一定都要有,如果你有增加联动那么这里一定要加全了)
第五处:
在
if(is_array($ctp->CTags))
上面添加
if(empty($自定义联动类别字段名1))
{
foreach($em_自定义联动类别字段名1s as $eid=>$em)
{
if($eid % 500 != 0) continue;
$fields[''自定义联动类别字段名1''] .= <a href=''{$baseurl}plus/list.PHP?channelid={$channelid}&tid={$typeid}&自定义联动类别字段名1={$eid}&自定义联动类别字段名2={$自定义联动类别字段名2}&自定义联动类别字段名3={$自定义联动类别字段名3}&自定义联动类别字段名4={$自定义联动类别字段名4}&自定义联动类别字段名5={$自定义联动类别字段名5}''>{$em}</a>;
}
}
else
{
foreach($em_自定义联动类别字段名1s as $eid=>$em)
{
if($eid % 500 != 0) continue;
if(isset($_GET[''自定义联动类别字段名1'']))
{
$navclass=$_GET[''自定义联动类别字段名1''];
if ($navclass==$eid)
{
$navstyle=color:#ff0000;font-weight:bold'';
}
$fields[''自定义联动类别字段名1''] .= <a href=''{$baseurl}plus/list.PHP?channelid={$channelid}&tid={$typeid}&自定义联动类别字段名1={$eid}&自定义联动类别字段名2={$自定义联动类别字段名2}&自定义联动类别字段名3={$自定义联动类别字段名3}&自定义联动类别字段名4={$自定义联动类别字段名4}&自定义联动类别字段名5={$自定义联动类别字段名5}''.$navclass.>{$em}</a>;
}
}
}
(这里也多联动的关键之一,由于东西太多,我只列出一个,其他的自己添加一下,注意的是在链接也就是a href里面自定义联动类别字段名一定要加全了)
第二步:修改pluslist.PHP 文件
第一处:
$infotype = ( (empty($infotype) || !is_numeric($infotype)) ? 0 : $infotype );
下面加上
$自定义联动类别字段名1 = ( (empty($自定义联动类别字段名1) || !is_numeric($自定义联动类别字段名1)) ? 0 : $自定义联动类别字段名1 );(多个就复制改名即可)
第二处:
在
if(!empty($infotype)) $cArr[''infotype''] = $infotype;
下面加上
if(!empty($自定义联动类别字段名1)) $cArr[''自定义联动类别字段名1''] = $自定义联动类别字段名1;(多个就复制改名即可)
第三步:修改includearc.sglistview.class.PHP 文件
在
if(!empty($this->searchArr[''infotype'']))
{
if($this->searchArr[''infotype''] % 500 ==0 )
{
$naddQuery .= And arc.infotype >= ''{$this->searchArr[''infotype'']}'' And arc.infotype < ''.($this->searchArr[''infotype'']+500).'';
}
else
{
$naddQuery .= And arc.infotype = ''{$this->searchArr[''infotype'']}'';
}
}
下面加上
if(!empty($this->searchArr[''jztype'']))
{
if($this->searchArr[''jztype''] % 500 ==0 )
{
$naddQuery .= And arc.jztype >= ''{$this->searchArr[''jztype'']}'' And arc.jztype < ''.($this->searchArr[''jztype'']+500).'';
}
else
{
$naddQuery .= And arc.jztype = ''{$this->searchArr[''jztype'']}'';
}
}
(多个就复制改名即可)
第四步:修改include aglibinfolink.lib.PHP文件(这个只针对需要二级联动改一级的人用的,如果不需要这么做的跳过)
这里都注掉
/*
$sontype = ( ($househx % 500 != 0) ? $househx : 0 );
$toptype = ( ($househx % 500 == 0) ? $househx : ( $househx-($membertype%500) ) );
$fields[''househx''] = <a href=''{$baseurl}plus/list.PHP?channelid={$channelid}&tid={$typeid}&househx={$toptype}&nativeplace={$nativeplace}''><b>{$em_househxs[$toptype]}</b></a> ;
下级显示不显示
foreach($em_househxs as $eid=>$em)
{
if($eid < $toptype+1 || $eid > $toptype+499) continue;
if($eid == $househx) {
$fields[''househx''] .= <b>{$em}</b>;
}
else {
$fields[''househx''] .= <a href=''{$baseurl}plus/list.PHP?channelid={$channelid}&tid={$typeid}&househx={$eid}&nativeplace={$nativeplace}''>{$em}</a>;
}
}
*/
换成
foreach($em_househxs as $eid=>$em)
{
if($eid % 500 != 0) continue;
if(isset($_GET[''househx'']))
{
$navclass=$_GET[''househx''];
if ($navclass==$eid)
{
$navstyle=color:#ff0000'';
}
$fields[''househx''] .= <a href=''{$baseurl}plus/list.PHP?channelid={$channelid}&tid={$typeid}&househx={$eid}&nativeplace={$nativeplace}''.$navclass.>{$em}</a>;
}
}
第五步:模板调用
[field:linkeall自定义联动类别字段名1/] [field:自定义联动类别字段名1 /] (多个就复制改名即可)
切记前后一定要加上{dede:infolink}和{/dede:infolink}要不然是调用不出来的。
下载修改过的文件:dedezdymx_veryhuo.com.rar
总结
以上是小编为你收集整理的DedeCms5.6自定义模型中的多个联动教程全部内容。
如果觉得小编网站内容还不错,欢迎将小编网站推荐给好友。
dedecms5.7 联动类型无法显示
dedecms5.7 联动类型无法显示
问题原因:一般是由于路径问题( 路径缺少分隔符''/'' )导致js无法正常加载
如果遇到该类问题,尝试通过firebug工具检查js是否被正确加载。
如果是路径问题,请找到 include/customfields.func.php 文件
找如下代码(有多处代码):
$cmspath = ( (empty($cfg_cmspath) || !preg_match(''/[/$]/'', $cfg_cmspath)) ? $cfg_cmspath.''/'' : $cfg_cmspath );
在其下面加上:
if(substr($cmspath,-1,1) != ''/'') $cmspath .= ''/'';这一行代码就好了。
或直接改成
$cmspath = ( (empty($cfg_cmspath) || !preg_match(''/[\/]$/'', $cfg_cmspath)) ? $cfg_cmspath.''/'' : $cfg_cmspath );就好了,发现这正则表问题,修改下就好了
关于dede独立模型中的联动类型字段是怎么在新闻页面中显示枚举名的的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于DedeCMS 新建模型自定义联动类别调用及修改办法、DedeCMS 新建模型自定义联动类别调用及修改方法、DedeCms5.6自定义模型中的多个联动教程、dedecms5.7 联动类型无法显示的相关知识,请在本站寻找。
本文标签: