2010-11-06 210 views
0

我读过Drupal API表单文档,但有些东西我只是没有得到。

这可能很简单,但我无法找到如何显示表单提交后提交的值。Drupal表单API - 提交时显示表单值

*编辑的代码

<?php 

function createForm_enigmaFilters($form_state) { 
    $form = array(); 

    $form['#submit'][] = 'createForm_enigmaFilters_submit'; 

    $form['list'] = array(
     '#type' => 'markup', 
     '#prefix' => '<ul id="enigmaFilters">', 
     '#suffix' => '</ul>', 
    ); 

    $form['list']['startDate'] = array(
     '#id' => 'txtStartDate', 
     '#weight' => '0', 
     '#type' => 'textfield', 
     '#size' => '20', 
     '#title' => 'Date de début', 
     '#prefix' => '<li>', 
     '#suffix' => '</li>', 
    ); 

    $form['list']['endDate'] = array(
     '#id' => 'txtEndDate', 
     '#weight' => '1', 
     '#type' => 'textfield', 
     '#size' => '20', 
     '#title' => 'Date de fin', 
     '#prefix' => '<li>', 
     '#suffix' => '</li>', 
    ); 

    $form['list']['enigmaName'] = array(
     '#id' => 'txtEnigmaTitle', 
     '#weight' => '2', 
     '#type' => 'textfield', 
     '#size' => '100', 
     '#title' => 'Nom des énigmes', 
     '#prefix' => '<li>', 
     '#suffix' => '</li>', 
    ); 

    $form['list']['lstAnswers'] = array(
     '#id' => 'lstAnswers', 
     '#weight' => '3', 
     '#default_value' => 'Uniquement les bonnes', 
     '#key_type' => 'associative', 
     '#type' => 'select', 
     '#options' => array(
      'Toutes les réponses' => 'Toutes les réponses', 
      'Uniquement les bonnes' => 'Uniquement les bonnes', 
     ), 
     '#multiple_toggle' => '1', 
     '#title' => 'Réponses', 
     '#prefix' => '<li>', 
     '#suffix' => '</li>', 
    ); 

    $form['list']['promotionYear'] = array(
     '#id' => 'txtPromotionYear', 
     '#weight' => '4', 
     '#type' => 'textfield', 
     '#size' => '40', 
     '#title' => 'Année de promotion', 
     '#prefix' => '<li>', 
     '#suffix' => '</li>', 
    ); 

    $form['list']['submit'] = array(
     '#id' => 'lnkApplyFilters', 
     '#weight' => '5', 
     '#type' => 'submit', 
     '#value' => t('Rechercher'), 
     '#prefix' => '<li>', 
     '#suffix' => '</li>', 
    ); 

    return $form; 
} 

function createForm_enigmaFilters_submit($form, &$form_state) { 
    echo $form_state['values']['startDate']; 
    echo $form_state['values']['endDate']; 
    echo $form_state['values']['enigmaName']; 
    echo $form_state['values']['lstAnswers']; 
    echo $form_state['values']['promotionYear']; 
} 

echo drupal_get_form('createForm_enigmaFilters'); 

?> 
+0

你的输出是什么?尝试使用print_r($ myform)。 – hummingBird 2010-11-06 16:27:15

回答

1

据我所知,你不会看到这个输出(虽然它会暂时存在),因为表单会在调用提交处理程序后重定向到同一页面 - 如果没有,你会看到因为您在提交处理程序中打印表单以及在第一个地方打印它的位置,因此会形成两次表单!

我建议你失去了

echo drupal_get_form('createForm_enigmaFilters'); 

并更换您的其他呼叫呼应drupal_set_message,如:

drupal_set_message('start date: '.$form_state['values']['startDate']); 

这将意味着你的系统会显示下一次页面实际上是显示 - 即在提交挂钩被调用之后。

让我知道,如果这是令人困惑/无法正常工作:)

+0

drupal_set_message很棒,谢谢!不过,我认为我不能在我的情况下使用它。 我想使用表单的输入作为动态SQL查询的过滤器。这样,在提交回调函数中,我会将提交的值作为参数调用我的自定义BuildAndDisplay(startdate,endate等)函数,并在重新加载时显示查询结果。想一想我该怎么做?谢谢你的帮助,非常感谢! – 2010-11-06 18:56:43

+0

好的,drupal_set_message只是为了显示值,所以你可以看到他们被正确提交。为了使页面显示结果,您通常需要重定向到另一个页面,该页面会显示您的查询和代码以构建显示。所以你可以把类似drupal_goto('mypage /'。form_state ['values'] ['startDate'] ...)。有一个谷歌。虽然听起来好像意见可能是你前进的方向,但现在我知道更多。 – hookd 2010-11-06 19:09:29

+0

很酷我会试试这个。每个人都告诉我视图应该是要走的路,而且我知道,但我非常初学,因此无法创建视图来返回与我的复杂SQL查询相同的视图。但我猜这是另一个故事。再次感谢! – 2010-11-06 19:27:23

0

drupal_get_form应该叫createMyForm。

对于createMyForm_submit工作,你需要做的

$form['#submit'][] = 'createMyForm_submit'; 

在您的形式。这会向表单添加回调。

但是,您还应该遵守drupal编码实践,以最大限度地提高您的API效率。

+0

'createMyForm'电话是一个错字,对此很抱歉。我使用提交回调更新了我的代码,但提交后仍未显示值。 – 2010-11-06 17:12:07

-1

我所做的只是使用ARG(x),其中x是任何序列中的文件夹编号为。但这可能并不总是理想的。