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