web-gelistirme-sc.com

arama kutusunun üzerine nasıl yazılır?

<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>

Yukarıdaki kod Drupal Arama modülü tarafından oluşturulur. Bu kodu forma eklemek istiyorum.

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

Bunu nasıl yaparım?

7
enjoylife

search_box () ile döndürülen formu değiştirmek için hook_form_FORM_ID_alter() uygulamak yerine. Mymodule.module modülünüzün adıysa, mymodule_form_search_box_alter(&$form, &$form_state) işlevini eklemeniz gerekir. Ayrıca, form gönderme işleyicisini kendinizinkiyle değiştirmeniz gerekir.

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

Eklediğiniz radyolarla satır içinde arama yapmak için metni içeren form alanını da gösterebilirsiniz.
Bildirdiğim kod, form gönderme işleyicisini kendi modülünüzden uygulanması gereken mymodule_search_box_submit() ile değiştirir. Bu, search.module tarafından uygulanan gönderim işleyicisinden yürütülen koddur; Referans olarak rapor ediyorum.

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

Referans olarak, burada arama kutusu formunu oluşturan search.module işlevinin kodunu rapor ediyorum.

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

Bunu yapmanın en iyi yolu, IMO, hook_form_alter () kullanmaktır.

2
Alex Weber

Ben şablonu düzenlemek daha hook_form_alter () kullanarak daha iyi olduğunu düşünüyorum (suç yok, ama bu gerçekten kötü bir uygulama).

Muhtemelen arama formuna yeni bir form öğesi ve bir gönderme işleyicisi eklemek istersiniz, böylece gönderme eylemini gerçekleştirebilir ve yeni öğenin değerini işleyebilirsiniz.

1
snufkin

Bir search-block-form.tpl.php şablonu vardır:

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

Bu şablonda gizli alanlara sahip olmak önemlidir. Benim şu anda şöyle görünüyor:

<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

Bu sadece arama kutusu için harika ama sonuçlar, geçersiz kılmam gereken ana arama sayfasında görüntüleniyor. Bu nedenle arama sonuçları .tpl.php kullanmak ve dosyaları engellemek istiyorum. Ancak şablon dosyamdaki kodu doğru olarak göremiyorum. Açıkçası tema şablonunu değiştirerek bu sayfadaki kodu kullanmayı denedim ama tpl.php'de yaptığım değişiklikler kullanılmadıklarını gösteriyor. Neyi yanlış yapıyorum?

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

Ben sadece dosyaları düzenlemek için gerek neden eklemek istiyorum büyük özel arama modülü kullanıyorum olduğunu düşündüm ama sonuçta bana türü veriyor: giriş formunda allthecontenttypes artı arama sonuçları. U G L Y.

0
pingpong