解讀phpwind的主題定製化設計

2021-05-22 06:29:56 字數 1112 閱讀 2423

最近研究phpwind原始碼過程中,發現它對發帖主題具有可定製化能力,而不是一概標準貼格式,能夠根據具體應用場景定製化屬性,讓帖子資訊結構化起來,具體功能以房屋買賣版塊為例,可以分為出租、**、求購等型別的帖子,如下圖所示:

發帖的時候,能根據型別,定製各個屬性,以出租為例,如下圖所示:

在列表展示頁裡,也能根據定製化屬性,來顯示列表,以出租為例:

剛開始,我的初步判斷是phpwind對這麼幾個應用廣泛的場景單獨做了頁面,因為在後台配置中,沒找到能定製這些引數的地方,但在原始碼裡沒找到這些定製化頁面,因此我斷定是有一套關於主題定製的模型,通過對模型的配置,達到對功能的定製,這引起了我的興趣,通過對錶結構的分析,發現有一組表是專門用來應對主題定製化的,表結構如下圖所示:

所上圖所示,

pw_topiccate為主題分類表,是最上層的抽象,表示在哪些版塊裡有定製化主題。

pw_topicmodel為主題分類模板資訊,對應著各個定製化主題,如上例中的「出租」在裡面就對應一項。

pw_topicfield為主題分類模板字段表,對於每個定製化主題所需的定製化字段都在這裡配置

pw_topicvalue為定製化欄位對應的值,表面後面會跟上乙個num,對應modelid,這樣每個model都會有乙個單獨的pw_topicvalue表來儲存資料

pw_topictype為版塊主題分類,可指定大版塊下各個定製化主題的顯示規則

根據以上資料表結構設計,就大致能知道如何實現這一套定製化設計了。拿瀏覽帖子為例,phpwind做了以下事情:

根據modelid得到定製化資料

原始碼:|

在gettopicvalue方法中,先是得到model資訊,然後根據modelid從相應pw_topicvalue表裡得到具體資料

最後根據pw_topicfield表裡配置的各個field,把value根據一定規則組裝起來

根據modelid得到搜尋版塊的html**

在模板read.htm裡把以上得到的定製化資料顯示出來

不過從以上設計發現,這個機制還不夠完全定製化,因為對於每個新加的model都需要新加表pw_topicvalue來儲存資料,因此phpwind也不能在後台管理功能裡放開對這一套的配置,如果真正做到可配置,也許可以考慮放乙個n多字段的大表,而不是分表來存定製化資料。

Visual Studio中的主題定製變得更加容易

有時visual studio的預設主題是不夠的。幸運的是,我們剛剛重新設計了建立和匯入自定義主題的過程。如果你足夠勇敢地建立自己的主題,你必須從乙個3000多個模糊命名的顏色標記的無組織列表中逐個編輯元素。今年夏天,一組實習生開發了乙個新發布的 color theme designer 擴充套件,...

關於iView框架定製主題遇到的問題

iview是一套基於 vue.js 的開源 ui 元件庫,主要服務於 pc 介面的中後台產品。首先檢視有沒有安裝less 和less loader,因為view ui iview 的樣式是基於 less 進行開發的 如果確認已經安裝,那麼這個問題應該是webpack關於less loader的配置預...

allure報告的定製化

最近在定製化allure報告,乙個testcase函式會測試很多條用例,而每條用例的級別不一樣,就發現乙個可以利用 pytest.mark.parametrize迴圈傳參進行控制allure報告的方法,分享一下 pytest.mark.parametrize index,title,severity...