织梦栏目连接构造函数__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语句的信息。
