Tôi thà thực hiện hook_form_FORM_ID_alter()
để thay đổi biểu mẫu được trả về bởi search_box () . Nếu mymodule.module là tên của mô-đun của bạn, thì bạn nên thêm chức năng mymodule_form_search_box_alter(&$form, &$form_state)
. Bạn cũng cần phải thay thế trình xử lý biểu mẫu bằng của riêng bạn.
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');
}
Bạn cũng có thể hiển thị trường biểu mẫu có chứa văn bản để tìm kiếm nội tuyến với radio bạn thêm.
Mã tôi đã báo cáo thay thế trình xử lý gửi biểu mẫu bằng mã mymodule_search_box_submit()
đó phải được triển khai từ mô-đun của riêng bạn. Đây là mã được thực thi từ trình xử lý đệ trình được thực hiện bởi search.module; Tôi báo cáo nó như là tài liệu tham khảo.
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]);
}
Để tham khảo, tôi báo cáo ở đây mã của hàm search.module xây dựng biểu mẫu hộp tìm kiếm.
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;
}