Как вывести результат работы своей формы?
<?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ке вывести результат работы формы на этой же странице, где и форма?
Комментарии
Во-первых, так:
if (isset($form_state['values']['results'])) {
$form['results'] = array('#markup'=>$form_state['values']['results']);
}
Такая штука позволяет в самой форме получить результаты её сабмита.
После того, как форма сабмитится, страница перезагружается.
/*выводим результат*/
$output = "Результат:";
$form_state['values']['results'] = $output;
}
А можно не париться, и после сабмита просто посчитать все в самой форме ) Т.е. в самом сабмите, по сути не будет производится действий по вычислению.
Спасибо за ответ, внесла я изменения в код, включила/отключила модуль, но вывода output нет все равно, теперь даже с помощью dsm он не выводится.
«А можно не париться, и после сабмита просто посчитать все в самой форме ) Т.е. в самом сабмите, по сути не будет производится действий по вычислению.»
это как? ajax?
Зачем ajax?
if (isset($form_state['values'])) {
$form['results'] = array('#markup'=>'Вывод:');
}
При создании формы вы проверяете есть ли что-нить в переменной $form_state['values'] и если да, то это значит, что форма была засабмичена.
форма сабмитится, данные в $form_state['values']есть, но вывода нет.
приложу картинку, что хотела бы получить.
я в _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'],
);
}
}
?>
СПАСИБО БОЛЬШОЕ, вы мне очень помогли !!!!!!!!!