將自己的參數設定項目整合到系統參數頁面(administer site configuration), 做法如下
選單部分 (選單內容異動後, 須 清除系統快取 一次)
► FORM-ID_validate() //驗證處理
選單部分 (選單內容異動後, 須 清除系統快取 一次)
頁面部分 $form 呈現與確認後資料處理//Implementation of hook_menu(). function mypara_menu() { $items['admin/config/mypara'] = array(//註冊到 系統參數管理 頁面 'title' => '我的參數設定', 'description' => 'Adjust paramater options.', 'position' => 'right', 'weight' => -5, 'page callback' => 'system_admin_menu_block_page', 'access arguments' => array('administer site configuration'), 'file' => 'system.admin.inc', 'file path' => drupal_get_path('module', 'system'), ); $items['admin/config/mypara/settings'] = array(//區塊內 項目選單 'title' => '參數資料設定', 'description' => '變更參數資料.', 'page callback' => 'drupal_get_form', 'page arguments' => array('mypara_admin_settings'), //指定 FORM-ID, call同名函式來設定$form項目 'access arguments' => array('administer site configuration'), 'type' => MENU_NORMAL_ITEM, 'file' => 'my.admin.inc', // func mypara_admin_settings() 所在位置 ); return $items; }
按下儲存後, 處理流程:/** 參數表單呈現. * @ingroup forms * @see system_settings_form(). */ function mypara_admin_settings() { // 取得 node types 陣列, with internal names as keys and "friendly names" as values. E.g., // array('page' => 'Page', 'story' => 'Story') $types = node_type_get_types(); foreach ($types as $node_type) { $options[$node_type->type] = $node_type->name; } $form['annotate_node_types'] = array( '#type' => 'checkboxes', '#title' => t('Users may these content types'), '#options' => $options, '#default_value' => variable_get('use_node_types'), '#description' => t('A text field will be available on these content types to make user-specific notes.'), ); ... //設定 $form['#submit'] 時, 在完成驗證(XXX_validate)無誤後, 會繼續呼叫指定函式 //若無特殊目的, 驗證,處理均在 XXX_validate 函式內直接完成 //$form['#submit'][] = 'my_submit';//指定時須存在 function my_submit($form, $form_state) {} return system_settings_form($form); } /** * 表單按下確認後處理, func名稱固定為 * 選單 'page arguments' => array('mypara_admin_settings') 指定的 名稱+_validate */ function mypara_admin_settings_validate($form, $form_state) { foreach ($form_state['values']['annotate_node_types'] as $key => $value) { // 資料處理 } // end of foreach }
► FORM-ID_validate() //驗證處理
► my_submit() //有指定 $form['#submit'][] = 'my_submit' 時呼叫, 無則略過, 慣用名稱為 FORM-ID_submit
► system_settings_form_submit() //儲存 form 輸入的資料到 variables table 內