Виджет многозначной формы в форме настроек системы

Я создаю форму для страницы конфигурации модулей. Последняя строка обратного вызова формы следующая:

return system_settings_from($form);

Я хочу добавить текстовое поле в форму, но я хочу иметь возможность вводить несколько полей в поле, используя тот же вид, который вы получаете, когда вручную создаете поле этого типа (где мощность> 1), где вы получаете текстовое поле с кнопкой «добавить другой элемент».

Как я могу использовать этот вид виджетов в форме для страницы конфигурации модуля?

6 голосов | спросил gregghz 31 J000000Tuesday12 2012, 01:12:17

1 ответ


9

Вы не сможете использовать многозначные функциональные возможности, используемые в API полей в пользовательских формах.

Однако с помощью API форм и Ajax вы должны иметь возможность создавать динамические поля формы. См. Пример Ajax в Примеры для разработчиков . То, что вы хотите достичь здесь, относительно похоже на Генерировать текстовые поля и Подробные флажки , где поля добавляются в форму на лету.

<?php
/**
 * Form manipulation through AJAX.
 */
function ajax_example_autocheckboxes($form, &$form_state) {

  // Since the form builder is called after every AJAX request, we rebuild
  // the form based on $form_state.
  $num_checkboxes = !empty($form_state['values']['howmany_select']) ? $form_state['values']['howmany_select'] : 1;

  $form['howmany_select'] = array(
    '#title' => t('How many checkboxes do you want?'),
    '#type' => 'select',
    '#options' => array(1 => 1, 2 => 2, 3 => 3, 4 => 4),
    '#default_value' => $num_checkboxes,
    '#ajax' => array(
      'callback' => 'ajax_example_autocheckboxes_callback',
      'wrapper' => 'checkboxes-div',
      'effect' => 'slide',
    ),
  );

  ...

  for ($i = 1; $i <= $num_checkboxes; $i++) {
    $form['checkboxes_fieldset']["checkbox$i"] = array(
      '#type' => 'checkbox',
      '#title' => "Checkbox $i",
    );
  }

  ...

  return $form;
}


/**
 * Callback for autocheckboxes.
 *
 * @return array
 *   Renderable array (the checkboxes fieldset)
 */
function ajax_example_autocheckboxes_callback($form, $form_state) {
  return $form['checkboxes_fieldset'];
}

Другим, быстрым решением, которое может работать (или нет) для вашего случая, является использование объекта (например, одного узла нового типа содержимого) для хранения этой конфигурации.

ответил Pere 23 rdEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 23 Sep 2014 14:54:07 +0400 2014, 14:54:07

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

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

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