Отключить вертикальные вкладки по типу контента или роли пользователя

10

Некоторые пользователи могут иметь возможность редактировать только один из наборов полей, который отображается на вертикальных вкладках в форме редактирования узла. В таком случае использование вертикальных вкладок выглядит довольно глупо, поскольку есть только одна вертикальная вкладка на выбор. Смотрите скриншот:

Скриншот

Итак, возможно ли отключить вертикальные вкладки по роли пользователя? Или, кроме этого, отключить их вообще для определенных типов контента? Для моего случая использования я просто хочу, чтобы Местоположение не отображалось на вертикальных вкладках.

Я попробовал Renderable Fields и Field Group вместе, но они неправильно управляли формой (думаю, глючит). Упорядочить поля нельзя выделить вертикальные вкладки.

сойка
источник
Вы когда-нибудь это исправляли? Попытка сделать то же самое с вкладкой продукта Ubercart.
Ди

Ответы:

7

Есть несколько способов сделать это:

  1. Вы можете использовать модуль Renderable Elements (как вы упомянули выше). Это позволяет вам регистрировать любую часть сборки в вашей установке и управлять дисплеем через пользовательский интерфейс Field. Это сделает (дополнительные) элементы доступными для существующих сущностей на формах управления / экранах отображения, или вы можете, например, зарегистрировать форму контакта и переупорядочить поля с помощью пользовательского интерфейса. В настоящее время отлично работает на формах, поддержка других приходит во второй итерации.

  2. Или добавьте следующее в свой пользовательский модуль:

    $config['yourcontenttype_node_form'] = FALSE;
    variable_set('vertical_tabs_forms', $config);
  3. Модуль песочницы, который отключает вертикальные вкладки

Вот этот основной вопрос, который относится к этому.


источник
Как я сказал в этом вопросе, Renderable Elements не работает для меня. Он все еще находится в стадии альфа, и есть известная ошибка с Location. Так что это не работает для моей ситуации. В противном случае, да, я думаю, это будет работать. Если в будущем эта ошибка будет исправлена, Renderable Elements, вероятно, будет лучшим способом решения этой проблемы.
Джей
извините, я просто просмотрел ваш вопрос и полностью пропустил вашу ссылку на модуль визуализируемых элементов. При этом версия для разработчиков работает как шарм. Дай что-нибудь.
Хмм хорошо. Я попробую использовать версию dev, если нет других альтернатив. Оставив это открытым пока.
Джей
Я изменил свой ответ выше с большим количеством опций.
1
Вы правы. Я только что попробовал, и это не работает в D7, как это было в D6. К сожалению, если визуализируемые элементы не работают и вам не нравится ваш собственный модуль или модуль песочницы, я не уверен, что еще.
6

Вы также можете использовать проверку #access, чтобы люди не видели вертикальные вкладки.

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

Просто добавьте это к изменению формы хука или между загрузкой и отображением формы. После этого вы можете вызвать render ($ 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 идентификатор вашей формы.


Вы также можете отключить вертикальные поля только для пользователей, которые НЕ имеют роли администратора :

/**
 * 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 песочнице модуля «s: # 2080739: Упрощает метод отключения вкладки Вертикально только с изменяя $form['additional_settings']['#type']к'fieldset' .

Sk8erPeter
источник
Отличное решение, @ Sk8erPeter. Интересно, возможно ли скрыть дополнительные настройки без установки '#access' = FALSE, так как при этом теряются значения, которые будут установлены настройками по умолчанию, такими как псевдоним URL и опубликованный статус.
Jav
0

Элементы с возможностью рендеринга в настоящее время не поддерживаются, и на странице проекта признается, что они конфликтуют с некоторыми другими добавленными модулями, поэтому я бы не стал полагаться на это для рабочих сайтов.

Вопрос о том, как полностью отключить вертикальные вкладки, решается в этой теме .

Dripman создал простой модуль песочницы для полного отключения вертикальных вкладок.

В зависимости от вашего желаемого уровня взаимодействия с кодированием, модуль Dripman должен быть легко настраиваемым, чтобы быть избирательным на основе полей / ролей.

Извиняюсь за совпадение с кратким ответом @nicoz

Автопоэтическая
источник
0

Вы можете использовать модуль Vertical Tabs Visibility .

Этот модуль помогает управлять видимостью вертикальных вкладок в формах добавления / редактирования типов контента.

Для управления видимостью вертикальных вкладок в формах добавления / редактирования контента. просто зайдите на /admin/config/user-interface/vertical-tabs-visibility страницу и выберите типы контента. Вертикальные вкладки в форме добавления / редактирования узла будут отключены для проверенных типов контента.

В данный момент модуль находится в песочнице

Мильковский
источник
0

В моем случае я пытался отключить вертикальные вкладки, применяемые в разделе « Параметры публикации » в форме редактирования узла (поскольку это был единственный набор полей, к которому у определенного набора пользователей есть доступ):

// 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`.

tyler.frankenstein
источник