ผมเขียนวิธีการแก้ปัญหาที่เป็นไปได้ง่ายในหัวข้อที่กล่าวถึงแล้ว: 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);
}
}
แน่นอนว่าทั้งหมดใช้แทนชื่อMYMODULEORTHEMENAME
โมดูลหรือธีมของคุณเอง (หลังในtemplate.php
ไฟล์) และmy_form_id
เป็น 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โมดูล Sandbox 's: # 2080739: ลดความซับซ้อนของวิธีการปิดการใช้งานแท็บแนวตั้งที่มีเพียงการเปลี่ยนแปลงที่$form['additional_settings']['#type']
'fieldset'
จะ