ปิดใช้งานแท็บแนวตั้งตามประเภทเนื้อหาหรือบทบาทของผู้ใช้


10

ผู้ใช้บางคนอาจมีความสามารถในการแก้ไขหนึ่งในชุดเขตข้อมูลที่แสดงในแท็บแนวตั้งบนฟอร์มแก้ไขโหนด ในกรณีเช่นนี้ดูเหมือนว่าค่อนข้างโง่ที่จะใช้แท็บแนวตั้งเนื่องจากมีแท็บแนวตั้งเพียงแท็บเดียวให้เลือก ดูภาพหน้าจอ:

ภาพหน้าจอ

ดังนั้นจึงเป็นไปได้ที่จะปิดการใช้งานแท็บแนวตั้งตามบทบาทของผู้ใช้หรือไม่ หรือว่ามีการปิดใช้งานพวกเขาพร้อมกันสำหรับเนื้อหาบางประเภทหรือไม่ สำหรับกรณีการใช้งานของฉันฉันต้องการให้ตำแหน่งไม่แสดงในแท็บแนวตั้ง

ฉันลอง Renderable Fields และ Field Group ด้วยกัน แต่พวกเขาจัดการแบบฟอร์มไม่ถูกต้อง (buggy ฉันคิดว่า) จัดเรียงเขตข้อมูลไม่สามารถแยกแท็บแนวตั้งออกได้


คุณเคยแก้ไขไหม พยายามทำเช่นเดียวกันกับแท็บผลิตภัณฑ์ ubercart
Dee

คำตอบ:


7

มีสองสามวิธีในการทำสิ่งนี้:

  1. คุณสามารถใช้โมดูลองค์ประกอบที่แสดงผลได้ (ดังที่คุณกล่าวไว้ข้างต้น) ช่วยให้คุณสามารถลงทะเบียนชิ้นส่วนของการสร้างใด ๆ ในการติดตั้งและจัดการการแสดงผลผ่าน Field UI มันจะทำให้องค์ประกอบ (เพิ่มเติม) พร้อมใช้งานของเอนทิตีที่มีอยู่บนหน้าจอจัดการฟอร์ม / จอแสดงผลหรือตัวอย่างเช่นคุณสามารถลงทะเบียนแบบฟอร์มการติดต่อและจัดเรียงฟิลด์ผ่าน UI ฟิลด์ ทำงานได้ดีในรูปแบบในปัจจุบันการสนับสนุนสำหรับคนอื่นกำลังมาในการทำซ้ำที่สอง

  2. หรือเพิ่มสิ่งต่อไปนี้ในโมดูลที่คุณกำหนดเอง:

    $config['yourcontenttype_node_form'] = FALSE;
    variable_set('vertical_tabs_forms', $config);
  3. โมดูล Sandboxที่ปิดใช้งานแท็บแนวตั้ง

นี่คือปัญหาหลักที่อ้างถึงนี้


อย่างที่ฉันพูดในคำถามองค์ประกอบที่ทำให้แสดงผลไม่ได้สำหรับฉัน มันยังอยู่ในช่วงอัลฟาและมีข้อผิดพลาดที่ทราบตำแหน่ง ดังนั้นจึงไม่ได้ผลกับสถานการณ์ของฉัน มิฉะนั้นฉันคิดว่ามันจะใช้ได้ หากในอนาคตที่ข้อผิดพลาดได้รับการแก้ไของค์ประกอบ Renderable อาจเป็นวิธีที่ดีที่สุดที่จะไปเกี่ยวกับเรื่องนี้
Jay

ขออภัยฉันแค่อ่านคำถามของคุณและพลาดการอ้างอิงไปยังโมดูลองค์ประกอบที่สามารถแสดงผลได้อย่างสมบูรณ์ ที่ถูกกล่าวว่ารุ่น dev ทำงานเหมือนมีเสน่ห์ ให้มันไป

อืมโอเค. ฉันจะลองใช้เวอร์ชัน dev หากไม่มีทางเลือกอื่น ปล่อยให้เปิดไว้ก่อนแล้ว
Jay

ฉันได้แก้ไขคำตอบของฉันด้านบนด้วยตัวเลือกเพิ่มเติม

