web-dev-qa-db-ja.com

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

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

39
J-Fiz

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

1つは検索結果ページに対して呼び出されるテーマ関数で、2つ目は単一の結果をレンダリングするために呼び出されるテーマ関数です。どちらのテーマ関数もテンプレートファイルを使用します(最初のケースでは search-results.tpl.php 、2番目のケースでは search-result.tpl.php )。

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

Drupal 7以上では、モジュールが hook_search_page() を実装できるようになっていますが、これはSearchモジュールと統合するモジュールによって使用されるフックであり、別のモジュールから返された結果の結果ページを変更するモジュールからではありません。
また、Drupal 7では、各テーマ関数は前処理関数を使用します。この場合、この関数は hook_preprocess_search_results() および hook_preprocess_search_result () 。テンプレートファイルに渡されたものの値を編集する必要がある場合に役立ちます。

28
kiamlaluno

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

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

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

Drupalでいつものように、同じことを行うにはさまざまな方法があります。この方法が気に入ったのは、結果をコンテンツタイプ別に分類できるためです。

9
woop