织梦模型字段的调用分析

首先要搞明白,什么是模型字段,就是我们在后台内容模型管理更改内容模型,这个里面添加的字段,以软件模型为例子,如下图所示。 在前台调用这个些字段,非常容易,例如,在内容页调用只需要用标签{dede:field.filetype/}这样就可以了,如果在首页调用,只需
  首先要搞明白,什么是模型字段,就是我们在后台——>内容模型管理——>更改内容模型,这个里面添加的字段,以软件模型为例子,如下图所示。

织梦添加字段

  在前台调用这个些字段,非常容易,例如,在内容页调用只需要用标签{dede:field.filetype/}这样就可以了,如果在首页调用,只需要用这个标签{dede:arclist addfields="filetype" channelid=3 typeid=''}{/dede:arclist}调

用,就可以了,这还有什么好说的,但是今天我要说的是不是简单的这些调用。

  例如织梦基地网站的筛选功能,如下图所示。



  如果用类似上面的标签,来自动调用出我们后台添加的字段,来实现这个功能是调用不出来的,目前,织梦只能调用站长添加的字段的值,没有现成的标签来做同上面的功能来,这就用到了织梦的模板引擎里面的标签了。

  若想调用出,并带上连接,那么,就要从这个内容模板里面的字段配置里面调用出来,然后,再在“文档列表类”里面进行修改,这样就实现了织梦基地上面的功能了,也许会有人问这个功能是不是也是用一个标签来实现的,是的,只不过是自定义标签,自己写的。

  去修改“文档列表类”不是本篇重点,要写个这个需要你php知道,也不是多么难,本篇主要介绍,上一部分,如果把这些字段,取出来,然后,再与文档列表类进行整合,实际上这二个部分,功能互相不干涉,一个是实现筛选,一个是调出我们自己定义标签。

  如何调用出呢?我们只需要知道这些字段存储在哪里,实际上这里面的字段,肯定在模型里面,我们从如何添加字段,就可以看出,是进入到内容模型管理,才可以添加字段,那么,我们找到对应的数据库表#@_channeltype,里面字段fieldset 对应的值就是我们后台添加的字段,以及每个字段的相关信息,例如字段的类型,字段的itemname属性等。

  这些字段,只是在这个模型表dede_channeltype里面以上面的这种字段串的形容存在,这些字段,以真正的字段存在是在对应的附加表里面,例如软件的附加表dede_addonsoft打开这个表,你会发现,我们后台添加的字段,就是这个附加表里面的字段。从这里我们就知道,当我们添加字段时,字段会以字符串形式,把存储在模型表dede_channeltype里面的字段fieldset里面,同时,把对应的字段,以真正的字段存储在对应的附加表dede_addonsoft里面。

  通过上面的分析我们知道了,如果调用出筛选的那些字段值,只需要,从模型表调用来,然后,通过织梦模板引擎把fieldset值进行foreach就可以循环出来,分析到这里,那就容易了。

  这里要分前台调用和后台调用二种:前台就是织梦基地的筛选功能,而后台例如软件添加后,生成静态网页时用到的调用分析。这二种调用实际上是一样的,都是通过静态模板引擎dedetag.class.php来实现的。具体实现代码,我总结了一下,以下代码,只是步骤,为了演示方便,有些代码我已经删掉。

  1.从数据库表#@_channeltype里面查询出字段fieldset的值。

  2.引入静态模板引擎文件dedetag.class.php实例化对象,载入模板字段串(也就是fieldset值,因为,他是字段串形式存在于数据库表#@_channeltype里面的),把里面的标记,例如,fieldtype,标记的名称循环出来。代码如下。

      $dtp = new DedeTagParse();
    $dtp->SetNameSpace('field','<','>');
    $dtp->LoadSource($fieldset);
    $dede_addonfields = '';
    if(is_array($dtp->CTags))
    {
        foreach($dtp->CTags as $tid=>$ctag)
        {
            if($loadtype!='autofield'
            || ($loadtype=='autofield' && $ctag->GetAtt('autofield')==1) )
            {
                $dede_addonfields .= ( $dede_addonfields=="" ? $ctag->GetName().",".$ctag->GetAtt('type') : ";".$ctag->GetName().",".$ctag->GetAtt('type') );
                echo  GetFormItemA($ctag);
            }
        }
    }

  如果大家想研究的话,请去研究一下软件发布的功能,那个软件发布功能就是一个非常好的例子。如果把这个功能研究透彻了,那么,不管你调用附加表内容都非常容易了。

  以上分析的都是织梦二次开发需要,搞明白的,如果你做二次开发完,就是一个普通站长只学学标签调用即可,如果你想做一名织梦二次开发人员,那么,上面的内容必须精通,研究这个需要相当的php基地知识,所以,在大家研究这个功能前,要先学习一个php的基本知识。
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

dedecms织梦无需登录注册可下单购买的修改,首先找到/plus/carbuaction.php文件,找到如下代码: //确认用户登录信息if($cfg_ml-IsLogin()){ $userid = $cfg_ml-M_ID;}else{ $username = trim($username); $password = trim($password); if(empty($username)
用过织梦dedecms的人都知道,织梦会员系统相当强大,跟论坛程序差不多,对于使用会员系统的人来说,织梦系统足够用的了,但是,有时候,织梦系统很多的地方又不是我们所希望,或都说,有的地方不适合我们使用,这时候就要对织梦会员系统进行二次开发,所以,
我们在用到织梦dedecms的会员功能时候,注册页面的注册项需要增加,比如想多加一个手机号的字段,需要怎么操作呢?下面我们以增加一个手机号的字段为例子 1、找到网站目录下的/member/templets/reg-new.htm,在合适位置增加一行表单,代码如下: lispan手机
我们在做 织梦模板 开发时,有时需要在artlist 和list标签中调用出图集中的图片,同时可以自定调用几张图片。跟版网整理了个一个这样功能的自定义函数。调用后效果如下: dedecms织梦artlist和list标签调用图集图片实现方法 函数代码 请将代码加入到 /includ
大家都知道,Discuz程序在发文章时有个【隐藏】功能,可以限制这个隐藏内容供某些级别的会员查看。 在织梦模板中,做些改动,也是可以实现的。例如:电话号码,下载地址等等。 前提是织梦开启会员功能,已经有了自定义字段。 一、建立文件 ajax_loginsta_c.p
大家在使用织梦的时候,用到会员中心可能涉及到多二级域名同步登录退出的问题,涉及到跨域,那么这个问题该如何解决呢?在一个技术大牛博客看到过此教程,特此转发分享给大家,解决大家问题。 首先打开 \include\dedeajax2.js 找到 DedeXHTTP = new XMLHttpR