婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 網(wǎng)站建設(shè) > 建站知識 > 織夢添加文章生成靜態(tài)網(wǎng)頁概述

織夢添加文章生成靜態(tài)網(wǎng)頁概述

POST TIME:2020-04-11 21:40

當(dāng)我們在后臺添加文章或其它文檔時(shí),點(diǎn)擊“保存”后,根據(jù)前臺模板(在templets/default里面的模板)生成了靜態(tài)網(wǎng)頁。今天就簡述一下織夢系統(tǒng),實(shí)現(xiàn)這一過程一的大體步驟,因?yàn)椋瑺可娴奈募啵雀攀鲆幌拢院螅瑫?huì)對每個(gè)功能進(jìn)行分析學(xué)習(xí)。

本教程以文章模型為例子,以下是文章型的相關(guān)信息:

模型id 是 1;

模型對應(yīng)的模板:封面模板index_arcticle.htm,列表頁模板list_arcticle.htm,內(nèi)容頁模板arcticle_arcticle.htm

使用的模板引擎是:dedetag.class.php

后臺添加文章的模板文件是:article_add.htm,對應(yīng)的處理文件是article_add.php。

分析開始。

當(dāng)在后臺添加數(shù)據(jù),點(diǎn)擊“保存”后,程序會(huì)把我們填寫的,例如標(biāo)題,標(biāo)簽,作者,來源,文章內(nèi)容等數(shù)據(jù)一同傳給article_add.php文件,這個(gè)文件除了接收這些數(shù)據(jù),還接收到了這篇即將要生成的靜態(tài)網(wǎng)頁的欄目id和模型id。其它的數(shù)據(jù)我們就不多說,這二個(gè)id,最重要的,這二項(xiàng)是從哪里來的,實(shí)際是當(dāng)我們打開后臺對應(yīng)的欄目,這二個(gè)id就已經(jīng)從對應(yīng)的數(shù)據(jù)庫表中查詢出來了。

然后,通過這二個(gè)id,生成這篇文章的id,即織夢的叫法是文檔id。

生成文檔id函數(shù):$arcID = GetIndexKey($arcrank,$typeid,$sortrank,$channelid,$senddate,$adminid);從這個(gè)函數(shù)的參數(shù)我們就看出,包括了上面提到的欄目id和頻道模型id。生成的這個(gè)文檔id,非常重要,因?yàn)橄旅嬗糜谏蒱tml網(wǎng)頁的函數(shù),就以這個(gè)文檔id為參數(shù)。
這個(gè)函數(shù)在文件include/helpers/archive.helper.php里面大約150行。

生成html函數(shù):$artUrl = MakeArt($arcID,true,true,$isremote);請看里面的參數(shù)$arcID正是上面生成的文檔id,這一點(diǎn)要清楚。
這個(gè)函數(shù)在文件dede/inc/inc_archives_functions.php里面大約394行。

函數(shù)MakeArt()是我們今天分析的對象,找到這個(gè)文件,我們發(fā)現(xiàn)它引入了文檔類arc.archives.class.php,然后,實(shí)例化一個(gè)對象,并把$aid作為參數(shù),注意,這個(gè)參數(shù)就是上面提到的生成的$arcID,代碼如下:$arc = newArchives($aid);雖然,就這么一句話,但是對象$arc確做了很多事,這全是因?yàn)闃?gòu)造函數(shù)的原因,當(dāng)實(shí)例時(shí),啟動(dòng)了這個(gè)構(gòu)造函數(shù)。

打開文件arc.archives.class.php文件,我們看到構(gòu)造函數(shù)首頁根據(jù)傳過來的id,從數(shù)據(jù)庫微表中查詢出模型id和欄目id,這個(gè)欄目id和模型id跟上面提到的欄目id和模型id是一樣的,為什么呢?因?yàn)椋@個(gè)文檔id正是根據(jù)這個(gè)二個(gè)id生成的,只不過存儲在了這個(gè)微表#@_arctiny里面吧了。

接下來,在這個(gè)構(gòu)造函數(shù)里面又實(shí)例化了一個(gè)對象$this->ChannelUnit,代碼是$this->ChannelUnit = new ChannelUnit($arr['channel'], $aid);在實(shí)例化時(shí),這二個(gè)參數(shù)一個(gè)是是剛才從微表查詢出來的模型id,一個(gè)是文檔id,我們再打開頻道模型單元類文件channelunit.class.php,里面又一個(gè)構(gòu)造函數(shù),我們再在這個(gè)函數(shù)里分析,請注意,現(xiàn)在我們已經(jīng)到了channelunit.class.php這里面了。

這里面的構(gòu)造函數(shù)通過模型id,查詢數(shù)據(jù)庫表#@_channeltype里面的所有字段,然后,又實(shí)例化了一個(gè)對象,代碼是$dtp = new DedeTagParse();我們再打開這個(gè)類對應(yīng)的靜態(tài)模板引擎文件dedetag.class.php文件。這里面又一個(gè)構(gòu)造函數(shù),幸運(yùn)的是這個(gè)構(gòu)造函數(shù)里面沒有再引入其它類文件了。