1
คุณพูดถูก ฉันเพิ่งลองและไม่สามารถใช้งานได้ใน D7 เช่นเดียวกับใน D6 น่าเสียดายที่องค์ประกอบที่สามารถแสดงผลได้ไม่ทำงานและคุณไม่คุ้นเคยกับโมดูลของคุณเองหรือใช้โมดูลแซนด์บ็อกซ์ฉันไม่แน่ใจว่ามีอะไรอีก

6

นอกจากนี้คุณยังสามารถใช้การตรวจสอบ #access เพื่อป้องกันไม่ให้คนอื่นเห็นแท็บแนวตั้ง

$form['additional_settings']['#access'] = FALSE;

เพียงแค่เพิ่มลงในแบบฟอร์มขอแก้ไขหรือในระหว่างการโหลดและการแสดงผลของแบบฟอร์ม หลังจากนั้นคุณสามารถเรียกการเรนเดอร์ ($ form) เพื่อรับมาร์กอัป


2

ผมเขียนวิธีการแก้ปัญหาที่เป็นไปได้ง่ายในหัวข้อที่กล่าวถึงแล้ว: 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'จะ


ทางออกที่ดีเลิศ @ Sk8erPeter ฉันสงสัยว่าอาจซ่อนการตั้งค่าเพิ่มเติมโดยไม่ตั้งค่า '#access' = FALSE เนื่องจากสูญเสียค่าที่จะถูกตั้งค่าโดยการตั้งค่าเริ่มต้นเช่นนามแฝง URL และสถานะที่เผยแพร่
Jav

0

องค์ประกอบที่สามารถแสดงผลไม่ได้รับการสนับสนุนในปัจจุบันและรับทราบในหน้าโครงการว่ามันขัดแย้งกับโมดูลที่สนับสนุนอื่น ๆ ดังนั้นฉันจะไม่พึ่งพาไซต์ที่ใช้งานจริง

คำถามของวิธีปิดใช้งานแท็บแนวตั้งทั้งหมดจะถูกจัดการในชุดข้อความนี้

Dripman ได้สร้างโมดูล sandbox ง่าย ๆเพื่อปิดการใช้งานแท็บแนวตั้งอย่างสมบูรณ์

โมดูลของ Dripman ควรปรับแต่งได้ง่ายเพื่อให้สามารถเลือกได้ขึ้นอยู่กับระดับของการมีส่วนร่วมที่คุณต้องการบนพื้นฐานของฟิลด์ / บทบาท

ขอโทษสำหรับการทับซ้อนกับคำตอบสั้น ๆ โดย @nicoz


0

คุณสามารถใช้โมดูลแนวตั้งแท็บในการมองเห็น

โมดูลนี้ช่วยในการจัดการการมองเห็นแท็บแนวตั้งบนฟอร์มเพิ่ม / แก้ไขประเภทเนื้อหา

เมื่อต้องการจัดการการมองเห็นแท็บแนวตั้งบนชนิดเนื้อหาเพิ่ม / แก้ไขฟอร์ม เพียงไปที่/admin/config/user-interface/vertical-tabs-visibility หน้าและเลือกประเภทเนื้อหา แท็บแนวตั้งที่ฟอร์มเพิ่ม / แก้ไขโหนดจะปิดใช้งานสำหรับประเภทเนื้อหาที่เลือก

โมดูลปัจจุบันอยู่ใน sandbox


0

สำหรับกรณีการใช้งานของฉันฉันพยายามที่จะปิดการใช้งานแท็บแนวตั้งที่จะนำไปใช้ในส่วนตัวเลือกการเผยแพร่บนแบบฟอร์มการแก้ไขโหนด (เนื่องจากนี่เป็น fieldset เพียงชุดเดียวที่ผู้ใช้ชุดหนึ่งสามารถเข้าถึงได้):

// Place somewhere in MYMODULE_form_alter()...
$form['additional_settings']['#type'] = 'fieldset';
$form['additional_settings']['#collapsible'] = FALSE;
$form['options']['#collapsible'] = FALSE;

สำหรับการชี้แจงคุณไม่เพียง แต่ต้องตั้งค่าadditional_settings #collapsibleเป็น FALSE องค์ประกอบใด ๆ ที่อยู่ภายในจะต้องมีองค์ประกอบ #collapsible set toFALSE , in my case that was theoptions`

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.