У меня есть эта форма, которая принимает ввод пользователя.Что мне нравится делать, так это то, что, основываясь на этом пользовательском вводе, я бы хотел получить данные и отобразить их обратно пользователю.
До сих пор я реализовал hook_menu и зарегистрировал соответствующий URL-адрес формы и реализовалфункция отправки, указанная атрибутом #submit кнопки отправки.Я также реализовал код извлечения данных и прекрасно работает.
Вот моя проблема - я не знаю, как отобразить полученные данные.Я попробовал несколько подходов, пытаясь найти решение.
Во-первых, с функцией темы, в надежде, что при выводе возвращаемого значения она отобразит данные.Во-вторых, установка элемента «#action» массива формы с недавно зарегистрированным URL-адресом, как я и думал, используя тот же URL-адрес, что и форма, заставит drupal вместо этого возвращать эту форму, а не мои данные.Итак, я создаю статическую переменную и сохраняю в ней все извлеченные данные, кстати, это делается внутри функции submit.Когда я проверил эту переменную в обратном вызове меню, эта переменная не была установлена.
Чтобы подвести итог моей проблемы, форма имеет другой 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);
}
Спасибо большое