之前,我們像掉進(jìn)沼澤一樣,看到無盡的變量,數(shù)組元素,莫名其面的東西擺在我們面前。今天,我們繼續(xù)艱難前行,想辦法走出partview類的泥潭。
上一篇,我們胡亂分析了partview類,完全搞不懂干什么的,里面弄了一堆變量,最清晰的我們只是知道幾個生成首頁的關(guān)鍵地方調(diào)用了 DedeTagParse類的LoadTemplet方法和SaveTo方法。而在partview類定義的文件頭部,包含了幾個文件,我們就避開 partview,先來看看這幾個包含的文件吧。
1 require_once(DEDEINC.'/channelunit.class.php');
2 require_once(DEDEINC.'/typelink.class.php');
3 require_once(DEDEINC.'/ftp.class.php');
ftp.class.php,不用說,就是ftp相關(guān)操作類吧,我們之前看partview代碼的時候,了解到,在生成靜態(tài)文件的時候,使用了 ftp相關(guān)方法,貌似就是可以遠(yuǎn)程寫文件滴。至于怎么操作FTP的,其實就是封裝了php函數(shù)庫中ftp開頭的相關(guān)函數(shù)而已,代碼很簡單,不說了。
typelink.class.php,我們也在partview代碼里面見過的,打開看看吧。大概看了一下代碼,里面是type的鏈接相關(guān)的東西,每個方法都聲稱一個指定type的鏈接html字符串。
其實,我有點隱約感覺到在dedecms中,type就是指欄目,不知道是不是這樣。
再來看看channelunit.class.php吧。
里面是ChannelUnit類的定義,而且我們發(fā)現(xiàn),這個ChannelUnit類沒有被使用過。所以先不去看他。我們注意到,這里面還加載了兩個文件:
1 require_once(DEDEINC."/dedetag.class.php");
2 require_once(DEDEINC."/channelunit.func.php");
dedetag.class.php,打開看看,嗯,很復(fù)雜,但我們發(fā)現(xiàn)用于解析模板和生成文件的DedeTagParse類在里面,呵呵,先記住,以后慢慢研究。
channelunit.func.php里面都什么函數(shù)呢?打開一看,嗯,一堆變量,幾個獲取這種信息的函數(shù),在我們?yōu)g覽過程中,發(fā)現(xiàn)了兩個函數(shù):MfTemplet和MakeOneTag
注意:
新版本的dedecms這兩個函數(shù)已經(jīng)換到channelunit.helper.php里面了!
我們知道,在index.php中就用了MfTemplet函數(shù),回頭打開index.php看看怎么調(diào)用的:
$row['templet'] = MfTemplet($row['templet']);
我們之前了解過,$row['templet']保存的是default/index.htm這個值,就是模板文件路徑。接下來我們看看MfTemplet函數(shù)都做了什么吧。
//模板目錄規(guī)則
- function MfTemplet($tmpdir)
- {
- $tmpdir = str_replace("{style}",$GLOBALS['cfg_df_style'],$tmpdir);
- $tmpdir = ereg_replace("/{1,}","/",$tmpdir);
- return $tmpdir;
- }
注釋里面寫的是“模板目錄規(guī)則”,再看看代碼,哦,仿佛明白了一點兒了,就是替換模板路徑里面的{style}為全局變量$GLOBALS['cfg_df_style']中的值。應(yīng)該跟使用不同模板套系有關(guān)吧。意義不是很大就不再繼續(xù)研究了。
我們看另一個函數(shù)MakeOneTag,這個在partview類的ParseTemplet方法中,此方法看名字就是解析模板,而方法的大部分代 碼都是在處理變量,看不大懂干什么的,最后一句調(diào)用了MakeOneTag函數(shù)。貌似主要解析模板就是靠這個函數(shù)了。使用如下:
MakeOneTag($this->dtp,$this);
第一個參數(shù)是DedeTagParse類的實例,第二個參數(shù)就是partview類實例的句柄啦。
我們看看channelunit.func.php中這個函數(shù)是干什么的吧。
嗯,只能大概看,因為好多東西,我們都不清楚啊,郁悶了。
這里面遍歷了/include/taglib/下所有有l(wèi)ib后綴的文件,并把文件路徑加入數(shù)組,然后對DedeTagParse類的CTag進(jìn)行了遍歷
- if(in_array($tagname,$alltags))
- {
- $filename = DEDEINC.'/taglib/'.$tagname.'.lib.php';
- include_once($filename);
- $funcname = 'lib_'.$tagname;
- $dtp->Assign($tagid,$funcname($ctag,$refObj));
- }
由于我們沒有研究DedeTagParse類,所以這塊暫時不懂呢,不過也算小有進(jìn)展了。看來還得回到partview里面去重新看看了。
構(gòu)造函數(shù)沒什么特別的,就是創(chuàng)建了DedeTagParse類實例,進(jìn)行了一些設(shè)置而已。我們知道index.php創(chuàng)建partview實例后執(zhí)行了SetTemplet方法,我們再看看SetTemplet方法吧。
這里面調(diào)用了DedeTagParse類實例的LoadTemplet方法,看來我們就得從這里入手,去抽絲剝繭啦。
分析不下去了~
留幾個疑問下次再說。
1)DedeTagParse類LoadTemplet方法說開去。
2)MakeOneTag到底在搞什么。
看來只有徹底先把DedeTagParse類LoadTemplet方法搞懂才能進(jìn)一步啊,目前還是一頭霧水。
新聞熱點
疑難解答
圖片精選