织梦栏目连接构造函数__construct($typeid)详解教程
这个构造函数与文档类构造函数相比,就简单多了,这个函数的功能是把数据库栏目表#@__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里面了,对应的后台模板如下图所示。
上面的代码就是把{typedir}符号去掉。
如果我们实例化栏目类的话,打印的如下所示:
[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语句的信息。