Как добавить субтитры меню к наборам полей, отображаемым в виде вертикальных вкладок?

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

$form['vertical_tabs'] = array(
    '#type' => 'vertical_tabs',
);

// * Form elements: fieldset tree.
$form['episode'] = array(
    '#title' => t('Episode details'),
    '#type' => 'fieldset',
    '#tree' => TRUE,
    '#collapsible' => TRUE,
    '#group' => 'vertical_tabs',
);

Я вижу много вертикальных вкладок с, назовем его, субтитром меню чуть ниже названия меню. Это серый текст под синим символом привязки на этом рисунке с страницы модуля vertical_tabs - верхняя часть читает «Создать новую версию»:

введите описание изображения здесь>> </p>

<p> Я ошибочно предположил, что добавление атрибута #description с моим подзаголовком меню добавит его, но просто появляется вверху содержимого табуляции полей. Кто-нибудь знает, как это делается? </p>

<p> Спасибо </p>

<p> <strong> Решение </STRONG> </p>

<p> Некоторые могут считать, что это не «правильный» способ Drupal, но это просто, не требует какого-либо кода, находится в папке «Сайты» (поэтому он не будет написан поверх обновления) и не требует редактирования любые файлы ядра. Просто немного CSS. Это то, что я сделал: </p>

<pre><code>---- +: = 1 = + ----</code></pre>

<p> Ответ Клайва (см. ниже) может быть лучшим вариантом, если вы удобно использовать JavaScipt. </p>

<p> <strong> ДРУГОЕ РЕШЕНИЕ </strong> </p>

<p> Здесь представлено решение jQuery, которое я разработал: </p>

<p> Добавьте этот файл jQuery в каталог вашего модуля, назовите его jquery.YOURFILE.js: </p>

<pre><code>---- +: = 2 = + ----</code></pre>

<p> Здесь я использовал метод <code>---- +: = 3 =: + ----</code>, но вы могли таргетировать табуляции отдельно с помощью <code>---- +: = 4 =: + ----</code>. В определении элемента формы, где вы определяете свои поля, добавьте: </p>

<pre><code>---- +: = 5 = + ----</code></pre>

<p> <strong> БОЛЬШЕ ИСТОЧНИКОВ ИНФОРМАЦИИ </strong> </p>

<p> См. модуль примеров vertical_tabs для другого способа сделать это. </p>

<p> Посмотрите также в content_types.inc и content_types.js в модуле узла. </p>

<p> Это обновление файла jQuery выше. Он использует Drupal.behaviors и метод eq. Вероятно, больше «правильно», чем выше. </p>

<pre><code>---- +: = 6 = + ----</code></pre></body></html>

6 голосов | спросил 24ma13wg 5 AMpFri, 05 Apr 2013 00:22:52 +040022Friday 2013, 00:22:52

1 ответ


2

Резюме вкладки задано с помощью JavaScript (я не думаю, что вы можете сделать это в PHP), в комментариях в misc /vertical-tabs.js:

  

Каждая вкладка может содержать сводку, которая может быть обновлена ​​другим скриптом. Для этого каждый набор полей имеет связанный «verticalTabCallback» (с jQuery.data (), прикрепленным к набору полей), который вызывается каждый раз, когда пользователь выполняет обновление элемента формы внутри области вкладок.

Узел модуля имеет хороший пример того, как это сделать, код в node.js должен быть довольно легко адаптирован для вашего собственного модуля:

Drupal.behaviors.nodeFieldsetSummaries = {
  attach: function (context) {
    $('fieldset.node-form-revision-information', context).drupalSetSummary(function (context) {
      var revisionCheckbox = $('.form-item-revision input', context);

      // Return 'New revision' if the 'Create new revision' checkbox is checked,
      // or if the checkbox doesn't exist, but the revision log does. For users
      // without the "Administer content" permission the checkbox won't appear,
      // but the revision log will if the content type is set to auto-revision.
      if (revisionCheckbox.is(':checked') || (!revisionCheckbox.length && $('.form-item-log textarea', context).length)) {
        return Drupal.t('New revision');
      }

      return Drupal.t('No revision');
    });

    ...

Я думаю, что единственное изменение PHP, которое вам нужно будет сделать, это добавить определенный класс в набор полей, чтобы JS мог его настроить:

$form['episode'] = array(
  '#title' => t('Episode details'),
  '#type' => 'fieldset',
  '#tree' => TRUE,
  '#collapsible' => TRUE,
  '#group' => 'vertical_tabs',
  '#attributes' => array('class' => array('mymodule-node-options')),
);
ответил Clive 5 AMpFri, 05 Apr 2013 00:56:39 +040056Friday 2013, 00:56:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132