Joomla! 1.5 的詭異 data model 設計

最近在幫系上作新的英文系網頁. 經過一些簡單的分析最後是採用了 Joomla ! CMS 系統, 雖然本人跟 PHP 是極為不熟, 但是看在安裝方便, 後端管理系統易操作, 有大量 Templates 可以容易修改成為比較像一個系網站的樣子, 以及眾多的 components + 活躍的 community 的份上, 就選了 Joomla ! CMS. 反正以後有應付不了的部份再 issue 另外一個 web application 來承接就好 <= 是這樣打算的啦. 但是實際在 deploy Joomla ! 1.5 RC4 時卻發現他的 data model 設計實在是有一點詭異, 這點在 Joomla ! Forum 也有人做了一點 complain ( 看這裡後半段的對話討論 ).

在 Joomla ! 1.5 中的 data model 主要由三個 elements 所構成, 分別是 article, category, 以及 section. 按照 Joomla ! 給的 glossary 說明, 三者的關係是這樣 ( 以 article 的 glossary 說明就可看出 ) :


Article : Discrete piece of content within the Joomla! hierarchy, which may be associated with a particular Section/Category combination or may be an Uncategorized Article; usually displayed in the main body of your page. Within the content hierarchy, a Section is the top level and is a container for Categories. A Category is the next level and is a container for the third level, which is the Article.
可以看到這三個 elements 是階層式的結構, section 是 categories 的 container, 而 category 是 articles 的 container. 同時注意說明中提到的 "particular", 亦即一篇 article 對應到特定的一個 category 以及一個 section.

如果再參考後端管理介面, 在你新增一個 article, category 時的 template 選項, 或是到 database 中看 prefix_categories table (prefix 跟你安裝時的設定有關) 的話, 會發現一個 category 只能會對應到一個 section, 同時 category 雖然有 parent 的欄位, 但是並沒有被使用到. 如果畫成簡易 UML 圖的話, 三者的關係大概是像這樣 :

顯然的這裡有些不合常理的問題. 首先是 article 分別只能歸屬於一個 category 以及一個 section, 這跟一般我們認為 category 其實是加在 article 上個一個 label, 而一篇 article 應該可以加上很多 labels 才對. 再者, 上圖中 section 與 category 的角色似乎有些混淆, 要這樣規劃不如讓 category 可以自己作 composition 來得乾脆.

這樣的 data model 規劃讓使用者其實比較沒有彈性去 organize 內容, 因而會出現為了把一篇 article 分到多個 category, 而要把同樣的內容複製到不同的 articles 內, 再分別指定 categories 的情況出現.

解決的方法要不就是修改這個 data model ( 但是連帶的 database schema 可能也要修改 ), 要不就是在 Joomla ! 的內部邏輯作處理, 利用 category 內的 parent 欄位, 製造出 category 的 hierarchy, 而在 Joomla ! 內部, 當要呈現某一個 category 的 articles 時, 會自動去尋找 child category 內的 articles 作 aggregation, 但是這可能會有 performance 的問題. 此時上圖就會修正成下面這樣 :

另外一個作法則是利用目前 article 已經有的 meta-key 屬性, 也就是可以在 template 中利用 keywords 加上 article 的 meta-data, 然後把這些 meta-keys 作為 labels 使用, 開發 components / plugins 利用 meta-keys 來整理 articles. 但是這樣一來原本的 category 等同於廢掉了 ^^b , 同時使用者也需要自己管理所有的 keywords, 容易出現 semantic 相同的不同 keywords.

既然 forum 上已經有討論的聲音出現了, 不知道 Joomla ! 開發團隊會怎樣處理. 如果是採用第一及第二種作法, 我認為在 Joomla ! 1.5 Stable 應該不可能出現, 因為現在都 RC4 了, 該會留到下一個版本. 因此先採取方法三, 再於之後的版本整合 meta-keys 跟 category 或許會是比較好的策略吧.

0 意見:

Designed by Posicionamiento Web | Modified by seLain | Bloggerized by GosuBlogger | Blue Business Blogger