Drupal で、自分の作ったモジュールで設定画面を出して各種パラメータなど固有の値の設定をさせたい場合があるだろう。ここでは「hook」というモジュールを例に考えてみよう。設定画面を
https://yourdomain.com/admin/settings/hook/ にアクセスしたときに表示させたい場合には、以下のようにする(「hook」とあるところは、「yourmodulename」となるので、適宜置換すること)。
<?php
define('PRIVILEGE_ADMIN' , 'administer server settings');
define('PRIVILEGE_CREATE', 'create hook's own forms and docs');
define('PRIVILEGE_VIEW' , 'view hook's own forms and docs');
define('PRIVILEGE_EDIT' , 'edit hook's own forms and docs');
function hook_perm() {
return array(
<strong><font color="orange">PRIVILEGE_ADMIN</font></strong>,
PRIVILEGE_CREATE,
PRIVILEGE_VIEW,
PRIVILEGE_EDIT
);
}
function hook_menu($may_cache) {
$items = array();
if ($may_cache) {
...
$items[] = array(
'type' => MENU_NORMAL_ITEM,
'path' => '<strong>admin/settings/hook</strong>',
'title' => t('hook Settings'),
'access' => user_access(<strong><font color="orange">PRIVILEGE_ADMIN</font></strong>),
'callback' => 'drupal_get_form',
'callback arguments' => '<strong><font color="blue">hook_admin</font></strong>',
'description' => 'Configure hook settings'
);
...
}
return $items;
}
function <strong><font color="blue">hook_admin</font></strong>() {
// ※初回アクセス時は variable_get のデフォルト値(https://yourdomain.com/)が入る。
$form['hook_url'] = array(
'#type' => 'textfield',
'#title' => t('URL'),
'#default_value' => <strong>variable_get</strong>('<strong><font color="red">hook_url</font></strong>', 'https://yourdomain.com/'),
'#size' => 255,
'#maxlength' => 255,
'#weight' => -2,
'#required' => TRUE
);
// ※初回アクセス時は variable_get のデフォルト値(0)が入る。
$form['hook_check'] = array(
'#type' => 'checkbox',
'#title' => t('Check'),
'#default_value' => <strong>variable_get</strong>('<strong><font color="red">hook_check</font></strong>', 0),
'#weight' => 0,
'#required' => FALSE
);
// type を fieldset にすると以下、username、password、hostname を
// グループ化することができる。
$form['<strong><font color="red">hook_login</font></strong>'] = array(
'#type' => 'fieldset',
'#title' => t('Login Information'),
'#tree' => TRUE
);
$login = <strong>variable_get</strong>('<strong><font color="red">hook_login</font></strong>', NULL),
$form['<strong><font color="red">hook_login</font></strong>']['<strong><font color="green">hostname</font></strong>'] = array(
'#type' => 'textfield',
'#title' => t('Server Name'),
'#default_value' => $login['<strong><font color="green">hostname</font></strong>'] ? $login['<strong><font color="green">hostname</font></strong>'] : 'localhost',
'#size' => 64,
'#maxlength' => 255,
'#weight' => -8,
'#required' => TRUE
);
$form['<strong><font color="red">hook_login</font></strong>']['<strong><font color="green">username</font></strong>'] = array(
'#type' => 'textfield',
'#title' => t('Username'),
'#default_value' => $login['<strong><font color="green">username</font></strong>'] ? $login['<strong><font color="green">username</font></strong>'] : 'admin',
'#size' => 32,
'#maxlength' => 32,
'#weight' => -6,
'#required' => TRUE
);
$form['<strong><font color="red">hook_login</font></strong>']['<strong><font color="green">password</font></strong>'] = array(
'#type' => 'password',
'#title' => t('Password'),
'#default_value' => $login['<strong><font color="green">password</font></strong>'] ? $login['<strong><font color="green">password</font></strong>'] : 'password',
'#size' => 32,
'#maxlength' => 32,
'#weight' => -4,
'#required' => TRUE
);
return system_settings_form($form);
}
function your_function() {
// 通常の設定値は以下のようになる。
$url = <strong>variable_get</strong>('<strong><font color="red">hook_url</font></strong>' , 'https://yourdomain.com/');
$isCheck = <strong>variable_get</strong>('<strong><font color="red">hook_check</font></strong>', 0);
// variable_get('キー', 'デフォルト値') で値を取得して
$login = <strong>variable_get</strong>('<strong><font color="red">hook_login</font></strong>', NULL);
// 設定画面でグループ化した変数はハッシュテーブル(array)でアクセス可能
$username = $login['<strong><font color="green">username</font></strong>'];
$password = $login['<strong><font color="green">password</font></strong>'];
$hostname = $login['<strong><font color="green">hostname</font></strong>'];
...
}
?>
トラックバック URL:
https://perltips.twinkle.cc/trackback/202