【问题标题】:Drupal 7 FAPI- Adding form elements in validate or submit handlersDrupal 7 FAPI- 在验证或提交处理程序中添加表单元素
【发布时间】:2012-10-10 00:23:56
【问题描述】:

是否可以在 drupal 7 模块的验证或提交功能中添加额外的表单元素?以下代码有效并且图像显示在表单上:

function test1_form($form, &$form_state)
{
     $form['image']=array(
           '#markup'=>'<img src="sites/all/modules/create_ad/th.jpeg"><br/>', //replace with your own image path
     );

     $form['submit'] = array(
           '#type' => 'submit',
           '#value' => 'Submit',
     );
}

但是当我尝试在提交功能后显示图像时,如下所示,它不起作用:

function test1_form($form, &$form_state)
{
     $form['submit'] = array(
           '#type' => 'submit',
           '#value' => 'Submit',
     );
}

function test1_form_submit($form,&$form_state)
{
     $form['image']=array(
           '#markup'=>'<img src="sites/all/modules/create_ad/th.jpeg"><br/>', //replace with your own image path
     );
}

欢迎任何积极的帮助。谢谢。

【问题讨论】:

    标签: php drupal-7 drupal-modules drupal-fapi drupal-forms


    【解决方案1】:

    您可以在提交后按照多步骤表单方法在表单中添加其他字段。

    Here is a blog post 讨论了一种多步骤方法,可以为您提供一些见解。

    基本上,在您的提交函数中,您存储您的值并设置要重建的表单。然后在您的表单函数中检查这些存储的值并添加新字段(如果存在)。

    例子:

    <?php
    function test1_form($form, &$form_state)
    {
            if (isset($form_state['storage']['show-image'])){
                $form['image']=array(
                    '#markup'=>'<img src="sites/all/modules/create_ad/th.jpeg"><br/>', //replace with your own image path
                );
            }
    
         $form['submit'] = array(
                     '#type' => 'submit',
                     '#value' => 'Submit',
         );
    }
    
    function test1_form_submit($form,&$form_state)
    {
        $form_state['rebuild'] = TRUE;
        $form_state['storage']['show-image'] = true;
    }
    

    【讨论】:

    • 'show-image' 只是作为示例,所以该部分是自定义的。在 Drupal 6 中,当您想在表单重建中将数据传回时,您必须将其放入“存储”中。在 Drupal 7 中,您不必声明“存储”,因为整个 $form_state 将被保留。所以在 D7 中,它更像是一个约定,而不是一个提供的属性。 (在 Drupal 7 中,您可以在 $form_State 中提供您想要的任何自定义属性,并且应该保留它)。
    【解决方案2】:

    这是使用 Ajax 执行此操作的另一种方法。这样你就不会重新加载任何页面,因为只有图像会被加载到带有包装器 id 的 div 中。

    代码如下:

    function test_menu()
    {
        $items = array();
    
        $items['test'] = array(
            'title'           => 'test',
            'page callback'   => 'drupal_get_form',
            'page arguments'  => array('test1_form'),
            'access callback' => array(TRUE),
            'type'            => MENU_CALLBACK,
        );
    
        return $items;
    }
    
    function test1_form($form, &$form_state)
    {
        $form['submit'] = array(
            '#type'  => 'button',
            '#value' => t('Submit'),
            '#name'  => 'add',
            '#ajax'  => array(
                'callback' => 'ajax_load_picture_callback',
                'wrapper'  => 'wrapper',
                'method'   => 'replace',
                'effect'   => 'fade',
            ),
        );
    
        $form['image'] = array(
            '#markup' => '',
            '#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')
        {
            $form['image']['#markup'] ='<img src="themes/bartik/logo.png"><br/>'; //replace with your own image path
        }
    
        return $form;
    }
    
    function ajax_load_picture_callback($form, $form_state)
    {
        return $form['image'];
    }
    
    function test1_form_submit($form, &$form_state)
    {
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-21
      相关资源
      最近更新 更多