web-dev-qa-db-ja.com

カスタムSolr検索ページにSolrインデックスの画像フィールドを表示

Apache Solrビューモジュール を使用して、特定のコンテンツタイプのアイテムのみを表示するビューを作成します。

ビューにも画像を含めたいです。カスタムモジュール(フィールドはss_field_image_uriと呼ばれます)を使用して、solrでインデックスに登録された自分のサイトの画像を取得できました。それらはsolrインデックスに表示され、カスタムsolrビューに画像フィールドを追加できます。ここまでは順調ですね。

問題は、フィールドが「public://folder/imagename.jpg」として出力されることです。私の質問は、リンクではなく画像自体をビューに出力させる方法を教えてください。

ビューの画像フィールドの出力をどうにかして書き換える必要がありますか?または、カスタムphpフィールドを使用してコードを追加しますか?どうすればいいのかわからない。私はプログラマーではありませんが、どのように進めるかについてのアドバイスをいただければ幸いです。

ベスト、ガーベン

4
Gerben Zaagsma

ユーザー Gaele Strootman の助けを借りてこれをなんとか解決しました。

これを解決するには3つのステップがあります。1)カスタムモジュールを使用してsolrインデックスに画像を追加する2)Apache solrビューに画像フィールドを追加する3)実際の画像を表示する画像フィールドのテンプレートファイルを追加する

ad 1)solrインデックスに画像を追加するカスタムモジュールを作成します。

My_module.infoとmy_module.moduleの2つのファイルのみが必要です。画像フィールドにss_field_image_uriという名前を付けます。

my.module.info:

name = Apache Solr Image
description = Add image field to the solr index so we can display images in search results
package = Apache Solr
core = 7.x

dependencies[] = apachesolr_search

my_module.module:

<?php
/**
 * Add field_image uri to Apache solr index, so that we can later display image in search results or custom Apache solr views page.
 * @see apachesolr.api.php
 */

function apachesolr_image_apachesolr_index_document_build($document, $node, $namespace) {
  if (isset($node->field_image['und']['0']['uri'])) $document->addField('ss_field_image_uri', $node->field_image['und']['0']['uri']);
}
?>

ad 2)Apache solrビューに画像フィールドを追加します

まず、solrのインデックスを再作成して、画像が実際にインデックス化されて表示されるようにします。次に、画像フィールドをビューに追加します。

ad 3)実際の画像を表示する画像フィールドのテンプレートファイルを追加する

これが追加したテンプレートです。フィールドはss_field_image_uriと呼ばれるため、テンプレート名はviews-view-field--ss-field-image-uri.tpl.phpです。これはコードです:

<?php

/**
 * @file
 * This template is used to print a single field in a view.
 *
 * It is not actually used in default Views, as this is registered as a theme
 * function which has better performance. For single overrides, the template is
 * perfectly okay.
 *
 * Variables available:
 * - $view: The view object
 * - $field: The field handler object that can process the input
 * - $row: The raw SQL result that can be used
 * - $output: The processed output that will normally be used.
 *
 * When fetching output from the $row, this construct should be used:
 * $data = $row->{$field->field_alias}
 *
 * The above will guarantee that you'll always get the correct data,
 * regardless of any changes in the aliasing that might happen if
 * the view is modified.
 */
?>
<?php 
/**
 * For additional parameters see
 * http://api.drupal.org/api/drupal/modules!image!image.field.inc/function/theme_image_formatter/7 
 */
?>
<?php $variables = array('item' => array('uri' => $row->{$field->field_alias})); ?>
<?php $variables['image_style'] = 'thumbnail'; ?>
<?php print theme_image_formatter($variables); ?>

キャッシュを消去すると、画像がApache solrビューに表示されます。コード内の画像スタイルを「サムネイル」から任意の画像スタイルに変更できることに注意してください。

これが誰にも役立つことを願っています!

5
Gerben Zaagsma