私はすでに述べたスレッドで可能な簡単な解決策を書きました:https : //drupal.org/node/1048644#comment-7822687。便宜上、ここに貼り付けます。
$form['additional_settings']['#type']
変数の値を'fieldset'
に等しい場合は、hook_form_alter()またはhook_form_FORM_ID_alter()の実装で変数の値を変更するだけで、フォームの垂直タブを無効にする簡単な方法があります'vertical_tabs'
。
アクセス設定を変更したり、$form
アレイ全体を再帰的にウォークしたりする必要はありません。後者は不必要に多くのリソースを消費します。
(Drupal 7.23でテスト済み。)
/**
* Disable Vertical tabs on a form with simply changing the value of $form['additional_settings']['#type']
* @see https://drupal.org/node/1048644
*/
function form_disable_vertical_tabs(&$form){
// originally $form['additional_settings']['#type'] equals to 'vertical_tabs'
if(isset($form['additional_settings']['#type']) && ($form['additional_settings']['#type'] === 'vertical_tabs')){
$form['additional_settings']['#type'] = 'fieldset';
}
}
/**
* Implements hook_form_alter().
*/
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {
if($form_id == 'my_form_id'){
// disable vertical tabs for this form
form_disable_vertical_tabs($form);
}
}
もちろん、これですべてです。独自のモジュールまたはテーマの名前(ファイル内の後者)とフォームのID に置き換えMYMODULEORTHEMENAME
てください。template.php
my_form_id
管理者の役割を持たないユーザーに対してのみ、垂直フィールドを無効にすることもできます。
/**
* Implements hook_form_alter().
*/
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {
global $user;
$is_administrator = in_array('administrator', array_values($user->roles));
if($form_id == 'my_form_id'){
// if $user does NOT have the administrator role.
if (!$is_administrator) {
// disable vertical tabs for this form
form_disable_vertical_tabs($form);
}
}
}
誰かが興味を持っている場合は、パッチ(上記と同じ)をDripmanのサンドボックスモジュールに添付し$form['additional_settings']['#type']
ました'fieldset'
。