2010-11-16 5 views
1

У меня есть эта форма, которая принимает вход пользователя. Что мне нравится делать, основываясь на этом пользовательском вводе, я бы хотел получить данные и отобразить их обратно пользователю.Как получить данные? (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); 
} 

Благодаря кучу

ответ

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

Смежные вопросы