dedecms代碼研究(4)

 

partview php文件

之前,我們像掉進沼澤一樣,看到無盡的變量,數組元素,莫名其面的東西擺在我們面前。今天,我們繼續艱難前行,想辦法走出partview類的泥潭。

 

上一篇,我們胡亂分析了partview類,完全搞不懂幹什麼的,裏面弄了一堆變量,最清晰的我們只是知道幾個生成首頁的關鍵地方調用了DedeTagParse類的LoadTemplet方法和SaveTo方法。而在partview類定義的文件頭部,包含了幾個文件,我們就避開partview,先來看看這幾個包含的文件吧。

 

require_once(DEDEINC.'/channelunit.class.php');

require_once(DEDEINC.'/typelink.class.php');

require_once(DEDEINC.'/ftp.class.php');

 

ftp.class.php,不用說,就是ftp相關操作類吧,我們之前看partview代碼的時候,瞭解到,在生成靜態文件的時候,使用了ftp相關方法,貌似就是可以遠程寫文件滴。至於怎麼操作FTP的,其實就是封裝了php函數庫中ftp開頭的相關函數而已,代碼很簡單,不說了。

 

typelink.class.php,我們也在partview代碼裏面見過的,打開看看吧。大概看了一下代碼,裏面是type的鏈接相關的東西,每個方法都聲稱一個指定type的鏈接html字符串。

 

其實,我有點隱約感覺到在dedecms中,type就是指欄目,不知道是不是這樣。

 

再來看看channelunit.class.php吧。

裏面是ChannelUnit類的定義,而且我們發現,這個ChannelUnit類沒有被使用過。所以先不去看他。我們注意到,這裏面還加載了兩個文件:

require_once(DEDEINC."/dedetag.class.php");

require_once(DEDEINC."/channelunit.func.php");

 

dedetag.class.php,打開看看,嗯,很複雜,但我們發現用於解析模板和生成文件的DedeTagParse類在裏面,呵呵,先記住,以後慢慢研究。

 

channelunit.func.php裏面都什麼函數呢?打開一看,嗯,一堆變量,幾個獲取這種信息的函數,在我們瀏覽過程中,發現了兩個函數:MfTemplet和MakeOneTag

 

我們知道,在index.php中就用了MfTemplet函數,回頭打開index.php看看怎麼調用的:

$row['templet'] = MfTemplet($row['templet']);

我們之前瞭解過,$row['templet']保存的是default/index.htm這個值,就是模板文件路徑。接下來我們看看MfTemplet函數都做了什麼吧。

//模板目錄規則

function MfTemplet($tmpdir)

{

 $tmpdir = str_replace("{style}",$GLOBALS['cfg_df_style'],$tmpdir);

 $tmpdir = ereg_replace("/{1,}","/",$tmpdir);

 return $tmpdir;

}

 

註釋裏面寫的是“模板目錄規則”,再看看代碼,哦,彷彿明白了一點兒了,就是替換模板路徑裏面的{style}爲全局變量$GLOBALS['cfg_df_style']中的值。應該跟使用不同模板套繫有關吧。意義不是很大就不再繼續研究了。

 

我們看另一個函數MakeOneTag,這個在partview類的ParseTemplet方法中,此方法看名字就是解析模板,而方法的大部分代碼都是在處理變量,看不大懂幹什麼的,最後一句調用了MakeOneTag函數。貌似主要解析模板就是靠這個函數了。使用如下:

MakeOneTag($this->dtp,$this);

第一個參數是DedeTagParse類的實力,第二個參數就是partview類實例的句柄啦。

 

我們看看channelunit.func.php中這個函數是幹什麼的吧。

嗯,只能大概看,因爲好多東西,我們都不清楚啊,鬱悶了。

這裏面遍歷了/include/taglib/下所有有lib後綴的文件,並把文件路徑加入數組,然後對DedeTagParse類的CTag進行了遍歷,由於我們沒有研究DedeTagParse類,所以這塊暫時不懂呢,不過也算小有進展了。看來還得回到partview裏面去重新看看了。

 

構造函數沒什麼特別的,就是創建了DedeTagParse類實例,進行了一些設置而已。我們知道index.php創建partview實例後執行了SetTemplet方法,我們再看看SetTemplet方法吧。

這裏面調用了DedeTagParse類實例的LoadTemplet方法,看來我們就得從這裏入手,去抽絲剝繭啦。

 

分析不下去了~

 

留幾個疑問下次再說。

1)DedeTagParse類LoadTemplet方法說開去。

2)MakeOneTag到底在搞什麼。

 

看來只有徹底先把DedeTagParse類LoadTemplet方法搞懂才能進一步啊,目前還是一頭霧水。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章