xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Несколько одинаковых форм на одной странице

Опубликовано в

Пример вывода нескольких одинаковых форм на одной странице:

/**
 * Implements hook_menu().
 */
function modulename_menu() {
  $items = array();
 
  $items['forms'] = array(
    'title' => 'Forms',
    'page callback' => 'modulename_multiple_forms',
    'access callback' => TRUE,
  );
 
  return $items;
}
 
/**
 * Page callback.
 */
function modulename_multiple_forms() {
  $build = array();
 
  for ($i = 0; $i < 3; $i++) {
    $build[] = drupal_get_form('modulename_test_form_' . $i, $i);
  }
 
  return $build;
}
 
/**
 * Implements hook_forms().
 */
function modulename_forms($form_id, $args) {
  $forms = array();
 
  if (strpos($form_id, 'modulename_test_form_') === 0) {
    $forms[$form_id] = array(
      'callback' => 'modulename_test_form',
    );
  }
 
  return $forms;
}
 
/**
 * Form builder.
 */
function modulename_test_form($form, &$form_state, $i) {
  ...
}
 
/**
 * Form submit callback.
 */
function modulename_test_form_submit($form, &$form_state) {
  ...
}

Основное здесь это реализация хука hook_forms(), с помощью которого мапятся формы с разными form_id на один form builder.

Написанное актуально для Drupal 7
Похожие записи

Комментарии RSS

В D6 было примерно так же :) http://graker.ru/news/2009/09/19/sozdanie_neskolkikh_odinakovykh_form_na... Сколько лет прошло, ужас!

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании