Drupal 你還在慢慢刻表單寫資料進 variable 嗎?試試 system_settings_form 吧

Drupal 你還在慢慢刻表單寫資料進 variable 嗎?試試 system_settings_form 吧

為何我們需要這個?


系統控制表單那是什麼東西?可以吃嗎?在這之前你必須要認識 Variable 這個模組。那麼 variable 又是什麼呢,Drupal 很多的系統設定都是以 variable 的方式存在系統後台上面,舉凡網站名稱(site name)、網站口號(slogan)、外觀(theme)設定等,這些都是以 variable 的形式儲存在後台內。

那麼話說回來,system_settings_form 跟 variable 有啥關係?作用就在於有些系統設定想要給使用者改,又不想開放這麼大的權限讓使用者亂搞,就會需要用到它了。

我該怎麼看到 variable

當我們將 variable 模組裝起來之後,要開啟附加模組 variable_admin 就可以看到儲存於後台全部的 variable 了

自定義 variable

那麼我們該如何自定義 variable 這我們就必須要撰寫自己的客製化模組了,模組的程式碼如下

/**
 * Implements hook_variable_group_info().
 */
function MYMODULE_variable_group_info()
{
    $groups['version_control'] = array(
     'title' => t('版本控制'),
     'description' => t('版本控制API'),
   );

    return $groups;
}
 /**
  * Implements hook_variable_info().
  */
 function MYMODULE_variable_info()
 {
     $variables['version']=array(
         'name' => 'version',
         'title' => t('版本號'),
         'description' => t('純文字'),
         'type' => 'string',
         'default' => '1.0.0',
         'group' => 'version_control',
     );

     $variables['version_status'] = array(
         'name' => 'version_status',
         'title' => t('版本更新狀態'),
         'description' => t('選擇版本更新狀態'),
         'default' => 'force',
         'type' => 'string',
         'group' => 'version_control',
         'token' => true,
         'element' => array(
             '#type' => 'radios',
             '#options' => array(
                 'force' => t('強制更新'),
                 'notice' => t('提醒更新'),
                 'none' => t('不用更新'),
             ),
         ),
);
     return $variables;
}

我自己定義了一個群組拿來裝 版本號版本更新狀態 這兩個變數

接著我們寫了一個表單來儲存我要的 variable 如下

function MYMODULE_form($form, &$form_state){
    $form['version'] = array(

      '#type' => 'textfield',

      '#title' => t('版本號'),

      '#default_value' => variable_get('version'),

      '#size' => 30,

      '#maxlength' => 128,

      '#required' => TRUE,

    );
 $form['version_status'] = array(
     '#type' => 'radios',
   '#title' => t('更新狀態'),
   '#default_value' => variable_get('version_status'),
   '#options' => array(
       'force' => t('強制更新'),
       'notice' => t('提醒更新'),
       'none' => t('不用更新'),
   ),
    '#required' => TRUE,
 );

    return system_settings_form($form);
}

直接使用 system_settings_form 將值直接寫進 variable 內

要注意 $form 的陣列 key 需要與 variable 名稱相同

這樣就結束了…蛤!?

省略掉之後的 submit 有沒有覺得這樣超快的,如果單純只要將值寫入 variable 就用 system_settings_form 就可以囉。

參考資料

function system_settings_form
Creating the configuration form