Upload
drupal-taiwan
View
1.734
Download
4
Embed Size (px)
DESCRIPTION
簡介 CCK 欄位模組開發的要點,說明開發 CCK 欄位模組的時機與最少必須要實作的勾點函數及其用途。 簡介新增、修改、預覽資料時各勾點函數呼叫的順序,以及撰寫 CCK 欄位模組的替代方案。 介紹一些可參考的 CCK 欄位模組與網路上的參考文章。
Citation preview
CCK 欄位模組開發簡介
為何要開發 CCK 欄位模組
目前的 CCK 欄位模組沒有適合的應用需要使用 Form API 修改的地方太多透過 Form API 無法改出需要的效果
hook_form_alter欄位預設值使用 PHP Code #pre_render、#process、#after_build
需要同時儲存好幾個資料庫的欄位編輯或呈現方式跟現有的欄位模組不同根據其他欄位的值做運算
開發 CCK 欄位模組的替代方案
使用前提如果只使用在一個特定的內容類型上修改地方不多 無需呈現特殊的 widget
Computed Field可以儲存資料在 Views 中可以依欄位內容做排序、過濾下載:http://drupal.org/project/computed_field 小抄:http://drupal.org/node/149228
Dynamic Field不可儲存資料 下載:http://drupal.org/project/dynamicfield
勾點函數
xxx_info:CCK 欄位設定畫面的說明 Manage fields
Display fields
hook_field_info
勾點函數
hook_widget_info
hook_field_formatter_info
hook_field_info 相關的勾點函數
hook_field_settings($op, $field)定義欄位設定表單、資料庫欄位及其操作(例如:form、save、database columns) 只需儲存一個欄位的資料時,將欄位名稱設成 'value'這裡所說的儲存欄位並非欄位設定表單上的欄位,而是此 CCK 欄位所要儲存的資料欄位
hook_field_info 相關的勾點函數
hook_field($op, &$node, $field, &$items, $teaser, $page)定義各種欄位操作(例如:insert、update)若 hook_field_settings 沒有定義任何的資料庫欄位,將不會觸發 insert、update 的操作
hook_content_is_empty($item, $field)
測試欄位內容是否為空
hook_widget_info 相關的勾點函數
hook_widget(&$form, &$form_state, $field, $items, $delta = 0)
輸出變數的結構會影響其他勾點函數的操作'#tree' => false 用 return $element;'#tree' => true 用 return array($element);
hook_field_formatter_info 相關的勾點函數
hook_theme'hook_formatter_XXX' 會對應到 hook_field_formatter_info的 XXX 項目
hook_field_formatter_info 相關的勾點函數
theme_hook_formatter_default($element)需對預覽狀況做處理('#tree' = true 的狀況)
勾點函數執行順序(insert node)
1. widget prepare form values2. widget form3. widget validate4. widget process form values5. field validate6. content_field validate7. widget submit8. widget process form values9. field submit
10. content_field submit11. field insert12. content_field insert
勾點函數執行順序(update node)
1. widget prepare form values2. widget form3. widget validate4. widget process form values5. field validate6. content_field validate7. widget submit8. widget process form values9. field submit
10. content_field submit11. field update12. content_field update
勾點函數執行順序(preview node)
1. widget prepare form values2. widget form3. widget validate4. widget process form values5. field validate6. content_field validate7. widget process form values8. field view
參考模組
CCK:http://drupal.org/project/cck有最基本的寫法可以參考
Fivestar:
http://drupal.org/project/fivestar各種的對應方式(約 80%)都可以在這個模組中學習到
參考資料
Pro Drupal Development:http://www.amazon.com/o/ASIN/1430209895
CCK Module Basics: http://learnbythedrop.com/drop/86
Creating Custom CCK Fieldshttp://www.lullabot.com/articles/creating-custom-cck-fields
CCK for developershttp://drupal.org/node/101742
CCK Documentation Resourceshttp://api.audean.com