加入 新的參數設定項目 到系統參數(admin)頁面

1 篇文章 / 0 new
author
加入 新的參數設定項目 到系統參數(admin)頁面
將自己的參數設定項目整合到系統參數頁面(administer site configuration), 做法如下
選單部分 (選單內容異動後, 須 清除系統快取 一次)
//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;
}
頁面部分 $form 呈現與確認後資料處理
/**  參數表單呈現.
 * @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 內
Free Web Hosting