Вывод результата работы формы

Главные вкладки

Аватар пользователя a.s. a.s. 25 июня 2013 в 6:31

Как вывести результат работы своей формы?

<?php
/** 
 * This function defines the URL to the page created etc.
 * See <a href="http://api.drupal.org/api/function/hook_menu/6
" title="http://api.drupal.org/api/function/hook_menu/6
" rel="nofollow">http://api.drupal.org/api/function/hook_menu/6
</a> */
function event_menu() {
  
$items = array();
  
$items['event/form'] = array(
    
'title' => t('Форма выбора событий по датам'),
    
'page callback' => 'event_form',
    
'access arguments' => array('access content'),
//    'description' => t('Форма для загрузки рейтинга'),
    
'type' => MENU_CALLBACK,
  );
  return 
$items;
}

/**
 * This function gets called in the browser address bar for: 
 * "http://yourhost/my_module/form" or 
 * "http://yourhost/?q=my_module/form". It will generate
 * a page with this form on it.
 */
function event_form() {

  

// This form calls the form builder function via the
  // drupal_get_form() function which takes the name of this form builder
  // function as an argument. It returns the results to display the form. 
  
return drupal_get_form('event_event_form');

}

/**
 * This function is called the "form builder". It builds the form.
 * Notice, it takes one argument, the $form_state
 */
function event_event_form($event_state) {

$form['start'] = array(
  
'#title' => t('Arrival date'),
  
'#type' => 'date_popup'// Provided by the date_popup module
  
'#date_format' => 'j F Y'// Uses the PHP date() format - http://php.net/manual/en/function.date.php
  
'#date_year_range' => '0:+2'// Limits the year range to the next two upcoming years
  
'#required' => TRUE,
  
'#default_value' => date('Y-m-d'time()), // Default value must be in 'Y-m-d' format.
);

$form['end'] = array(
  
'#title' => t('Arrival date'),
  
'#type' => 'date_popup'// Provided by the date_popup module
  
'#date_format' => 'j F Y'// Uses the PHP date() format - http://php.net/manual/en/function.date.php
  
'#date_year_range' => '0:+2'// Limits the year range to the next two upcoming years
  
'#required' => TRUE,
  
'#default_value' => date('Y-m-d'time()), // Default value must be in 'Y-m-d' format.
);

$form['#method'] = 'post';
/*кнопка отправки*/
  
$form['submit'] = array(
    
'#type' => 'submit',
    
'#value' => 'Отправить',
  );

  return 

$form;
}

 

/**
 * Form validate callback
 */

function event_event_form_validate($form, &$form_state) {
  
/*
 валидация формы
*/
}
/**
 * Form submit callback
 */
function event_event_form_submit($form, &$form_state) {
/*
что происходит после нажатия кнопки отправить получаем данные с дамтами
*/

$start $form_state['values']['start'];
$end $form_state['values']['end'];

/**делаем запрос в БД на выборку**/

/*выводим результат*/
 

$output "Результат:";
  
$form_state['storage']['results'] = $output;
  return;

}

?>

за основу взята статья- http://www.allexx.info/drupal_form_results
но статья написана под 6 друпал и 7ка ругается на массив $form_state['storage']['results']

Вопрос: как в 7ке вывести результат работы формы на этой же странице, где и форма?

Комментарии

Аватар пользователя Koreychenko Koreychenko 25 июня 2013 в 9:39

Во-первых, так:

function event_event_form($form,&$form_state)

if (isset($form_state['values']['results'])) {
$form['results'] = array('#markup'=>$form_state['values']['results']);
}

Такая штука позволяет в самой форме получить результаты её сабмита.

После того, как форма сабмитится, страница перезагружается.

function event_event_form_submit($form, &$form_state) {

/*выводим результат*/
 $output = "Результат:";
  $form_state['values']['results'] = $output;

}

А можно не париться, и после сабмита просто посчитать все в самой форме ) Т.е. в самом сабмите, по сути не будет производится действий по вычислению.

Аватар пользователя a.s. a.s. 25 июня 2013 в 10:21

Спасибо за ответ, внесла я изменения в код, включила/отключила модуль, но вывода output нет все равно, теперь даже с помощью dsm он не выводится.

«А можно не париться, и после сабмита просто посчитать все в самой форме ) Т.е. в самом сабмите, по сути не будет производится действий по вычислению.»
это как? ajax?

Аватар пользователя Koreychenko Koreychenko 25 июня 2013 в 14:51

"a.s." wrote:
это как? ajax?

Зачем ajax?

function event_event_form($form,&$form_state)
 
if (isset($form_state['values'])) {
$form['results'] = array('#markup'=>'Вывод:');
}

При создании формы вы проверяете есть ли что-нить в переменной $form_state['values'] и если да, то это значит, что форма была засабмичена.

Аватар пользователя a.s. a.s. 10 ноября 2015 в 11:49

форма сабмитится, данные в $form_state['values']есть, но вывода нет.
приложу картинку, что хотела бы получить.

Аватар пользователя sotkom sotkom 10 апреля 2016 в 13:58

я в _submit вставил $form_state['rebuild'] = TRUE, тогда все заработало...

<?php
function event_event_form_submit($form, &$form_state) {
/*выводим результат*/
  
$output "Результат:";
  
$form_state['values']['results'] = $output;
  
$form_state['rebuild'] = TRUE;
  return;
}
?>

ну а в форме:

<?php
function event_event_form($form,&$form_state){
.
.
.
 if (isset(
$form_state['values']['results'])) {
  
$form['results'] = array(
  
'#type' => 'item',
  
'#title' => 'Результат',  
  
'#markup'=>$form_state['values']['results'],
  );
 }
}
?>