хочу написать свой собственный поиск по отдельной таблице данных..
с созданием формы - никаких проблем..
а вот с перехватом отправленных данных - проблема..
1) как взять данные отправленные методом Post и создать на их основе страницу(просто дописать отправленные данные ниже формы)?
2) альтернативная мысль.. как при нажатии кнопки сделать переадресацию на сгенеренный адрес? (типа метода get)
Комментарии
писать свой модуль.
чем и занимаюсь..
- я не могу найти, как получить, отправленные из формы данные..
http://api.drupal.org/api/file/developer/topics/forms_api.html/6
Validating Forms
Submitting Forms
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.'));
}
?>
Вот.. добавляет запись в таблицу, выводит сообщение.. а как сделать так что бы он дописывал текст в таблицу?
или переадресовывал на другой адрес?
все таки я собираюсь его использовать не для добавления записей а для вывода результата поиска
даже давайте конкретней..
$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.=имя;
Решение:
$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;
}
но с удовольствием почитал бы альтренативы - уж больно криво выглядит..
по какому-то пути вызываем функцию которая будет выводить и результаты и форму
<?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;
}
?>
это вобщем общий принцип так сказать