web-dev-qa-db-ja.com

ノードの平均評価をビューの星として表示するにはどうすればよいですか?

私のWebサイトのユーザーは、コメントを付けながら、Fivestarモジュールで記事を評価できます。平均スコアが最も高い5つの記事でビューを作成したいと思います。

「投票結果」関係と「投票結果:値」フィールドを使用して、私が望むことをほぼ達成することができました。問題は、平均スコアが数値として表示されることですが、星として表示したいのですが。私はこれまでカスタムコーディングなしでこれを達成しました(削除されたビデオが here に配置されたおかげで)が、それを行う方法を忘れていました。

手伝ってくれますか?

1
Jeroen

ついに過去にこれを達成した方法を再発見しました。まず、 この記事 の各ステップに従い、Fivestarフィールドを「Stars」と呼びます。次に、次のビューをインポートします。

$view = new view();
$view->name = 'best_content';
$view->description = '';
$view->tag = 'default';
$view->base_table = 'node';
$view->human_name = 'Best content';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */

/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['use_more_always'] = FALSE;
$handler->display->display_options['access']['type'] = 'perm';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['style_plugin'] = 'default';
$handler->display->display_options['row_plugin'] = 'fields';
/* Relationship: Content: Vote results */
$handler->display->display_options['relationships']['votingapi_cache']['id'] = 'votingapi_cache';
$handler->display->display_options['relationships']['votingapi_cache']['table'] = 'node';
$handler->display->display_options['relationships']['votingapi_cache']['field'] = 'votingapi_cache';
$handler->display->display_options['relationships']['votingapi_cache']['required'] = TRUE;
$handler->display->display_options['relationships']['votingapi_cache']['votingapi'] = array(
  'value_type' => 'percent',
  'tag' => 'vote',
  'function' => 'average',
);
/* Field: Content: Title */
$handler->display->display_options['fields']['title']['id'] = 'title';
$handler->display->display_options['fields']['title']['table'] = 'node';
$handler->display->display_options['fields']['title']['field'] = 'title';
$handler->display->display_options['fields']['title']['label'] = '';
$handler->display->display_options['fields']['title']['alter']['Word_boundary'] = FALSE;
$handler->display->display_options['fields']['title']['alter']['Ellipsis'] = FALSE;
/* Field: Field: Stars */
$handler->display->display_options['fields']['field_stars']['id'] = 'field_stars';
$handler->display->display_options['fields']['field_stars']['table'] = 'field_data_field_stars';
$handler->display->display_options['fields']['field_stars']['field'] = 'field_stars';
$handler->display->display_options['fields']['field_stars']['label'] = '';
$handler->display->display_options['fields']['field_stars']['element_label_colon'] = FALSE;
$handler->display->display_options['fields']['field_stars']['click_sort_column'] = 'rating';
$handler->display->display_options['fields']['field_stars']['settings'] = array(
  'widget' => array(
    'fivestar_widget' => 'sites/all/modules/fivestar/widgets/basic/basic.css',
  ),
  'expose' => 0,
  'style' => 'average',
  'text' => 'none',
);
/* Sort criterion: Field: Stars (field_stars:rating) */
$handler->display->display_options['sorts']['field_stars_rating']['id'] = 'field_stars_rating';
$handler->display->display_options['sorts']['field_stars_rating']['table'] = 'field_data_field_stars';
$handler->display->display_options['sorts']['field_stars_rating']['field'] = 'field_stars_rating';
$handler->display->display_options['sorts']['field_stars_rating']['order'] = 'DESC';
/* Sort criterion: Content: Post date */
$handler->display->display_options['sorts']['created']['id'] = 'created';
$handler->display->display_options['sorts']['created']['table'] = 'node';
$handler->display->display_options['sorts']['created']['field'] = 'created';
$handler->display->display_options['sorts']['created']['order'] = 'DESC';
/* Filter criterion: Content: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = 1;
$handler->display->display_options['filters']['status']['group'] = 1;
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;

できた!


PS: このコメント は、これが以前は機能しなかった理由を説明している可能性があります。

0
Jeroen

これは私が思いついたものです:

この特定のフィールドのビューテンプレートを作成し、それをテーマ(または、ビューテンプレートが既に存在し、ビューAPIフックを介して有効になっている場合はモジュール)に配置します。

私の場合はviews-view-field--top-content--page-1--value.tpl.php含まれ、現在有効になっているトップコンテンツビューのみ。

そこで、次の操作を行います。

<?php
  $data = $row->{$field->field_alias};
  $path = drupal_get_path('module', 'fivestar');
  print theme('fivestar_static', array('rating' => $data, 'widget' => array('name' => 'basic', 'css' => $path . '/widgets/basic/basic.css')));
?>

そして、すべてがコピーアンドペーストの世界でうまくいっていれば、数字の代わりに基本的な星が表示されたビューが表示されるはずです。基本的なスターが気に入らない場合は、widgetsディレクトリーを調べて、そこにある他のスタイルを選択してください。

0
Jimajamma