我有这种接受用户输入的表单。我喜欢做的是,基于用户输入,我想检索数据并将其显示回给用户。我如何获取数据?(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);
}
多谢
我得到了同样的建议,使用数据库在drupal支持中存储表单数据。我想我可以通过静态变量来解决数据库问题,这样就不会有数据库访问的开销。我想不是。感谢您的建议。我会看看它是如何工作的,并回到你身边。 – Andrew 2010-11-16 14:10:24