検索結果ページをカスタマイズするにはどうすればよいですか?


39

コンテンツタイプのティーザービューとページビューをカスタマイズしました。次に、検索結果ページのティーザービューを使用する必要があります。デフォルトでは、Drupalは各結果に対して混乱したフルテキストを表示します。コンテンツタイプごとにそれぞれの外観をカスタマイズできる必要があります。drupalがどのように結果を取得するかを変更したくはありません。

回答:


28

theme_search_results()またはtheme_search_result()をオーバーライドできます。

1つ目は検索結果ページに対して呼び出されるテーマ関数であり、2つ目は単一の結果を表示するために呼び出されるテーマ関数です。両方のテーマ機能は、テンプレートファイル使用(検索results.tpl.php最初のケースでは、検索result.tpl.php第二の場合には)。

search-result.tpl.php $info_split['type']は、ノードタイプを含むDrupal 6で使用します。最新のDrupal 7バージョンで$info_split['type']は、もう渡されていませんが、$result['node']ノードの検索が行われた場合、search -result.tpl.phpは引き続き取得されます。$result['node']->typeノードのコンテンツタイプです。

Drupal 7以降では、モジュールでhook_search_page()を実装できますが、別のモジュールによって返される結果の結果ページを変更するモジュールではなく、検索モジュールと統合するモジュールで使用されるフックですモジュール。
また、Drupal 7では、各テーマ関数はプリプロセス関数を使用します。この場合、この関数はhook_preprocess_search_results()およびhook_preprocess_search_result()です。テンプレートファイルに渡された値を編集する必要がある場合に役立ちます。


ビューやパネルを使用して検索結果をテーマにする方法はありますか?
1月

@jan公開されたフィルターを使用して、検索ページをビューに置き換えることができます。
キアムルノ

@kiamlaluno、ビューを使用してdrupalのデフォルトの検索オプションをテーマにできることを望んでいました。公開されたフィルターを使用せず、デフォルトの検索オプションを使用するだけだからです。
1月

@janビューを使用すると、検索ページ全体がビューに置き換えられます。そのため、少なくともビューフィルターを公開する必要があります。これは、ユーザーが検索用語を入力するために使用するものです。ビューはノードのリストにすぎず、フィルターはページに表示されるノードをフィルターするために使用されます。
キアムルノ

@kiamlalunoあなたは正しい。なぜ私はそれについて考えなかったのか!! おかげで
1月

18

Drupal 7では次を使用します...

...結果に表示される情報をいじくり回します。

そして、あなたは...

...結果のマークアップをカスタマイズします。

これは、コンテンツタイプのティーザーを検索結果として使用する方法の例です。次のスニペットはテーマのtemplate.phpに入ります

/**
 * Implements template_preprocess_search_result
 * @param type $vars
 */
function MYTHEME_preprocess_search_result(&$vars) {
  $node = $vars['result']['node'];
  if ($node->nid) { // if the result is a node we can load the teaser
    $vars['teaser'] = node_view($node, 'teaser'); 
  }
}

このスニペットは、search-result.tpl.phpファイルです。

<article>
  <?php if ($teaser) : // for nodes we can use the teaser as search result ?>
    <?php print drupal_render($teaser); ?>
  <?php else : // for other results we use the default from core search module ?>  
    <?php print render($title_prefix); ?>
    <h3><a href="<?php print $url; ?>"><?php print $title; ?></a></h3>
    <?php print render($title_suffix); ?>
    <?php if ($snippet) : ?>
      <p><?php print $snippet; ?></p>
    <?php endif; ?>
  <?php endif; ?>
  <?php if ($info): ?>
    <footer><?php print $info; ?></footer>
  <?php endif; ?>
</article>

1
このスレッドに関する最良の説明。
-digitgopher

9

最近、Drupal 7アーキテクチャのWebサイトで検索結果を扱うのにかなりの時間を費やし、Display Suiteモジュールを使用することに決めました。

Display Suiteモジュールには、検索結果を制御するためのすばらしい方法があります。検索結果でティーザーを簡単に使用できます。これは、モジュールのメンテナーによるチュートリアルで、検索結果への使用に焦点を当てています。

Drupalの場合と同様に、同じことを行うためのさまざまな方法があります。この方法が気に入ったのは、コンテンツタイプごとに結果を分類できるからです。


1
私はこの答えが2012年のものであることを知っていますが、モジュールページでは検索機能がDrupal 8で除外されていることに気付きました。 。しかし、それは自分ではテストされていません。
ja_him
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.