【问题标题】:dynamically adding text boxes in drupal form api在drupal表单api中动态添加文本框
【发布时间】:2011-07-05 12:05:05
【问题描述】:

我想在点击时添加更多按钮,我可以动态添加,drupal 表单 api 中的文本框..有人可以帮忙吗?

提前致谢

【问题讨论】:

    标签: api forms drupal ahah


    【解决方案1】:

    看看Adding dynamic form elements using AHAH。这是使用 Drupal 的表单 API 学习 AHAH 的好指南。

    编辑:例如,安装 Examples for Developers module,它有一个 AHAH 示例,您可以使用它来帮助您学习。

    【讨论】:

    • 你能举个例子解释一下吗?我在两者之间的某个地方感到震惊
    • 谢谢。那真的很有帮助。但我现在面临的主要问题是这些值没有被保存并且每次都被刷新。
    • 嘿,是的。我自己解决了。谢谢.. :) 需要进行微调,终于成功了!! :)
    • 嗨,我遇到了和你一样的问题。您能否提供有关您用于解决此问题的解决方案的更多详细信息。
    【解决方案2】:

    这是一个如何在 Drupal 7 中使用 Ajax 解决此问题的示例(如果有人愿意,我也可以使用 AHAH(成为 Ajax 之前的名称)将其转换为 Drupal 6)。

    <?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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      相关资源
      最近更新 更多