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

主頁 > 網站建設 > 建站知識 > 織夢添加文章生成靜態網頁概述

織夢添加文章生成靜態網頁概述

POST TIME:2020-04-11 21:40

當我們在后臺添加文章或其它文檔時,點擊“保存”后,根據前臺模板(在templets/default里面的模板)生成了靜態網頁。今天就簡述一下織夢系統,實現這一過程一的大體步驟,因為,牽涉的文件太多,先概述一下,以后,會對每個功能進行分析學習。

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

模型id 是 1;

模型對應的模板:封面模板index_arcticle.htm,列表頁模板list_arcticle.htm,內容頁模板arcticle_arcticle.htm

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

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

分析開始。

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

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

生成文檔id函數:$arcID = GetIndexKey($arcrank,$typeid,$sortrank,$channelid,$senddate,$adminid);從這個函數的參數我們就看出,包括了上面提到的欄目id和頻道模型id。生成的這個文檔id,非常重要,因為下面用于生成html網頁的函數,就以這個文檔id為參數。
這個函數在文件include/helpers/archive.helper.php里面大約150行。

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

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

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

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

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

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

通過這個構造函數,程序就把附加表字段的值,裝進二維數組$this->ChannelFields里面了,以備后面使用。到此,這個構造函數結束。

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

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

再向下的代碼,就是對特殊的字段數據處理了。這個構造函數到此結束,再加到上一個實例化處,即文件inc_archives_function.php里。

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

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

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

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

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

接下來就是通過ParseTempletsFirst()對模板進行解析,生成靜態網頁,因為是,概述,所以,下面的代碼,不用多分析,請自己研究一下。

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


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

  • 400-1100-266
主站蜘蛛池模板: 临沭县| 澜沧| 邯郸市| 赤水市| 金湖县| 垦利县| 隆安县| 巴南区| 台安县| 宁津县| 泸州市| 和顺县| 汶上县| 威海市| 长顺县| 绵竹市| 上虞市| 农安县| 仪陇县| 祥云县| 肥乡县| 康保县| 乌鲁木齐市| 湘潭县| 绥宁县| 郸城县| 神池县| 棋牌| 高州市| 茌平县| 临清市| 合阳县| 阳西县| 东方市| 辽源市| 富阳市| 金坛市| 建湖县| 甘谷县| 玉树县| 商丘市|