DTCMS插件的制作實例電子資源管理(四)URL重寫


總目錄

時隔2年,再次收到本文的回復,實在慚愧,本系列竟然終止於第二章節。不從外部找原因,自從自身找缺點,一定是我寫的不夠好,一定是太功利了,所以決定重新回到當時的教程,完成這個時隔2年的系列。

本章目錄

  • 從分頁開始
  • URL重寫

        

一、從分頁開始

我們完成了列表頁的制作,接下來要做的就是分頁,分頁要參數,分頁的html是怎么出來的呢,可能大家看到之前的一篇里寫的是,分頁都是現成的。沒錯分頁是現成的,但是里面的參數是要自己寫的。DTCMS中分頁的參數是如何設置的呢?除了page以外,我還有其他的篩選參數怎么辦呢?

我們從模板頁開始找起,分頁是來自於一個叫做pagelist的變量,這個變量似乎在哪里看到過,沒錯就是在我們獲取列表頁數據的時候,用out輸出的一個變量。

   

------------------------------------------------------

我們直接找到這個方法,這里面的OutPageList是做什么用的呢,經過查看源碼,是輸出分頁部分的html的,也就是輸出<a>1</a>,<a>2</a> 這樣的一些列標簽的。這里面似乎還有一個方法挺奇怪的,就是我們要找的核心,linkurl()方法。這個方法的第一個參數是不是和我們配置文件里寫的url重寫的那個Name一模一樣啊,沒錯就是他了,接下來傳遞的是2個參數一個是我們要用到的分類id,一個是id也就是pageIndex拉。

   

----------------------------------------------------

進到方法里面去看個究竟,結果注釋啥都沒寫,就寫了一句返回URL重寫統一鏈接地址。不過我們看到他的參數是_key,跟我們之前猜想的一樣一定是name相關的東西,后面是參數,有點類似string.Format那種樣子嘛,所以我們無所謂有多少個參數都可以一股腦的寫進去咯。這個方法到底做了些什么呢,了解了這個方法,就了解了DTCMS內部的URL重寫的機制。

   

-------------------------------------------------------------

這里就不詳細展開了,簡單描述一下這個方法做了些什么,首先要知道在后台控制面板—系統管理—URL配置里面,我們每一條URL配置都是可以有多條URL表達式的,每條表達式還要寫正則表達式,傳輸參數,如下圖所示。

那么linkurl方法到底在干了些什么呢?首先linkurl確實如我們所想的一樣,通過key找到了對應的URL重寫的配置信息,然后判斷傳遞進來的params數量是否大於0,如果不大於0就壓根不需要再做參數的重寫了,直接看看系統是否要重寫成html就直接返回了。

如果params參數大於0,則開始循環URL表達式的列表,先根據參數數量來判斷要選那一條重寫表達式,你傳了2個參數,恰巧這條配置也是2個參數,那么就選這條配置了。接着根據正則表達式把參數依次填寫到對應的位置。完成url和參數的拼接。最后得到我們想要的url譬如databaselist/1/2.aspx 表示我的分類id是1,page是2。

這里需要具備正則表達式的基本知識,可以去搜索和了解一下正則相關的基礎。

接着一個url輸入進來,DTCMS會根據正則表達式解析出對應的兩個參數,並命名成propertyID和page,然后給后面的cs頁面showPage的時候取用,如下圖所示。這樣形成一個閉環。

   

   

二、URL重寫

所以看了上面一片混亂的說明還是不得要領的話,建議你可以去調試一下,再回來看我寫的亂七八糟的說明的話可能你就看懂了,畢竟你是真的要做DTCMS插件的話,調試是少不了的,況且我是在沒有說明的情況下,自己調試摸索找到的這條路。何況這都過去兩年了。

那么講講我們的URL重寫到底要怎么配置呢?

  1. 列表頁有根據分類id進行篩選的,所以我需要一個propertyID
  2. 列表頁需要分頁,所以我需要一個page表示第幾頁了
  3. 我可能只分頁,並沒有做分類的篩選啊,所以propertyID如果為空或者為0就表示我沒有做分類的篩選。
  4. 分類篩選可以多選啊,所以properttyID需要用下划線進行分割,把它當成一個字符串作為整體。

   

有了以上的分析,我們最后得出的URL重寫表達式就如上面那張圖所示了,一共3條。第一條是一個參數都不帶的。第二條是帶一個參數的,就是分類id。第三條是又有分類id,又有page的。

好了,有人問了,如果我只帶一個參數,譬如page呢?我說那就會被系統當成分類id=2去進行檢索。你說和我想要的不一樣啊? 那么我告訴你,不會這樣子,除非用戶是在地址欄里手動輸入的,否則正常點系統連接,系統已經幫你生成了兩個參數的url,分類id=0,page=2的這種鏈接,如下圖所示。如果你有強迫症,非要做2個一個參數的url配置的話,根據DTCMS中linkurl方法里的邏輯,他會在循環的時候匹配第一次參數數量當等的那一條配置,可能后一條配置一直都不會被用上。所以要么就遵守規則,要么就自己去改源代碼,反正源碼在你手里想怎么改怎么改咯。

   

   

至此,整個系列結束,整個系列從15年開始寫起,中間斷了兩年,原因不多說,還是從自身找原因。今天突然的收到博友發來的回復和點贊,然后再搜索了一下DTCMS插件,網上確實沒有DTCMS的插件如何制作的文章,自己挖的坑還是要自己填,哪怕隔了兩年,知識還是要傳遞下去的。這也是我寫博客的原因,我希望知識能夠傳遞下去,而不是單純的傳播,希望博客園能有更多的原創的東西,而不是拼拼湊湊一篇又一篇的文章占據首頁。

   

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM