在使用CMS套站時進行欄目結構規劃時常遇到這樣一種情況:每個欄目下想再細分一些類別,如果以欄目的形式添加,很多欄目下都會有這些重復的類別,這樣一來就導致很多重復和欄目。所以需要考慮直接在字段屬性類別的方式來添加,發文章時直接選擇類別來給文章歸類。不知道站長朋友們實際處理過程中有沒有遇到這樣的問題,但落葉確實感受挺深了,在涉及醫療性質的站點時,每個疾病病種下面有多個子病種,然后子病種的文章類型又分為病因、癥狀、診斷、治療、預防、科普、建議等等,每個欄目的文章基本都需要分這些類別,如果以子欄目的形式添加,50個子病種就要多添加300多個子欄目,這樣不管是對網站結構還是 SEO來講都是災難,所以這個時候“類別”字段顯得比較重要。
不同的CMS基本都有內置或者提供類別設置的功能,只是表現形式不同,設計細節不同,擴展靈活性也不同,本文中落葉擬對PHPCMS、帝國CMS及織夢CMS中的類別這點作一些細節性對比。
織夢CMS:
DEDE中沒有很明確的類別功能,可以變相實現的體現方式是”自定義屬性”,在自定義屬性中多添加幾個屬性,發布文章時,勾選這些屬性,然后調用時按照這個屬性分類進行調用即可。
類似下圖的最后一項:
想法貌似不錯,于是找DEDE添加自定義屬性的地方,然而結果似乎不是那么順利。
一句“為了數據安全起見不允許用戶增加其它類型”,那么對于普通用戶,如果非要實現,那只有修改DEDE內置的屬性名稱來變相實現了,如把“頭條” 改為“病因”,“推薦”改為“癥狀”,但這樣的結果是失去了原有的“頭條”和推薦功能。自定義文檔屬性結果發現是沒辦法自定義的。不好意思,遇上落葉這樣死鉆的人還真不相信你所說的安全問題,事實上增加一個自定義屬性,也沒有什么安全的,直接在數據庫中修改吧。
DEDECMS的自定義屬性記錄在dede_arcatt數據表中的,直接在PHPMYADMIN中可視化插入幾個自定義屬性:
這樣似乎就夠了,但實際,DEDECMS中文章表中調用自定義屬性的字段類型采用的是set類型,那里采用了白明單,限制了允許使用的att屬性,所以仍需要修改文章表dede_archives中的flag字段,按格式增加剛剛添加的三個屬性的att值,即如下:
這樣,在發布文章的表單處自定義屬性一欄就顯示出了剛添加的一些屬性,發布文章時勾選,前臺調用,使用flag=”m”即可調用癥狀類別的文章了。
{dede:arclist row="10' titlelen='24' orderby='pubdate' flag=’m’}
[field:textlink/]([field:pubdate function=MyDate('m-d',@me)/])
{/dede:arclist}
這里需要注意的是,因為DEDE的flag標簽解析后是采用like查詢,上圖中添加的by其實是不正確的,可以使用多字母,但是首字母不要有重復,如上圖中所示的,使用flag=’b’來調用加精的文章時,by類別的文章也會被調用出來。
當然DEDECMS中也可以自定義一個選項自段來實現,通過添加“使用radio選項卡”或“Checkbox多選框”,然后在默認值處填寫被選擇的項目來實現亦可,只是因為這里DEDE自定義字段只能添加在副表中,調用時需要關聯查詢,效率會低些,一般不建議這樣做。
自定義字段設置:
內容發布表單界面顯示的自定義類別字段:
這樣可以變相實現,只是在調用時,不方便把附加字段作為調用條件,需要使用DEDE的SQL標簽聯合查詢才行,效率稍低,也不太方便。
PHPCMS:
PHPCMS模板中內置了字段類型,文章模型中默認沒有開啟,在系統設置->模型管理中的字段管理中開啟類別字段。
然后在系統管理->相關設置->類別設置中添加類別:
添加文章里即可在使用類別選項來對文章歸類了:
前臺調用使用TAG標簽或GET標簽調用即可。如果使用TAG標簽則只需要在后臺模板管理處可視化選擇類別類型生成TAG標簽即可方便實現調用。
如果是GET標簽,則直接在SQL語句中加下typeid=’類別ID數字’可也。
帝國CMS:
帝國CMS默認沒有類別字段,不過亦可以通過自定義字段的形式添加,帝國的優點在于自定義字段可以添加在主表中,這一點非常不錯,在新聞數據表模板中添加一個typeid字段:
選擇添加在主表中,然后在“管理系統模型”中修改系統模板開啟,在錄入項中顯示該字段即可在文章發布表單中顯示了:
前臺數據調用則需要使用萬能標簽或靈動標簽中寫SQL語句來調用了,條件為typeid=”病因”,條件中需要寫漢字,這點不太爽。
總體分析來看,類別功能不是什么大功能,只是增加一個關聯自段,方便數據分類,不同CMS中都可以變相實現,但總體來看還是PHPCMS默認設置了該字段,無論是類別自定義添加還是前臺調用都方便些。從普通用戶來講,同是需要使用SQL來調用,帝國則比織夢稍方便些,因為他自定義的字段顯示在主表中了。