it-swarm.asia

كيفية استبدال مربع البحث؟

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

يتم إنشاء الرمز أعلاه بواسطة Drupal وحدة البحث. أريد إضافة هذا الرمز إلى النموذج.

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

كيف أقوم بهذا العمل؟

7
enjoylife

سأفضل تطبيق hook_form_FORM_ID_alter() لتغيير النموذج الذي تم إرجاعه بواسطة search_box () . إذا كان mymodule.module هو اسم الوحدة الخاصة بك ، فعليك إضافة الوظيفة mymodule_form_search_box_alter(&$form, &$form_state). تحتاج أيضًا إلى استبدال معالج إرسال النموذج الخاص بك.

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

يمكنك أيضًا إظهار حقل النموذج الذي يحتوي على النص للبحث المضمّن مع أجهزة الراديو التي تضيفها.
الرمز الذي أبلغت عنه يحل محل معالج إرسال النموذج بـ mymodule_search_box_submit() التي يجب تنفيذها من الوحدة النمطية الخاصة بك. هذا هو الرمز الذي يتم تنفيذه من معالج التقديم الذي يتم تنفيذه بواسطة search.module ؛ أبلغ عنها كمرجع.

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

كمرجع ، أبلغ هنا عن رمز وظيفة search.module التي تنشئ نموذج مربع البحث.

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

أفضل طريقة للقيام بذلك ، IMO ، هي ببساطة استخدام hook_form_alter () .

2
Alex Weber

أعتقد أنك أفضل حالاً باستخدام hook_form_alter () من تحرير القالب (لا مخالفة ، لكن هذه ممارسة سيئة حقًا).

ربما ترغب في إضافة عنصر نموذج جديد ومعالج إرسال إلى نموذج البحث ، حتى تتمكن من معالجة إجراء الإرسال ومعالجة قيمة العنصر الجديد.

1
snufkin

يوجد قالب بحث block-form.tpl.php:

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

في هذا النموذج ، من المهم أن يكون لديك حقول مخفية. المنجم يشبه حاليًا:

<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

يعد هذا رائعًا لمربع البحث فقط ، ولكن يتم عرض النتائج على صفحة البحث الرئيسية ، والتي أحتاج إلى تجاوزها. لهذا السبب ، أريد أن أكون قادرًا على استخدام نتائج (نتائج) البحث. tpl.php وحظر الملفات. ولكن لا يمكنني الحصول على الرمز الصحيح في ملف القالب الخاص بي. حاولت استخدام الشفرة في هذه الصفحة لتغيير قالب السمة بشكل واضح ولكن التغييرات التي أجريتها على tpl.php تظهر أنها لا تستخدم. ما الخطأ الذي افعله؟

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

لقد اعتقدت للتو أنني سأضيف السبب الذي يجعلني أحتاج إلى تحرير الملفات هو أنني أستخدم وحدة بحث مخصصة وهو أمر رائع ولكن في النتيجة ، أعطاني النوع: جميع أنواع المحتويات في نموذج الإدخال بالإضافة إلى نتائج البحث. البشع.

0
pingpong