it-swarm-ko.tech

검색 창을 덮어 쓰는 방법은 무엇입니까?

<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

search_box () 에 의해 반환되는 양식을 변경하기 위해 hook_form_FORM_ID_alter()을 구현하고 싶습니다. 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

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

이것은 검색 상자에만 유용하지만 결과는 기본 검색 페이지에 표시되므로 무시해야합니다. 이런 이유로 search-result (s) .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'];
}

방금 파일을 편집 해야하는 이유를 추가한다고 생각했는데 사용자 정의 검색 모듈을 사용하고 있기 때문에 입력 형식의 allcontentcontents와 검색 결과를 제공합니다. U G L Y.

0
pingpong