• 全国400电话网上服务平台
    强大号码库资源任选,方便,快捷,快速开通。
    咨询热线:400-1100-266  

    织梦模型字段的调用分析
    POST TIME:2020-04-11 21:40
    首先要搞明白,什么是模型字段,就是我们在后台——>内容模型管理——>更改内容模型,这个里面添加的字段,以软件模型为例子,如下图所示。

    在前台调用这个些字段,非常容易,例如,在内容页调用只需要用标签{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的基本知识。
    
    关于我们 | 付款方式 | 建站知识 | 增值服务 | 网站模板
    Copyright © 2003-2016
    时间:9:00-21:00 (节假日不休)
    版权所有:巨人网络(扬州)科技有限公司
    总部地址:江苏省信息产业基地11号楼四层
    《增值电信业务经营许可证》 苏B2-20120278
    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信

    微信号已复制,请打开微信添加咨询详情!