Form weiterleitung
am 28.03.2015 - 19:41 Uhr in
Hallo,
erkennt vielleicht jemand den Fehler? Ich habe ein Suchformular, und will nach dem Submit auf eine Result Seite, erstellt als Template Datei. Funtioniert auch, Daten werden übergeben nur bekomm ich ein "Zugriff verweigert" selbst als Admin.
<?php
function search_menu()
{
$items['search/result'] = array(
'title' => 'Search Result',
'access arguments' => array('access content'),
'access callback' => TRUE,
);
return $items;
}
function search_theme()
{
return array(
'search-result' => array(
'variables' => array('search_record' => NULL),
'template' => 'search-result',
),
);
}
function search_form($form, &$form_state)
{
$form['#action'] = 'search/result';
$form['search_type'] = array(
'#type' => 'select',
'#options' => array(
0 => t('BEREICH WÄHLEN'),
3 => t('BLOG'),
4 => t('NEWS'),
),
);
$form['search_text'] =
array(
'#type' => 'textfield',
'#default_value' => '',
'#size' => 60,
'#maxlength' => 128,
'#required' => TRUE,
);
if (!empty($form_state['search-result']['search_result'])) {
$form['result'] = array(
'#markup' => $form_state['search-result']['search_result'],
);
}
$form['submit'] = array('#type' => 'submit',
'#value' => 'Suchen',
'#submit' => array('search_form_submit'),
);
return $form;
}
function search_form_submit($form, &$form_state)
{
$searchtext = $form['search_text']['#value'];
$type = $form['search_type']['#options'][$form['search_type']['#value']];
if ($form['search_type']['#value'] == "0") {
$result = search_database($searchtext);
} else {
$result = search_database($searchtext, $type);
}
$form_state['search-result']['search_result'] = theme('search-result', array(
'search_record' => $result)
);
$form_state['rebuild'] = TRUE;
}
?>$form_state['redirect'] = 'search/result'; Funktioniert leider garnicht, da bleibt er auf der Seite auf der das Formular abgeschickt wird. :/
Danke
LG
- Anmelden oder Registrieren um Kommentare zu schreiben

Heisst das Modul wirklich
am 29.03.2015 - 15:24 Uhr
Heisst das Modul wirklich "search"? Wenn ja solltest Du hier den Namen ändern um nicht in Konflikt mit dem Core "Search" Modul zu geraten. Ich denke hier könnte auch das Hauptproblem liegen.
Hallo, nein das Module heißt
am 29.03.2015 - 15:27 Uhr
Hallo,
nein das Module heißt nicht nur "search" steht noch etwas davor, habe das aber weggenommen damit es einfacher zu lesen ist.
Im hook_menu() fehlt der
am 29.03.2015 - 15:41 Uhr
Im hook_menu() fehlt der "page callback" und die "page arguments" oder ist das alles vorhanden?
War vorhanden, funktioniert
am 29.03.2015 - 16:06 Uhr
War vorhanden, funktioniert nicht so wie es soll :/
Was gehört hier eingetragen, damit bei Submit auf die Seite weitergeleitet wird und das Template das darstellt was es soll, mit den übergebenen Werten?
Bau Dir das mal grad
am 29.03.2015 - 16:33 Uhr
Bau Dir das mal grad zusammen, hab das irgendwo hier noch rumfliegen
Ist jetzt ungetestet aber so
am 29.03.2015 - 17:45 Uhr
Ist jetzt ungetestet aber so
<?php
/**
* Implements hook_form_menu().
*/
function sensesearch_menu() {
$items = array();
$items['sensesearch'] = array(
'title' => 'Search',
'page callback' => 'drupal_get_form',
'page arguments' => array('sensesearch_form'),
'access arguments' => array('access content'),
);
$items['sensesearch/%/%'] = array(
'title' => 'Search result page',
'page callback' => 'sensesearch_result_page',
'page arguments' => array(1,2)
'access arguments' => array('access content'),
);
return $items;
}
/**
* Implements hook_search().
*/
function sensesearch_theme() {
return array(
'sensesearch_result' => array(
'variables' => array('sensesearch_record' => NULL),
'template' => 'sensesearch-result',
),
);
}
function sensesearch_form($form, &$form_state) {
$form = array();
$form['search_type'] = array(
'#type' => 'select',
'#options' => array(
0 => t('BEREICH WÄHLEN'),
3 => t('BLOG'),
4 => t('NEWS'),
),
);
$form['search_text'] = array(
'#type' => 'textfield',
'#default_value' => '',
'#size' => 60,
'#maxlength' => 128,
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Search'),
);
return $form;
}
function sensesearch_form_submit($form, &$form_state) {
$form_state['redirect'] = 'sensesearch/' . $form_state['values']['search_type'] . '/' . $form_state['values']['search_text'];
// Optional: Redirect with GET params but additional result page needed in hook_menu().
// $form_state['redirect'] = array('sensesearch', array('query' => array('search_type' => $form_state['values']['search_type'], 'search_text' => $form_state['values']['search_text']));
}
function sensesearch_result_page($search_type = NULL, $search_text = NULL) {
if ($search_type == 0) {
$result = search_database($searchtext);
} else {
$result = search_database($searchtext, $search_type);
}
return theme('sensesearch_result', array('search_record' => $result));
}
?>
Super vielen vielen dank!
am 29.03.2015 - 17:35 Uhr
Super vielen vielen dank! Funktioniert einwandfrei.
paar kleine schönheitsfehler drinnen und beim "page callback" fehlt noch das "_page" hinten drann.
$items['sensesearch/%/%'] = array(
'title' => 'Search result page',
'page callback' => 'sensesearch_result_page',
'page arguments' => array(1,2)
'access arguments' => array('access content'),
);
sonst perfekt! Danke!!!
Habs im Post angepasst
am 29.03.2015 - 17:45 Uhr
Habs im Post angepasst