织梦前端arclistsg联动模型的数字值转换成文字值

研究了下有点复杂!

后来无奈就自己写个函数来解决了!

比如我要显示,那么就,

image.png

我的是自己加的联动模型shiping

 [field:nativeplace function='Getenums(@me,'nativeplace')'/]
  • @me是数字

  • nativeplace是缓存的组名

在include/extend.class.php文件尾部加入函数

image.png

/*
查询联动模型的值
$evalue:数字
$egroup:模型的缓存组名
原理其实是织梦的联动模型都缓存在/data/enums/*s.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 = str_replace(".00",".",$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];
}
}
}


如果要系统的修改的话,我们可以在列表list标签发现是编译了的

文件在

arc.sglistview.class.php   arc.listview.class.php 两个文件中,我们可以看见

//编译附加表里的数据
                    foreach($row as $k=>$v) $row[strtolower($k)] = $v;

                    foreach($this->ChannelUnit->ChannelFields as $k=>$arr)
                    {
                         if(isset($row[$k]))
                         {
                              $row[$k] = $this->ChannelUnit->MakeField($k,$row[$k]);
                         }
                    }

他执行的是$this->ChannelUnit->MakeField($k,$row[$k]);

\include\channelunit.class.php中的这个函数function MakeField($fname, $fvalue, $addvalue='')

然后在/include/taglib/channel/stepselect.lib.php

文件中来执行二级联动模型的值!

太复杂了!引入太多,我就没弄了, 如果没太大必要还是选择我上面的那个方法吧!

相关内容

发表评论

验证码:
点击我更换图片

最新评论