织梦文档列表类构造函数__construct($typeid, $uppage=1)详解
这个文档列表构造函数比会员列表视图类构造函数复杂很多,但是,比文档类构造函数要稍微简单,不过在所有类中也是相当复杂的构造函数了,不过再怎么复杂,咱们只要知道它是做什么的,就不怕它复杂,研究代码就是这样,就像破案似的,只要抓住一个线索顺藤摸瓜,就把案件理清楚,只要理清楚了,理解起来就非常容易了。
织梦基础做教程绝不会只为了分析代码而分析,既然,我们要研究织梦系统,就要弄明白它的来龙去脉,既知其然,更要知其所以然,织梦基地不会像网上的教程那样,只告诉你如何做,但是,极少的教程告诉你为什么这样做?
如果解决问题的话,这样可以,但是,对于研究织梦系统的朋友来说,这个跟没有说差不多,这也是织梦基地建立这个站的一个很大原因。当然,由于一个一个的函数毕竟是独立的东西,所以,有时候必须结合实例才能知道为什么这样,这个织梦基地以后,会做很多实例,只有多用几次,才能真正掌握。
代码分析开始:
这个构造函数有二个参数,一个是栏目id,一个是上一页,因为,这个类就是一个文档分页的,肯定要用到分页,所以,这里有这么一个上一页参数。
下面的代码:
这一大段就是初始化,比较简单,要提的是这里的数据库对象用的是一个取地址,这个比较少用一般直接都把对象赋值:
$this->dsql = &$dsql;
然后,下面就是实例化静态模板引擎,二次实例化,注意区别:二次设置的命名空间不一样。然后,实例化一个栏目连接类,看到这里就知道这个构造函数有多复杂,所以,我们平常写构造函数可以参考织梦系统的构造函数,只要把织梦系统的这样复杂的构造函数都能弄明白了,那么,其它简单的构造函数还不是非常简单。
这里面的这段代码:
if(!is_array($this->TypeLink->TypeInfos)) { $this->IsError = true; }
非常重要,这个就是上面实例化栏目类的原因,因为,分页是在栏目列表进行的,如果连这个栏目都不存在的话,还谈什么分页,皮之不存,毛将焉附?这就是为什么这里要判断一下这个栏目是不是存在,如何判断呢,很简单,这个其实又用到了栏目连接构造函数了,只要判断一下构造函数生成的$this->TypeLink->TypeInfos是不是一个数组即可。
若$this->IsError=flase 则,说明这个栏目存在,栏目存在就可以处理这个分页了。从这里也可以看出这个文档列表类构造函数就是处理栏目的分页的,这个从下面的代码就可以知道。
实例化频道模型类,这个类的参数是通过栏目对象获得的:
参数$this->TypeLink->TypeInfos['channeltype']
下面就是组装本构造函数的目标数组$this->fields。
把栏目所有的字段赋给$this->Fields :
$this->Fields = $this->TypeLink->TypeInfos;
把栏目id,当前位置,标题写入数组$this->Fields里面。
设置一些全局参数的值:
把数组$GLOBALS['PubFields']里面的值,写到数组$this->Fields 里面,然后,设置全局环境变量。
下面一大段是获得交叉栏目id,这段代码我们在教程“织梦获得指定类目的URL链接函数GetTypeUrl()”里面已经详细分析了交叉栏目id,这里就不用多解释了,如果不会请,参考这个教程。
总结:其实,这个文档分类构造函数主要就是为了获得$this->Fields数组,打印一下这个数组,得到如下内容:
[Fields] => Array ( [id] => 1 [reid] => 0 [topid] => 0 [sortrank] => 0 [typename] => 网页基础 [typedir] => {cmspath}/a/webbase [isdefault] => 1 [defaultname] => index.html [issend] => 1 [channeltype] => 1 [maxpage] => -1 [ispart] => 1 [corank] => 0 [tempindex] => default/index_article.htm [templist] => default/list_article.htm [temparticle] => default/article_article.htm [namerule] => {typedir}/{Y}/{M}{D}/{aid}.html [namerule2] => {typedir}/list_{tid}_{page}.html [modname] => default [description] => [keywords] => [seotitle] => [moresite] => 0 [sitepath] => [siteurl] => [ishidden] => 0 [cross] => 0 [crossid] => [content] => [smalltypes] => [ctypename] => 网页基础 [addtable] => dede_addonarticle [issystem] => 1 [position] => 主页 > 网页基础 > [title] => 网页基础 [phpurl] => /plus [indexurl] => / [templeturl] => /templets [memberurl] => /member [specurl] => /special [indexname] => 主页 [templetdef] => /templets/default [rsslink] => /data/rss/1.xml [typeid] => 1 )