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

1,628 views

Published on

簡介 CCK 欄位模組開發的要點,說明開發 CCK 欄位模組的時機與最少必須要實作的勾點函數及其用途。

簡介新增、修改、預覽資料時各勾點函數呼叫的順序,以及撰寫 CCK 欄位模組的替代方案。

介紹一些可參考的 CCK 欄位模組與網路上的參考文章。

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,628
On SlideShare
0
From Embeds
0
Number of Embeds
145
Actions
Shares
0
Downloads
20
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

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

×