Как я могу получить данные? (Drupal 6.x) - PullRequest
1 голос
/ 16 ноября 2010

У меня есть эта форма, которая принимает ввод пользователя.Что мне нравится делать, так это то, что, основываясь на этом пользовательском вводе, я бы хотел получить данные и отобразить их обратно пользователю.

До сих пор я реализовал 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);
}

Спасибо большое

1 Ответ

1 голос
/ 16 ноября 2010

Ваш метод там кажется немного сложным.Когда я делаю системы с формой, я склонен делать это таким образом.В вашем 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 и вызвать ее на странице, где вы хотитечтобы получить данные.

...