Ich würde lieber implementieren hook_form_FORM_ID_alter()
, um das von search_box () zurückgegebene Formular zu ändern . Wenn mymodule.module der Name Ihres Moduls ist, sollten Sie die Funktion hinzufügen mymodule_form_search_box_alter(&$form, &$form_state)
. Sie müssen auch den Formularübermittlungs-Handler durch Ihren eigenen ersetzen.
function mymodule_form_search_box_alter(&$form, &$form_state) {
$form['submit']['#weight'] = 10;
$form['search_type'] = array(
'#type' => 'radios',
'#options' => array(t('Whole site search'), t('Google search')),
'#default_value' => 1,
'#weight' => 5,
);
// Replace the search.module handler with your own.
if (in_array('search_box_form_submit', $form['#submit'])) {
$key = array_search('search_box_form_submit', $form['#submit']);
unset($form['#submit'][$key]);
}
array_unshift($form['#submit'], 'mymodule_search_box_submit');
}
Sie können auch das Formularfeld mit dem zu suchenden Text inline mit den von Ihnen hinzugefügten Radios anzeigen.
Der von mir gemeldete Code ersetzt den Formularübermittlungs-Handler durch den Code, der mymodule_search_box_submit()
von Ihrem eigenen Modul implementiert werden muss. Dies ist der Code, der von dem von search.module implementierten Übermittlungshandler ausgeführt wird. Ich melde es als Referenz.
function search_box_form_submit($form, &$form_state) {
// The search form relies on control of the redirect destination for its
// functionality, so we override any static destination set in the request,
// for example by drupal_access_denied() or drupal_not_found()
// (see http://drupal.org/node/292565).
if (isset($_REQUEST['destination'])) {
unset($_REQUEST['destination']);
}
if (isset($_REQUEST['edit']['destination'])) {
unset($_REQUEST['edit']['destination']);
}
$form_id = $form['form_id']['#value'];
$form_state['redirect'] = 'search/node/' . trim($form_state['values'][$form_id]);
}
Als Referenz berichte ich hier den Code der Funktion search.module, die das Suchfeldformular erstellt.
function search_box(&$form_state, $form_id) {
$form[$form_id] = array(
'#title' => t('Search this site'),
'#type' => 'textfield',
'#size' => 15,
'#default_value' => '',
'#attributes' => array('title' => t('Enter the terms you wish to search for.')),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Search'),
);
$form['#submit'][] = 'search_box_form_submit';
return $form;
}