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

主頁 > 網站建設 > 建站知識 > 織夢下載標簽分析

織夢下載標簽分析

POST TIME:2020-04-11 21:41

在“怎樣自定義織夢標簽初探”這篇文章中對織夢標簽,作了初次探索,現在就舉一個具體的例子,來學習一下織夢是標簽是如何寫的,這個例子比較綜合,與一般簡單的標簽有很大不同,而且,相當復雜,做好心理準備。今天給一個朋友開發一個在線下載并且在線支付功能的網站,所以,對這個作了一個系統的研究,就是標簽{dede:field name='softlinks'/}
雖然,感覺里面的還有些東西,現在不能理解,但是最后,還是開發完了,有很多東西看多了,寫多了雖然,不知道具體的是什么意思,但是知道會用。今天就把我的開發成果,作一個總結,也把通過這個例子,加深一下對織夢標簽的理解,相信以后,還會用到的。
因為是下載站,{dede:field name='softlinks'/}是里面最難,最核心,少了它一切都是空談,但也是最復雜的,我們分析這個標簽如何從數據庫調用出來的,在數據庫里面又是以什么樣的形式存在,又是如何插入到數據庫的。
我們倒著分析,即先分析,如何插入到數據庫的,當我們發布軟件的時候,如下圖所示。
我們要把從本地或手動指定軟件下載地址,作完這一工作后,我們點擊“確實”,此時,會通過soft_add.php把我們無論手工上傳的,還是手工指定的都以類似{dede:link} $softurl {/dede:link}這種形式,插入到數據庫表dede_addonsoft里面的字段softlinks里面了,我添加了一個,打開對應的表找到字段softlinks,這個字段的值,如下圖所示。
現在我們明白了,實際上標簽{dede:softlinks/}要調用的是上圖中的以{dede:link}開始以{/dede:link}結束的字符串,我們想一下,如果這樣直接調用的話,是不是調出來的就是一個標簽形式的字符串?是的,沒有錯,如果這樣我們調用了來的就不是下載地址了,而是多了二個大括號,例如:上圖中字段softlinks的值是:"{dede:link text='DedeCms3.1全新安裝程序'} http://www.dedebase.com/upimg/soft/dedesoft/dedecmsv3.1.rar {/dede:link}",我們應當調用的是中間的http://www.dedebase.com/upimg/soft/dedesoft/dedecmsv3.1.rar,所以,我們就要對softlinks這個字段值,進行處理。
處理方法,跟另一篇“怎樣自定義織夢標簽初探”這篇文章里的類似,但又有很大的不同。
在內容模板即article_soft.htm里面,用標簽{dede:field name='softlinks'/}來調用,這個標簽調出來的是生成的靜態頁面,(例如 類似www.dedebase.com/a/downloads/80.html)里面的代碼<a href='/plus/download.php?open=0&aid=80&cid=3'>進入下載地址列表</a>,標簽源碼是include/taglib/channel/softlinks.lib.php。
這個標簽源碼文件softlinks.lib.php的功能,就是在生成靜態網頁時,把標簽{dede:field name='softlinks'/}通過模板引擎,變成<a href='/plus/download.php?open=0&aid=80&cid=3'>進入下載地址列表</a>,他的作用就是這個作用,也就是這個標簽源碼功能到此為止。但是如果在后臺設置的鏈接方式是跳轉到另一個頁面下載,那么,還會生成類似/download.php?open=2&id={$refObj->ArcID}&uhash={$uhash}代碼,這個代碼是我們點擊“進入下載地址列表”后,顯示的代碼。
真正下載的功能其實是plus/download.php這個文件,標簽源碼只是把下載連接解析出來,并生成對應的鏈接方式,而要真正去處理下載的是download.php,我們打開這個文件,找到else if($open==2)這句代碼開始,前面幾行就是做初始化準備,例如判斷有沒有下載軟件資源等。
我們看下面的代碼。
上面的代碼是這個文件里面的核心代碼,他的功能就是從數據庫表里面,把字段softlinks的值即如下圖所示。
把上面的softlinks的字段值,即字符串,循環遍歷出下載地址,現在我們詳細分析一下這些代碼。
首先引入靜態模板引擎文件dedetag.class.php,這是必須的,然后,實例化,把softlinks字段值載入,具體載入做了什么,可以去研究一下LoadSource()這個方法。實際上它的作用就是把字段softlinks的值,變成數組標記CTags,我們打印一下這個數組CTags,如下所示。

Array
(
[0] => DedeTag Object
(
[IsReplace] =>
[TagName] => link
[InnerText] => http://www.dedebase.com/upimg/Server.zip
[StartPos] => 0
[EndPos] => 113
[CAttribute] => DedeAttribute Object
(
[Count] => 0
[Items] => Array
(
[text] => 服務器環境使用版
)

)

[TagValue] =>
[TagID] => 0
)

[1] => DedeTag Object
(
[IsReplace] =>
[TagName] => link
[InnerText] => http://www.dedebase.com/upimg/Debug.zip
[StartPos] => 115
[EndPos] => 229
[CAttribute] => DedeAttribute Object
(
[Count] => 0
[Items] => Array
(
[text] => 本地測試專業完整版
)

)

[TagValue] =>
[TagID] => 1
)

)

我們看到CTags是一個二維數組,數組里面是每個成員是一對象,對象里面又包括一個對象,這個對象里面又包括一個數組。通過foreach循環遍歷后,我們就可以通過$ctag->GetInnerText()取出里面對應的下載地址,例如上面的
http://www.dedebase.com/upimg/Server.zip
http://www.dedebase.com/upimg/Debug.zip
這二個就是通過$ctag->GetInnerText()取得的,這二個就是我們下載的真實的地址。
回過頭來看一下,下載標簽源碼softlinks.lib.php,它也通過跟download.php里面的幾步。
1.引入模板引擎dedetag.class.php,在include/taglib里面的文件無需引入,默認就包含了這個文件。
2.實例化對象:new DedeTagParse()
3.載入模板字符串,LoadSource($fvalue);這里面的$favlue類似,字段softlinks的值,或是含有標記的字符串。
4.循環遍歷標記數組CTag foreach($dtp->CTags as $ctag),然后,通過$ctag->GetInnerText()來得到標記之間的文本,即類似上面的http://www.dedebase.com/upimg/Debug.zip。
請注意,這與織夢其它標記,例如loop.lib.php有很大的不同,在loop等這樣的織夢標簽里面,是先把InnerText值載入到模板字符串,因為,這個值并不是像上面的下載一樣,從表中某個字段獲得的,而是標記之間的文本,這樣理解起來有點難,多看一下織夢這些標簽就能發現這點不同。
在softlinks.lib.php里面,通過$row['downtype']即鏈接顯示方式,分成二大部分代碼,一部分是直接顯示地址列表,另一部分是要求進入下載地址列表頁,然后,再判斷“附件下載方式”,最后,在內容頁生成下載鏈接頁。


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

  • 400-1100-266
主站蜘蛛池模板: 六盘水市| 墨江| 安溪县| 沙田区| 从化市| 仲巴县| 虎林市| 绥江县| 汝阳县| 台南县| 友谊县| 昔阳县| 南和县| 高唐县| 大田县| 达日县| 马龙县| 中方县| 蓝田县| 建德市| 高要市| 洞头县| 临高县| 资源县| 乐昌市| 昌宁县| 乌拉特后旗| 梨树县| 漳州市| 西充县| 马边| 林甸县| 阜平县| 满城县| 铜山县| 高阳县| 普格县| 武宣县| 南华县| 玛沁县| 峡江县|