2010-11-16 64 views
1

我有这种接受用户输入的表单。我喜欢做的是,基于用户输入,我想检索数据并将其显示回给用户。我如何获取数据?(Drupal 6.x)

到目前为止,我已经实现了hook_menu并注册了表单的各自url,并实现了提交按钮的“#submit”属性引用的提交功能。我也实现了数据检索代码,并且效果很好。

这是我的问题 - 我不知道如何显示检索到的数据。我尝试了几种方法试图找到解决方案。

首先,用主题函数,希望打印它的返回值会显示数据。其次,使用新注册的url设置表单数组的“#action”元素,因为我认为使用与表单相同的url只会导致drupal返回该表单,而不是我的数据。因此,我创建了一个静态变量并将所有检索到的数据存储在其中;这是在提交函数内完成的。当我在菜单回调中检查这个变量时,这个变量没有被设置。

总之我的问题,形式有不同的访问URL不是形式提交,如

Form url – http://....?q=mymodule/form 
Submit url (value of ”#action”) – http://....?q=mymodule/execute 

,我已经设置内提交功能,静态变量的数据是不是在菜单回调可用。我如何使数据可用?

这里是我的代码部分 -

static $retrieved_data; 

function mymodule_menu() { 
    $command = array(); 

    $command['mymodule/form'] = array(
     'title' => 'user input', 
     'page callback' => 'response', 
     'page arguments' => array('form'), 
     'access arguments' => array('access content'), 
     'type' => MENU_CALLBACK, 
    ); 

    $command['mymodule/execute'] = array(
     'title' => 'Search', 
     'page callback' => 'response', 
     'page arguments' => array('execute'), 
     'access arguments' => array('access content'), 
     'type' => MENU_CALLBACK, 
    ); 

    return $command; 
} 

function _response($paRequest){ 

    switch($paRequest){ 
     case "form": 
     return drupal_get_form("_myform"); 
     break; 

     case "execute": 
     return $retrieved_data; 
     break; 
    } 
} 

function _myform(&$form_state) { 
    $form['#action'] = url($base_path)."?mymodule/execute"; 
    ..... 
    $form['submit'] = array(
     '#type' => 'submit', 
     '#value' => t('Submit'), 
     '#submit' => array('_data_retrieve'),  
    ); 
    return $form; 
} 

function _data_retrieve($form, &$form_state){ 
    /*data retrieval code*/ 
    ........................ 
    $retrieved_data = db_fetch_object($result); 
} 

多谢

回答

1

你的方法似乎有点复杂那里。当我用表单制作系统时,我倾向于这样做。在你的MYMODULE_menu()我会改变'page arguments' => array('form'),'page arguments' => array('NAME_OF_FORM_FUNCTION'),在这种情况下NAME_OF_FORM_FUNCTION将_myform。我会将它重命名为MYMODULE_MYFORMNAME。

然后创建一个函数:

MYMODULE_MYFORMNAME_SUBMIT($form, &$state) { 
    // Enter code here to save the data from the form that is stored in $state 
    // to the database with an SQL query or a node_save($node) if you are 
    // creating a node. 
} 

之后,你可以在你的_data_retrieve功能从数据库中检索数据并调用页面上,你要检索的数据。

+0

我得到了同样的建议,使用数据库在drupal支持中存储表单数据。我想我可以通过静态变量来解决数据库问题,这样就不会有数据库访问的开销。我想不是。感谢您的建议。我会看看它是如何工作的,并回到你身边。 – Andrew 2010-11-16 14:10:24