最新公告
  • 欢迎访问代码工坊,购买产品可享受在线工单服务!
  • 帝国CMS输出模型添加的字段信息(如结合项)

      开发的时候我们经常需要把增加带有默认值的字段中的值调用出来的情况。后台修改,前台就得手动修改,非常不方便。用以下函数即可解决此问题。

      在Userfun.php中增加以下函数代码:

    <?php
    //返回字段信息函数
    //函数说明:f是字段名 tid是数据表ID tpl是模版
    function ReturnF($f, $tid, $tpl = '<a href="{zhi}">{f}</a>') {
        global $empire, $dbtbpre;
        $f = RepPostVar($f);
        $tid = (int)$tid;
        if (!$f || !$tid) {
            return FALSE;
        }
        $sql = $empire->fetch1("select fvalue from {$dbtbpre}enewsf where f='$f' and tid=$tid limit 1");
        $arr = explode('|', $sql[fvalue]);
        foreach ($arr as $val) {
            $val = explode('==', $val); //值==名称时候用的
            $val[1] = $val[1] ? $val[1] : $val[0];
            $r.= str_replace(array('{zhi}', '{f}'), $val, $tpl); //替换模版变量
            
        }
        return str_replace(':default', '', $r);
    }

      简要说明:

      f是要查询的字段名 tid是数据表ID(帝国后台数据表管理可查看) tpl是前台输出使用的模版

      Tpl说明:

      比如字段默认值中 0==中国

      {f} {zhi}为0,{f}为中国,以此类推。

      前台使用:

    <?=ReturnF('字段名',数据表ID,模板代码)?>

      简单例子说明:

      比如我在数据表ID1中有一个字段叫sort,里面的默认值为苹果,橘子,核桃

      前台模板中:{f}')?>

      输出之后的html代码为:

      苹果

      橘子

      核桃

      以下为不带模板使用(模板需要自定义):

    //返回字段信息函数
    //函数说明:f是字段名 tid是数据表ID
    function ReturnF($f, $tid) {
        global $empire, $dbtbpre;
        $f = RepPostVar($f);
        $tid = (int)$tid;
        if (!$f || !$tid) {
            return FALSE;
        }
        $sql = $empire->fetch1("select fvalue from {$dbtbpre}enewsf where f='{$f}' and tid=$tid limit 1");
        $arr = explode('|', $sql['fvalue']);
        foreach ($arr as $val) {
            $val = explode('==', $val); //值==名称时候用的
            $val[1] = $val[1] ? $val[1] : $val[0];
            $r[$val[0]] = str_replace(':default', '', $val[1]);
        }
        return $r;
    }

      另一个例子:

      比如一个字段初始值是 值==名称形式,而这个字段以后还会增加更多值==名称,在好多地方都用这个字段的名称。比如灵动或自己写的while循环,不可能以后加了值==名称所有调用地方都去逐一更改。那么就可以用此办法。

    $typeall=returnf('type', 28,'|{zhi}{f}{zhi}|');

      循环里面:

    preg_match('/|'.$r[type].'(.*?)'.$r[type].'|/', $typeall,$a);
    $type=$a[1];

      循环里需要输出的地方写$type就可以了

      喜欢用数组的可以参考下面例子:

    $all=returnf('type', 28,'|{zhi}{f}{zhi}|');
    preg_match_all('/|([0-9+])(.*?)([0-9+])|/', $all, $b);
    $num=count($b[1]);
    for($i=-1;$i<$num;$i++){
    $typearr[$b[1][$i]]=$b[2][$i];
    }
    print_r($typearr);

    发表评论