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