信報論壇 revamp

都有一段時間忙得要死,沒有更新這個 blog 了
這次的 project 總算順利完成,穩定進入維護階段的同時
花點時間寫一寫這次使用 Drupal 的經驗好了

這個在三月中開始版面設計的網站,當然是使用 Drupal7 開發
結構上不算太複雜,只有首頁,文章內頁,用戶頁,「著名博主」頁
但因為用戶可以自行編寫文章,node edit form 都需要使用客製化的 theme
而且那個 form 需要一定程度的簡化,令一般使用者可以比較容易上手

在網站也使用了 responsive web design 的版面設計
令手機的使用者可以使用一個比較簡單的版面
但 js based 的 responsive 有反應慢,需要等待 js 執行的問題
有機會再和大家分享這方面的心得

而比較特別的是一般的文章在首頁是使用日期分類的
信報編輯和「特選的博主」會出現在頁面上半部份
其餘一般使用者的文章會出現在頁面下半部份
而除了特定的文章之外,首頁只會出現當日的文章
而昨日,以至七日之前的文章可以使用 dropdown 瀏覽
我們客製了數個 views 的 arguments 來處理這種有時效性的頁面設定
date based frontpage

而整個 project 比較大的挑戰有三個方面:論壇文章管理,資料轉移和使用者 single sign on

論壇文章管理
因為一般的注冊使用者可以和信報編輯一樣建立文章
所以信報編輯在文章排序方面需要很大的權力
而每一天都有上下兩半部份的排序,而且經常會因為文章的突發性而修改排序
第二是編輯刪除,博主刪除的功能
在遇到離題,人身攻擊或誹謗的時候編輯需要隱藏文章
但原作者需要看到已經被刪除的字眼,並保留證據
而文章的回應更可以由該文章的原作者管理
所以不可以使用 "未發表" 這種 Drupal 原有的控製
我們在實作的時候大量使用 flags 和 draggable views
flags module 本身提供一個可靠的 API
可以客製 flag 時後續的權限處理
檢舉的功能也是 flag module 的延伸
加上 rules 就可以發出警示的電郵給編輯

資料轉移
這個論壇是一個 revamp ,論壇原有的文章可以追溯到零八年
零八年至今五年的使用者,發表的文章,回應等等資料的數量超過一百二十萬
而資料轉移的工作其間必須下線,直到資料轉移的過程完美的完成才可以上線
最後資料由舊系統匯出,匯入到新系統總共使用了九個小時
由黄昏六時開始,一直到第二日的淩晨三時完成
為了確保轉移的工作不會在最後一刻的淩晨出現錯誤
我們花了大量的時間開發了一個基於 migrate 的 module
透過一個可維護的,持續的,可反覆匯入的方法
將舊的系統中的資料過渡到 Drupal,並對應 Drupal 中的各種主要 entity, node, comment, user, files 等等
其中的代碼開發秘密,我會在 Drupal camp taipei 2013 詳細講解 http://2013.drupalcamp.tw/session/83

使用者 single sign on
最後是使用者的單一登入
舊有的系統因為是使用同一組伺服器,只需要登入一次便可以
同一登入的習慣在兩個不同的伺服器和 sub domain 之下有完全不同的難度
為此我們也客製了整合使用者的模組
令使用者不會發覺論壇和新聞是完全兩個不同的伺服器
其中的代碼我們也會在 Drupal camp taipei 2013 詳細講解
我回來之後才將 ppt 放在這裡

最後,當然是讓大家看看 screencap
還有,未報名 Drupal Camp Taipei 2013 的立即到 http://2013.drupalcamp.tw/ 注冊參加!

Snapshot: 
Google