it-swarm-id.com

bagaimana cara menimpa kotak pencarian?

<div class="fr_search">        
  <form action="/"  accept-charset="UTF-8" method="post" id="search-theme-form">
    <input  name="search_theme_form" id="edit-search-theme-form-1" size="15" value="" class="form-text" />
    <!-- … -->
  </form>
 </div>

Kode di atas dihasilkan oleh modul pencarian Drupal. Saya ingin menambahkan kode ini ke formulir.

<select class="search_l" onchange="selectSearch(select)">
  <option value="0">whole site search</option>
  <option value="1">google search</option>
</select>

Bagaimana saya melakukan ini?

7
enjoylife

Saya lebih suka menerapkan hook_form_FORM_ID_alter() untuk mengubah formulir yang dikembalikan oleh search_box () . Jika mymodule.module adalah nama modul Anda, maka Anda harus menambahkan fungsi mymodule_form_search_box_alter(&$form, &$form_state). Anda juga perlu mengganti pengajuan formulir dengan milik Anda sendiri.

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');
}

Anda juga bisa menampilkan bidang formulir yang berisi teks untuk mencari inline dengan radio yang Anda tambahkan.
Kode yang saya laporkan menggantikan pengendali pengiriman formulir dengan mymodule_search_box_submit() yang harus diimplementasikan dari modul Anda sendiri. Ini adalah kode yang dieksekusi dari submission handler yang diimplementasikan oleh search.module; Saya melaporkannya sebagai referensi.

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]);
}

Sebagai referensi, saya melaporkan di sini kode fungsi search.module yang membangun formulir kotak pencarian.

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;
}
11
kiamlaluno

Cara terbaik untuk melakukan ini, IMO, adalah dengan menggunakan hook_form_alter () .

2
Alex Weber

Saya pikir Anda lebih baik menggunakan hook_form_alter () daripada mengedit template (jangan tersinggung, tapi itu praktik yang sangat buruk).

Anda mungkin ingin menambahkan elemen formulir baru dan penangan kiriman ke formulir pencarian, sehingga Anda bisa menangani tindakan kirim dan memproses nilai elemen baru.

1
snufkin

Ada templat search-block-form.tpl.php:

https://api.drupal.org/api/drupal/modules!search!search-block-form.tpl.php/7

Dalam templat itu, penting untuk memiliki bidang tersembunyi. Tambang saya saat ini terlihat seperti:

<form action="" method="post" class="search_form">
      <?php print $search['hidden']; ?>
        <input type="text" name="search_block_form" class="input" />
        <input type="submit"  id="edit-submit--3" name="op" value="" class="submit" />
</form>
1
user2870349

Ini bagus hanya untuk kotak pencarian tetapi hasilnya ditampilkan pada halaman pencarian utama, yang harus saya timpa. Untuk alasan itu saya ingin dapat menggunakan hasil pencarian .tpl.php dan memblokir file. Tapi sepertinya saya tidak bisa mendapatkan kode yang benar di file template saya. Saya mencoba menggunakan kode pada halaman ini dengan jelas mengubah templat tema tetapi perubahan yang saya buat pada tpl.php menunjukkan bahwa mereka tidak sedang digunakan. Apa yang saya lakukan salah?

function dove_preprocess_search_results(&$variables) {
  $variables['search_results'] = '';
  if (!empty($variables['module'])) {
    $variables['module'] = check_plain($variables['module']);
  }
  $index = 0;
  foreach ($variables['results'] as $result) {
    $variables['search_results'] .= theme('search_result',
      array(
        'result' => $result,
        'module' => $variables['module'],
        'extra_classes' => $index % 2 === 0 ? ' even' : ' odd',
      )
    );
    ++$index;
  }
  $variables['pager'] = theme('pager', array('tags' => NULL));
  $variables['theme_hook_suggestions'][] = 'search_results__' . $variables['module'];
}

Saya hanya berpikir saya akan menambahkan alasan saya perlu mengedit file adalah saya menggunakan modul pencarian kustom yang hebat tetapi dalam hasilnya itu memberi saya jenis: semua jenis konten dalam bentuk input ditambah hasil pencarian. JELEK.

0
pingpong