динамически добавляя текстовые поля в друпи форму API - PullRequest
2 голосов
/ 05 июля 2011

Я хочу, чтобы при нажатии была добавлена ​​кнопка «Добавить больше», которую я могу добавлять динамически, текстовые поля в форме друпаль api .. Кто-нибудь может помочь с этим?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 05 июля 2011

Взгляните на Добавление динамических элементов формы с помощью AHAH .Это хорошее руководство по изучению AHAH с помощью API форм Drupal.

РЕДАКТИРОВАТЬ: Например, установите модуль Примеры для разработчиков , в нем есть пример AHAH, который вы можете использовать, чтобы помочь вам в обучении.

0 голосов
/ 29 апреля 2016

Вот пример, как решить эту проблему с помощью Ajax в Drupal 7 (если кто-то захочет, я могу также преобразовать его в Drupal 6, используя AHAH (имя до того, как он стал Ajax)).

<?php


function text_boxes_form($form, &$form_state)
{
    $number = 0;
    $addTextbox = false;

    $form['text_lists'] = array
    (
        '#tree' => true,
        '#theme' => 'my_list_theme',
        '#prefix' => '<div id="wrapper">',
        '#suffix' => '</div>',
    );

    if (array_key_exists('triggering_element', $form_state) &&
        array_key_exists('#name', $form_state['triggering_element']) &&
        $form_state['triggering_element']['#name'] == 'Add'
    ) {
        $addTextbox = true;
    }

    if (array_key_exists('values', $form_state) && array_key_exists('text_lists', $form_state['values']))
    {
        foreach ($form_state['values']['text_lists'] as $element) {
            $form['text_lists'][$number]['text'] = array(
                '#type'  => 'textfield',
            );
            $number++;
        }
    }
    if ($addTextbox) {
        $form['text_lists'][$number]['text'] = array(
            '#type'  => 'textfield',
        );
    }

    $form['add_button'] = array(
        '#type' => 'button',
        '#name' => 'Add',
        '#ajax' => array(
            'callback' => 'ajax_add_textbox_callback',
            'wrapper'  => 'wrapper',
            'method'   => 'replace',
            'effect'   => 'fade',
        ),
        '#value' => t('Add'),
    );

    return $form;
}

function ajax_add_textbox_callback($form, $form_state)
{
    return $form['text_lists'];
}

function text_boxes_menu()
{
    $items = array();

    $items['text_boxes'] = array(
        'title'           => 'Text Boxes',
        'description'     => 'Text Boxes',
        'page callback'   => 'drupal_get_form',
        'page arguments'  => array('text_boxes_form'),
        'access callback' => array(TRUE),
        'type'            => MENU_CALLBACK,
    );

    return $items;
}
...