Form API 操作

2 篇文章 / 0 new
最新文章
author
Form API 操作
常用
表單 form.inc
hook_element_info() 讓模組可以自訂元素型態及指定預設值 system.api.php
hook_form_alter(&$form, &$form_state, $form_id) 異動作業中的表單內容
僅自有模組內呼叫則函式名稱為 $form_Id + '_alter'
system.api.php
hook_form_FORM_ID_alter(&$form, &$form_state, $form_id) 異動特定 FormID 的表單資料  
hook_form_BASE_FORM_ID_alter(&$form, &$form_state, $form_id) 異動 特定類型 的表單資料, drupal7 僅有 node_form, comment_form 兩種BaseID  
hook_forms($form_id, $args)    
hook_form($node, &$form_state) 顯示一個 node 的編輯表單 node.api.php
   
form_set_error($name = NULL, $message = '', $limit_validation_errors = NULL) 表單輸入錯誤訊息顯示
drupal_get_form($form_id) 通常用於 無狀態傳遞 或 menu callback 的簡易表單, 指定的 $form_id 須存在該函式名稱, 系統藉由呼叫該函式來建立表單內容.
Ex. hook_menu()的其中參數
'page callback' => 'drupal_get_form',
'page arguments' => array('formexample_nameform'), //$form_Id
drupal_form_submit($form_id, &$form_state) 由程式內觸發確認後程序
drupal_build_form($form_id, &$form_state) 建立與處理輸入表單
element_children(&$elements, $sort = FALSE) 取出傳入陣列資料(key/value)內所有非 # 開頭的 key common.inc
element_info($type) 傳回元素的基本陣列資料(初始化)
ex:element_info('managed_file');
 
form_set_value($element, $value, &$form_state) form_set_value($form['name']['first'], 'joe', &$form_state);
等同
$form_state['values']['name']['first'] = 'joe';
 
系統 system.module
system_settings_form($form) 加入基本系統參數編輯設定與儲存按鈕
$form_state  
$form_state['values'][element_Id] 放置使用者表單輸入內容  
$form_state['redirect'] = 'node/1';
$form_state['redirect'] = array('node/1',  $query_string, $named_anchor);
頁面轉向, 若無指定則回到原頁面  
$form_state['rebuild'] = TRUE; 讓 form 元素重新呈現時繼續保留當前輸入值  
$form 特定參數  
$form['#validate'][] = 'my_validate'; 若有指定參數則call參數內指定的 function, 若無則會 call $form_Id + 識別字 之函式,
Ex: $form_Id + '_validate' , $form_Id + '_submit''
 
$form['#submit'][] = 'my_submit';  
$form['#action'] = 'myAction'; 指定submit後轉由 http://ex.com/myAction 來進行處理, 若無指定則由原程序進行表單處理  
$form['#theme'] = 'my_theme'; 若無定義則會 call 'theme_' + $form_Id 之函式  
$form['#pre_render'] = 'xxx'; 讓 form 在呈現前的最後前置處理相關內容  
$form[element] 內元素之參數  
#attributes 附加屬性資料
‘#attributes’ => array(‘class’ => ‘search-form’);
 
#required 是否為必要輸入  
#access 權限控制, '#access' => user_access('administer nodes'),  
#default_value 預設值  
'#element_validate' => 'my_ele_validate', 指定元素的驗證作業  
'#markup' => '<blink>Hello!</blink>', 當元素沒有指定 #type 參數時, 則以 #markup 內容直接呈現  
#ajax 使用AJAX技術
'#ajax' => array(
  'callback' => 'automobile_dependent', //處理的函式
  'wrapper' => 'dropdown_replace', ), //要呈現資料的元素ID
 
#attached 附加檔案如,css, js等  
#prefix, #suffix 元素呈現時 前/後 增加之內容(html code), 可藉此加入 table tag 進行表單元素位置的佈置  
'#tree' => TRUE TRUE: 告訴系統 submit 後所屬元素值依照陣列結構存放在 $form_state['value'][], 反之則所有陣列值均放置在第一層, 此時須注意元素ID不能相同  
#array_parents 當表單初始化完成後, 該陣列存放包含自己與各父層元素名稱. 與 #tree 無關  
#parents 當表單初始化完成後, 當 #tree=true 時, 該陣列內會存放到最高層元素 #tree=true間, 所有歷經的元素名稱, 否之則陣列內僅存放自己名稱  
#state 可利用其他元素值作為自身的狀態控制, 此法若對應的元素使用AJAX模式, #state控制可能會無效用
'#states' => array( 'visible' => array(
   ':input[name="how_many_pcs"]' => array('value' => '5'),
), ),
 
#pre_render, #post_render drupal_render() 發生前後呼叫指定的函式  
#autocomplete_path 指定提示自動完成輸入的資料提供程序  

theme 的找尋順序
if set $form['#theme'], Ex:“foo
1. themes/mytheme/foo.tpl.php // Template file provided by theme.
2. formexample/foo.tpl.php // Template file provided by module.
3. mytheme_foo() // Function provided theme.
4. phptemplate_foo() // Theme function provided by theme engine.
5. theme_foo() // 'theme_' plus the value of $form['#theme'].
else Ex: formId='exForm'; 以 formid 進行找尋呼叫
1. themes/mytheme/exForm.tpl.php // Template provided by theme.
2. formexample/exForm.tpl.php // Template file provided by module.
3. mytheme_exForm() // Theme function provided by theme.
4. phptemplate_exForm() // Theme function provided by theme engine.
5. theme_exForm() // 'theme_' plus the form ID.

其他資源
Form API Reference, Form generation, FormAPI Doc, Examples,
author
系統表單運作流程
發表回應前,請先登入
Free Web Hosting