15
CCK 欄位模組開發簡介

[DCTPE2010] 如何開發 CCK 欄位模組

Embed Size (px)

DESCRIPTION

簡介 CCK 欄位模組開發的要點,說明開發 CCK 欄位模組的時機與最少必須要實作的勾點函數及其用途。 簡介新增、修改、預覽資料時各勾點函數呼叫的順序,以及撰寫 CCK 欄位模組的替代方案。 介紹一些可參考的 CCK 欄位模組與網路上的參考文章。

Citation preview

Page 1: [DCTPE2010] 如何開發 CCK 欄位模組

CCK 欄位模組開發簡介

Page 2: [DCTPE2010] 如何開發 CCK 欄位模組

為何要開發 CCK 欄位模組

目前的 CCK 欄位模組沒有適合的應用需要使用 Form API 修改的地方太多透過 Form API 無法改出需要的效果

hook_form_alter欄位預設值使用 PHP Code #pre_render、#process、#after_build

需要同時儲存好幾個資料庫的欄位編輯或呈現方式跟現有的欄位模組不同根據其他欄位的值做運算

Page 3: [DCTPE2010] 如何開發 CCK 欄位模組

開發 CCK 欄位模組的替代方案

使用前提如果只使用在一個特定的內容類型上修改地方不多 無需呈現特殊的 widget

Computed Field可以儲存資料在 Views 中可以依欄位內容做排序、過濾下載:http://drupal.org/project/computed_field 小抄:http://drupal.org/node/149228

Dynamic Field不可儲存資料 下載:http://drupal.org/project/dynamicfield

Page 4: [DCTPE2010] 如何開發 CCK 欄位模組

勾點函數

xxx_info:CCK 欄位設定畫面的說明 Manage fields

Display fields

hook_field_info

Page 5: [DCTPE2010] 如何開發 CCK 欄位模組

勾點函數

hook_widget_info

hook_field_formatter_info

Page 6: [DCTPE2010] 如何開發 CCK 欄位模組

hook_field_info 相關的勾點函數

hook_field_settings($op, $field)定義欄位設定表單、資料庫欄位及其操作(例如:form、save、database columns) 只需儲存一個欄位的資料時,將欄位名稱設成 'value'這裡所說的儲存欄位並非欄位設定表單上的欄位,而是此 CCK 欄位所要儲存的資料欄位

Page 7: [DCTPE2010] 如何開發 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)

測試欄位內容是否為空

Page 8: [DCTPE2010] 如何開發 CCK 欄位模組

hook_widget_info 相關的勾點函數

hook_widget(&$form, &$form_state, $field, $items, $delta = 0)

輸出變數的結構會影響其他勾點函數的操作'#tree' => false 用 return $element;'#tree' => true 用 return array($element);

Page 9: [DCTPE2010] 如何開發 CCK 欄位模組

hook_field_formatter_info 相關的勾點函數

hook_theme'hook_formatter_XXX' 會對應到 hook_field_formatter_info的 XXX 項目

Page 10: [DCTPE2010] 如何開發 CCK 欄位模組

hook_field_formatter_info 相關的勾點函數

theme_hook_formatter_default($element)需對預覽狀況做處理('#tree' = true 的狀況)

Page 11: [DCTPE2010] 如何開發 CCK 欄位模組

勾點函數執行順序(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

Page 12: [DCTPE2010] 如何開發 CCK 欄位模組

勾點函數執行順序(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

Page 13: [DCTPE2010] 如何開發 CCK 欄位模組

勾點函數執行順序(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

Page 14: [DCTPE2010] 如何開發 CCK 欄位模組

參考模組

CCK:http://drupal.org/project/cck有最基本的寫法可以參考

Fivestar:

http://drupal.org/project/fivestar各種的對應方式(約 80%)都可以在這個模組中學習到

Page 15: [DCTPE2010] 如何開發 CCK 欄位模組

參考資料

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