返回channelunit.class.php里面接著看代碼,實(shí)例化對象$dtp后,設(shè)置了名子空間,把剛才從數(shù)據(jù)庫表#@_channeltype查出來的字段fieldset值,作為參數(shù),載入模板中,然后,對這個(gè)標(biāo)簽進(jìn)行分析,請注意fieldset的值,正是我們后臺在添加字段,在字段配置里面看到的值,類似的如下圖所示。

通過這個(gè)構(gòu)造函數(shù),程序就把附加表字段的值,裝進(jìn)二維數(shù)組$this->ChannelFields里面了,以備后面使用。到此,這個(gè)構(gòu)造函數(shù)結(jié)束。

再加到上一層調(diào)用實(shí)例化,即回到文件arc.archives.class.php里面,接著下面的代碼,又把類TypeLink進(jìn)行實(shí)例化,這個(gè)類文件在文件include/typelink.class.php里面,當(dāng)實(shí)例化$this->TypeLink = new TypeLink($arr['typeid']);時(shí),參數(shù)是通過生成的文檔id查詢出來的欄目id。這個(gè)構(gòu)造函數(shù)是通過這個(gè)欄目id,把我們網(wǎng)站后臺對應(yīng)的模板提取出來,放入$this->TypeInfos數(shù)組里面,此構(gòu)造函數(shù)到此結(jié)果,從上面可以看見,構(gòu)造函數(shù)在初始化時(shí)很有用處。

再回到arc.archives.php里面,接著看下面的代碼,判斷當(dāng)前模型是不是單表模型,若不是則通過一個(gè)聯(lián)合查詢,把字段信息查詢出來放到$this->Fields,若是單表模型則全部置初始化,代碼如下:

再向下的代碼,就是對特殊的字段數(shù)據(jù)處理了。這個(gè)構(gòu)造函數(shù)到此結(jié)束,再加到上一個(gè)實(shí)例化處,即文件inc_archives_function.php里。

然后,調(diào)用函數(shù)MakeHtml($isremote),我們再回到文件arc.archives.class.php里面,找到這個(gè)函數(shù),大約在351行,上面的初始化,全為這個(gè)生成靜態(tài)函數(shù)服務(wù)的。

在這個(gè)函數(shù)中先載入模板,這里的模板是后臺欄目對應(yīng)的模板,然后,通過函數(shù)ParAddTable()解析附加表的內(nèi)容,在這個(gè)函數(shù)里面,有一個(gè)字段值處理函數(shù)MakeField($k, $row[$k], $ctag),這個(gè)是處理include/taglib/channel/里

面的標(biāo)簽源碼的,例如圖片集里面的imgurls字段值,軟件模型里面的softlinks,這個(gè)函數(shù)是專門處理字段值有多個(gè)標(biāo)簽的這些,還有其它的特殊的字段值的,也是加載channel文件夾里面的標(biāo)簽的一個(gè)函數(shù)。

要注意的是:軟件模型時(shí)面的有一個(gè)特殊的類型是softlinks,這是織夢系統(tǒng)固有的,用戶加不上的。大家可以看一下軟件模型添加字段配置里面的這個(gè)介紹。

處理標(biāo)簽源碼include/taglib里面的標(biāo)簽用的函數(shù)是:MakeOneTag($this->dtp, $this, 'N'),通過這個(gè)函數(shù),就可以把標(biāo)簽源碼全部加載進(jìn)來,對模板進(jìn)行解析。

接下來就是通過ParseTempletsFirst()對模板進(jìn)行解析,生成靜態(tài)網(wǎng)頁,因?yàn)槭牵攀觯裕旅娴拇a,不用多分析,請自己研究一下。

織夢生成html的過程大同小異,其它模板用到的函數(shù)等全跟這個(gè)一樣,只不過里面的一些具體內(nèi)容,處理稍微不大一樣,但用到的功能其它一樣,只要精通一個(gè),其它,自然就會(huì)了,這個(gè)教程是比較淺的作了一個(gè)分析,如果要分析每個(gè)代碼,那得用好長時(shí)間,后面的教程,將對這每個(gè)功能,進(jìn)行具體分析。


收縮
  • 微信客服
  • 微信二維碼
  • 電話咨詢

  • 400-1100-266
主站蜘蛛池模板: 辰溪县| 滨海县| 凤阳县| 繁峙县| 洪雅县| 温泉县| 辛集市| 吉木萨尔县| 阳谷县| 湖州市| 云林县| 湘潭市| 河北区| 鄂托克前旗| 长汀县| 新巴尔虎左旗| 祁门县| 太谷县| 武汉市| 聊城市| 阿克陶县| 开鲁县| 桃园县| 陕西省| 邵东县| 铜山县| 株洲市| 甘谷县| 婺源县| 天水市| 洞口县| 嘉荫县| 交口县| 资源县| 郎溪县| 黑水县| 宁陵县| 顺平县| 原阳县| 伊吾县| 山东|