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

總目錄

時隔2年,再次收到本文的回覆,實在慚愧,本系列居然終止於第二章節。不從外部找緣由,自從自身找缺點,必定是我寫的不夠好,必定是太功利了,因此決定從新回到當時的教程,完成這個時隔2年的系列。 正則表達式

本章目錄

  • 從分頁開始
  • URL重寫

        

1、從分頁開始

咱們完成了列表頁的製做,接下來要作的就是分頁,分頁要參數,分頁的html是怎麼出來的呢,可能你們看到以前的一篇裏寫的是,分頁都是現成的。沒錯分頁是現成的,可是裏面的參數是要本身寫的。DTCMS中分頁的參數是如何設置的呢?除了page之外,我還有其餘的篩選參數怎麼辦呢? url

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

   

------------------------------------------------------ 插件

咱們直接找到這個方法,這裏面的OutPageList是作什麼用的呢,通過查看源碼,是輸出分頁部分的html的,也就是輸出<a>1</a>,<a>2</a> 這樣的一些列標籤的。這裏面彷佛還有一個方法挺奇怪的,就是咱們要找的核心,linkurl()方法。這個方法的第一個參數是否是和咱們配置文件裏寫的url重寫的那個Name如出一轍啊,沒錯就是他了,接下來傳遞的是2個參數一個是咱們要用到的分類id,一個是id也就是pageIndex拉。 調試

   

---------------------------------------------------- orm

進到方法裏面去看個究竟,結果註釋啥都沒寫,就寫了一句返回URL重寫統一連接地址。不過咱們看到他的參數是_key,跟咱們以前猜測的同樣必定是name相關的東西,後面是參數,有點相似string.Format那種樣子嘛,因此咱們無所謂有多少個參數均可以一股腦的寫進去咯。這個方法到底作了些什麼呢,瞭解了這個方法,就瞭解了DTCMS內部的URL重寫的機制。 htm

   

------------------------------------------------------------- blog

這裏就不詳細展開了,簡單描述一下這個方法作了些什麼,首先要知道在後臺控制面板—系統管理—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的時候取用,以下圖所示。這樣造成一個閉環。

   

   

2、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的插件如何製做的文章,本身挖的坑仍是要本身填,哪怕隔了兩年,知識仍是要傳遞下去的。這也是我寫博客的緣由,我但願知識可以傳遞下去,而不是單純的傳播,但願博客園能有更多的原創的東西,而不是拼拼湊湊一篇又一篇的文章佔據首頁。

相關文章
相關標籤/搜索