it-swarm.asia

قم بتعطيل علامات التبويب الرأسية حسب نوع المحتوى أو دور المستخدم

قد يكون لدى بعض المستخدمين القدرة فقط على تحرير إحدى مجموعات الحقول التي تظهر في علامات تبويب رأسية في نموذج تحرير العقدة. في مثل هذه الحالة ، يبدو من السخف استخدام علامات تبويب عمودية نظرًا لوجود علامة تبويب عمودية واحدة فقط للاختيار من بينها. انظر لقطة الشاشة:

screenshot

لذا ، هل من الممكن تعطيل علامات التبويب الرأسية حسب دور المستخدم؟ أو ، منع ذلك ، تعطيلها تمامًا لأنواع معينة من المحتوى؟ بالنسبة لحالة الاستخدام ، أريد فقط ألا يتم عرض الموقع في علامات تبويب عمودية.

لقد جربت Renderable Fields و Field Group معًا ولكنهم أداروا النموذج بشكل غير صحيح (على ما يبدو عربات التي تجرها الدواب). لا يمكن لتنظيم الحقول فصل علامات التبويب الرأسية.

10
Jay

هناك طرق قليلة للقيام بذلك:

  1. يمكنك استخدام Renderable Elements الوحدة (كما ذكرت أعلاه). تمكنك من تسجيل أي جزء من البناء على التثبيت وإدارة الشاشة من خلال واجهة المستخدم الميدانية. سيجعل العناصر (الإضافية) متاحة للكيانات الموجودة في إدارة النماذج/شاشات العرض أو يمكنك على سبيل المثال تسجيل نموذج الاتصال وإعادة ترتيب الحقول من خلال واجهة المستخدم الميدانية. يعمل بشكل جيد حاليًا على النماذج ، يأتي دعم الآخر في تكرار ثانٍ.

  2. أو أضف ما يلي إلى وحدتك المخصصة:

    $config['yourcontenttype_node_form'] = FALSE;
    variable_set('vertical_tabs_forms', $config);
    
  3. A sandbox module يعطل علامات التبويب الرأسية

هذا هو المشكلة الأساسية التي تشير إلى هذا.

7
user842

يمكنك أيضًا استخدام علامة #access لمنع الأشخاص من رؤية علامات التبويب الرأسية.

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

ما عليك سوى إضافة ذلك إلى شكل خطاف تغيير أو بين تحميل وعرض النموذج. بعد ذلك يمكنك استدعاء تقديم ($ form) للحصول على الترميز.

6
Derek Webb

لقد كتبت حلاً بسيطًا ومحتملًا في الخيط المذكور مسبقًا: 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 file) و و 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 : # 2080739: تبسيط طريقة تعطيل علامات التبويب الرأسية بمجرد تغيير $form['additional_settings']['#type'] إلى 'fieldset' .

2
Sk8erPeter

العناصر القابلة للعرض غير مدعومة حاليًا ، وتقر في صفحة المشروع بأنها تتعارض مع بعض الوحدات المساهمة الأخرى لذا لن أعتمد عليها في مواقع الإنتاج.

يتم تناول مسألة كيفية تعطيل علامات التبويب الرأسية تمامًا في هذا الموضوع .

أنشأ Dripman وحدة حماية بسيطة لتعطيل علامات التبويب الرأسية تمامًا.

اعتمادًا على المستوى المطلوب من التفاعل مع الترميز ، يجب أن تكون وحدة Dripman قابلة للتخصيص بسهولة لتكون انتقائية على أساس الحقول/الأدوار.

نعتذر عن التداخل مع إجابة مختصرة بواسطةnicoz

0
autopoietic

يمكنك استخدام الوحدة النمطية رؤية علامات التبويب الرأسية .

تساعد هذه الوحدة على إدارة رؤية علامات التبويب الرأسية في نوع المحتوى إضافة/تعديل النماذج.

لإدارة رؤية علامات التبويب الرأسية في نوع المحتوى ، قم بإضافة/تحرير النماذج. ما عليك سوى زيارة /admin/config/user-interface/vertical-tabs-visibility صفحة واختيار أنواع المحتويات. سيتم تعطيل علامات التبويب الرأسية في نموذج إضافة/تحرير العقدة لأنواع المحتوى المحددة.

الوحدة النمطية حاليًا في وضع الحماية

0
milkovsky

بالنسبة لحالة الاستخدام الخاصة بي ، كنت أحاول تعطيل علامات التبويب الرأسية التي يتم تطبيقها على خيارات النشر في نموذج تحرير العقدة (نظرًا لأن هذه كانت مجموعة الحقول الوحيدة التي يمكن لمجموعة معينة من المستخدمين الوصول إليها):

// 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 to FALSE , in my case that was the options`.

0
tyler.frankenstein