服务报价 | 域名主机 | 网络营销 | 软件工具| [加入收藏]
 热线电话: #
当前位置: 主页 > php教程 > dedecms教程 >

织梦dedecms模型字段的调用分析

时间:2016-10-13 22:04来源:未知 作者:最模板编辑 点击:
织梦dedecms模型字段的调用分析 ,首先要搞明白,什么是模型字段,就是我们在后台内容模型管理更改内容模型,这个里面添加的字段,以软件模型为例子,如下图所示。 在前台调用这个
织梦dedecms模型字段的调用分析 ,首先要搞明白,什么是模型字段,就是我们在后台——>内容模型管理——>更改内容模型,这个里面添加的字段,以软件模型为例子,如下图所示。

织梦dedecms模型字段的调用分析

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

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

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

织梦dedecms模型字段的调用分析

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

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

  去修改“文档列表类”不是本篇重点,要写个这个需要你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);
            }
        }
    }

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

  以上分析的都是织梦dedecms二次开发需要,搞明白的,如果你做二次开发完,就是一个普通站长只学学标签调用即可,如果你想做一名织梦二次开发人员,那么,上面的内容必须精通,研究这个需要相当的php基地知识,所以,在大家研究这个功能前,要先学习一个php的基本知识。(责任编辑:最模板)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------