织梦栏目连接构造函数__construct($typeid)详解教程

admin2023-01-18864

这个构造函数与文档类构造函数相比,就简单多了,这个函数的功能是把数据库栏目表#@__arctype字段全部查询出来,并把模型表里面的附加表、模型名称和是否为系统字段查询出来,放入到$this->TypeInfos数组里面,其实这个构造函数就是这个功能。
代码分析:初始化信息里面$this->SplitSymbol = $GLOBALS['cfg_list_symbol'];指的是栏目连接符号“>”,如下图所示:
 
其实都比较简单了。
在下面里面有一个判断,当$typeid>0时,才执行sql查询代码,这种写法非常好,因为,我们的查询sql语句的条件就是当模型id等于实例化栏目连接类时,传过来的栏目id的值时,才执行下面的代码。这样可以提高代码的执行效率,如果不这样,拿过来就去调用数据库里面的函数$this->dsql->GetOne($query);来执行的话,那就相当于多执行了一次这个函数,但是,当执行到查询这个代码的sql语句时,结果发现$typeid<0,这时就白白浪费了资源,得到的结果虽然,一样,我们人是感觉不到的,但是,这样在大型网站里面有可能降低代码执行速度,所以,直接先判断这个sql里面的where条件里面的条件是不是大于零,若大于零再执行sql语句。
下面是二行代码是处理,从栏目表查询到的模板,代码如下所示:


当我们在后台建立栏目时,要选择使用的模板都保存到了栏目表字段tempindex,templist和temparcticle里面了,对应的后台模板如下图所示。

161441q8k85lk3f4aeoa0a.jpg

上面的代码就是把{typedir}符号去掉。

如果我们实例化栏目类的话,打印的如下所示:

161534at7uyw5du0odsysd.jpg

[TypeInfos] => Array
        (
            [id] => 2
            [reid] => 1
            [topid] => 1
            [sortrank] => 0
            [typename] => HTML
            [typedir] => {cmspath}/a/webbase/html
            [isdefault] => -1
            [defaultname] => index.html
            [issend] => 1
            [channeltype] => 1
            [maxpage] => -1
            [ispart] => 0
            [corank] => 0
            [tempindex] => default/index_article.htm
            [templist] => default/list_article.htm
            [temparticle] => default/article_article.htm
            [namerule] => {typedir}/{aid}.html
            [namerule2] => {typedir}/list_{tid}_{page}.html
            [modname] => default
            [description] =>
            [keywords] =>
            [seotitle] =>
            [moresite] => 0
            [sitepath] => {cmspath}/a/webbase
            [siteurl] =>
            [ishidden] => 0
            [cross] => 2
            [crossid] => 6
            [content] =>  
            [smalltypes] =>
            [ctypename] => 普通文章
            [addtable] => dede_addonarticle
            [issystem] => 1
        )

    [SplitSymbol] =>  >
    [valuePosition] =>
    [valuePositionName] =>
    [OptionArrayList] =>
)

从上面的打印结果你会发现,TypeInfos就是一个数组,里面包括了我们刚开始提到的栏目表所有字段,频道模型表里面的附加表字段、频道模型名称和是不是系统字段。

DedeSql Object这个对象里面就是执行sql语句的信息。


网友评论