Поисковая форма и вывод результата

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

Аватар пользователя airam airam 9 декабря 2008 в 5:36

хочу написать свой собственный поиск по отдельной таблице данных..
с созданием формы - никаких проблем..
а вот с перехватом отправленных данных - проблема..

1) как взять данные отправленные методом Post и создать на их основе страницу(просто дописать отправленные данные ниже формы)?
2) альтернативная мысль.. как при нажатии кнопки сделать переадресацию на сгенеренный адрес? (типа метода get)

Комментарии

Аватар пользователя airam airam 10 декабря 2008 в 4:59
<?php
function test_form_submit($form, &$form_state) {
  db_query("INSERT INTO {table} (name, log, hidden) VALUES ('%s', %d, '%s')", $form_state['values']['name'], $form_state['values']['access']['log'],  $form_state['values']['hidden']);
  drupal_set_message(t('Your form has been saved.'));
}
?>

Вот.. добавляет запись в таблицу, выводит сообщение.. а как сделать так что бы он дописывал текст в таблицу?
или переадресовывал на другой адрес?

все таки я собираюсь его использовать не для добавления записей а для вывода результата поиска

Аватар пользователя airam airam 9 декабря 2008 в 9:41

даже давайте конкретней..

function formexample() {
$items['formexample'] = array(
'title' => 'View the form',
'page callback' => 'formexample_page',
'access arguments' => array('access content')
);

/**
*Menu callback.
*Called when user goes to http://example.com/?q=formexample
*/

function formexample_page() {
$output = t('This page contains our example form.');
//Return the HTML generated from the $form data structure.
$output .= drupal_get_form('formexample_nameform');
return $output;
}
/**
*Define a form.
*/

function formexample_nameform() {
$name='123';
$form['user_name'] = array(
'#title' => t('Your Name'),
'#type' => 'textfield',
'#description' => t('Please enter your name.'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit')
);

return $form;
}
/**
*Validate the form.
*/

function formexample_nameform_validate($form, &$form_state) {
if ($form_state['values']['user_name'] == 'King Kong') {
//WenotifytheformAPIthatthisfieldhasfailedvalidation.
form_set_error('user_name',t('KingKongisnotallowedtousethis form.'));
}
}
/**
*Handle post-validation form submission.
*/

function formexample_nameform_submit($form, &$form_state) {
$name = $form_state['values']['user_name'];
drupal_set_message(t('Thanks for filling out the form, %name', array('%name' => $name)));
}

данный код возвращает имя пользователя в качестве сообщения..
как сделать так, что бы он дописывал имя ниже формы?
$output.=имя;

Аватар пользователя airam airam 9 декабря 2008 в 10:55

Решение:

function formexample_nameform_submit($form, &$form_state) {
$name = $form_state['values']['user_name'];
//drupal_set_message(t('Thanks for filling out the form, %name', array('%name' => $name)));
$form_state['redirect'] = 'formexample/'.$name;
}

но с удовольствием почитал бы альтренативы - уж больно криво выглядит..

Аватар пользователя penexe penexe 9 декабря 2008 в 12:51

по какому-то пути вызываем функцию которая будет выводить и результаты и форму

<?php
function mymodule_form_page($key null) {
  if(
$key) {
    
$output drupal_get_form('mymodule_form',$key); // рендер формы
    
$output .= mymodule_results($key); // вывод результатов
  
} else {
    
$output drupal_get_form('mymodule_form'); // рендер формы
  
}
  return 
$output;
}
function 
mymodule_results($key) {
// запрос к базе
}
function 
mymodule_form($key null) {
 
// описываем форму
}
function 
mymodule_form_submit() {
 
// проверяем значение если не пустое отправляем на нужную страницу а через url передаем наше искомое слово
return 'form_page/'.$key;
}
?>

это вобщем общий принцип так сказать