Drupal Commerce 是建置電子商城的模組,架構明確、彈性,只是因為還在發展中,相關可用的模組不若 Ubercart 那麼多。而在開發客製模組時,又沒有開發資訊可查看,要除錯較花功夫。
今天找到 Commerce Devel 模組,可以將 Commerce 相關的錯誤訊息都顯示出來,再搭配 Drupal Devel 模組,即可讓開發工作較為順利地推展。
Drupal Commerce 是建置電子商城的模組,架構明確、彈性,只是因為還在發展中,相關可用的模組不若 Ubercart 那麼多。而在開發客製模組時,又沒有開發資訊可查看,要除錯較花功夫。
今天找到 Commerce Devel 模組,可以將 Commerce 相關的錯誤訊息都顯示出來,再搭配 Drupal Devel 模組,即可讓開發工作較為順利地推展。
近期在執行的電子商城網站,因有填寫地址的需求,因此稍微研究一下 Address Field 模組,並擴展其功能,寫了一個 Address Field Taiwan 的模組(目前還是 sandbox 階段)。
這模組主要功能就是將地址格式改成「縣市」、「鄉鎮市區」、「郵遞區號」、「地址」等熟悉填寫的格式,並且將前三者設為互相連動,也就是只要下拉選取縣市、鄉鎮市區後,就會自動填入對應的郵遞區號。
我已經送出建立專案的申請,但因為程式碼撰寫方式不符合標準寫法,還在修改中,不知道何時才會改完;所以有興趣試用的,請到 http://drupalcode.org/sandbox/gloomcheng/1872126.git 下載。
新增內容節點表單也就是 /node/add/[content-type],預設的標題是 Create [content-type](「建立[內容類型名稱]」)。要更改此表單的頁面標題,在 D6/D7 的做法不同,以下分述之:
[D6]
最快的方式是寫一個客制模組,利用 hook_form_alter 函式改寫表單標題即可[1]。
function yourmodule_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'nodetype_node_form') {
drupal_set_title('My new title');
}
}
前篇文章提到,為改善多步驟表單的易用性,需要 Required for Publishing 模組,可惜的是作者還沒釋出 D7 的版本。幾經思量下,決定自己下海試試看 D7 的模組開發。
由於是拿別人的程式碼來改,所以還算簡單,比較麻煩的應屬部分 API 在 D7 的用法已改,或是已丟棄。找尋替代的 API 函式算是較花時間,不然程式邏輯其實很明確,不太需要調整。
雖然最後算是成功改出 D7 可用的 Required for Publising 模組程式,但因為部分程式有專為特定專案情境而改寫,所以並不算適合所有人使用,希望有人可以協助接手修改。
針對較為複雜的表單結構(像是申請表單、問卷),通常會將表單拆成多個步驟供網友填寫,一來是頁面不致太長,二來是稍稍減低網友的抗拒意識(是否有效我很懷疑)。
在 Drupal 7 若要實現多步驟表單,只需安裝 Field Group 模組即可,設定上也相當簡易,只是若沒參考說明文件的話就搞不懂怎麼設定。其實 Field Group 就是以 Group 欄位來當成不同步驟的區別,如下所示(或參考模組說明圖):
- Field Group Holder(必須,整個表單的最外層)-- Field Group Step 1--- Field Question 1--- Field Question 2-- Field Group Step 2--- Field Question 3--- Field Question 4--- Field Question 5--- ...
Views 是架設 Druapl 網站必不可缺少的模組,此模組提供一個簡便的介面,讓我們可以自訂要從資料庫擷取哪些資料來呈現,以及用什麼方式來呈現。以往自行架設開發系統時,對於特定單元頁面,要從哪個資料表擷取資料、要顯示哪些欄位內容,都必須自行撰寫程式,而 Views 則簡化了前述的工作。
Views 除了可讓我們決定要呈現哪些資料欄位外,亦可設定要依哪種方式進行排序。通常我們會需要依內容標題排序,若內容是英文,排序結果會依字母排序,但如果內容是中文呢?很可惜,中文內容其實是依 UTF-8 的編碼來排序,所以並不是依筆畫順序排序,而是依該中文字在編碼表的順序來排的。
那麼,要如何才能依筆畫排序呢?首先,我們必須知道的是,雖然 UTF-8 編碼無法依筆畫排序,不過 Big5 編碼表中的中文字,確實是依筆畫排序的[1];也就是說,我們需要將輸出結果轉換為 Big5 碼,即可讓中文內容依編碼表的順序來排序,最終結果就會是依筆畫排序。