Fivestarモジュールを使用すると、3つの方法で結果を表示できます。
1)「スター」-これには、「スターの下に表示するテキスト」という追加の設定があります。たとえば、「平均投票」を選択すると、次のようになります。
_*****
Average: 4.1 (235 votes)
_
2)「評価」-追加オプションはまったくないため、上記の例は次のようになります。
_4.1/5
_
3)「パーセンテージ」-これは使用しないので、無視します。
「評価」オプションに次のような投票総数を表示させる方法はありますか?
_4.1/5 (235 votes)
_
更新1:
関数126の_theme_fivestar_summary
_を上書きし、_return $output;
_の直前に279〜301行を追加する必要があります。
_function theme_fivestar_formatter_rating($variables) {
$element = $variables['element'];
if (empty($element['#item']['average'])) {
$element['#item']['average'] = 0;
}
// Get number of stars.
$stars = (empty($element['#instance_settings']['stars'])) ? 5 : $element['#instance_settings']['stars'];
$average = $element['#item']['average'];
// Rating is X out of Y stars.
$rating = round(($average/100) * $stars, 1);
$output = $rating . '/' . $stars;
$votes = 235;
if (isset($votes)) {
if (!isset($user_rating) && !isset($average_rating)) {
$div_class = 'count';
}
if ($votes === 0) {
$output = '<span class="empty">'. t('No votes yet') .'</span>';
}
else {
if (!empty($microdata['rating_count']['#attributes'])) {
$rating_count_microdata = drupal_attributes($microdata['rating_count']['#attributes']);
}
// We don't directly substitute $votes (i.e. use '@count') in format_plural,
// because it has a span around it which is not translatable.
$votes_str = format_plural($votes, '!cnt vote', '!cnt votes', array(
'!cnt' => '<span ' . $rating_count_microdata . '>' . intval($votes) . '</span>'));
if (isset($user_rating) || isset($average_rating)) {
$output .= ' <span class="total-votes">(' . $votes_str . ')</span>';
}
else {
$output .= ' <span class="total-votes">' . $votes_str . '</span>';
}
}
}
return $output;
}
_
しかし、大きな問題は、$ votes変数を渡す方法がわからないことです。そのため、if (isset($votes)) {
のすぐ上に_$votes = 235;
_をハードコーディングし、コードがこれまでに機能するかどうかを確認しています。
_4.1/5 235 votes
_
括弧を追加する場所(298行目)はわかっていますが、$ votesを渡す方法を理解できません。どんな助けでも大歓迎です。
更新2:
上記のコードは、$ microdataおよび$ rating_count_microdata変数に関する小さなエラーメッセージを生成するため、完全とは言えません。 Jeroenのコードを使用して、以下の最終的な回答として投稿したより良いコードを思いつくことができました。
Jeroenのコードを使用して、template.php
ファイルでエラーなしに100%機能する次のコードを思いつきました。
function YOURTHEMENAME_fivestar_formatter_rating($variables) {
$element = $variables['element'];
$votes = $variables['element']['#item']['count'];
$rating_count_microdata = NULL;
if (empty($element['#item']['average'])) {
$element['#item']['average'] = 0;
}
// Get number of stars.
$stars = (empty($element['#instance_settings']['stars'])) ? 5 : $element['#instance_settings']['stars'];
$average = $element['#item']['average'];
// Rating is X out of Y stars.
$rating = round(($average/100) * $stars, 1);
$output = $rating . '/' . $stars;
if (isset($votes)) {
if (!isset($user_rating) && !isset($average_rating)) {
$div_class = 'count';
}
if ($votes === 0) {
$output = '<span class="empty">'. t('No votes yet') .'</span>';
}
else {
// We don't directly substitute $votes (i.e. use '@count') in format_plural,
// because it has a span around it which is not translatable.
$votes_str = format_plural($votes, '!cnt vote', '!cnt votes', array(
'!cnt' => '<span ' . $rating_count_microdata . '>' . intval($votes) . '</span>'));
$output .= ' <span class="total-votes">(' . $votes_str . ')</span>';
}
}
return $output;
}
また、より簡単なカスタマイズの例を含む詳細と説明を含む ブログ投稿 を作成することも決定しました。初心者がこの素晴らしいモジュールをカスタマイズできない場合に役立つことを願っています。
平均投票の出力は、fivestar/includesにあるfivestar.theme.incファイルで設定されます。 248行目(バージョン7.x-2.1)の関数theme_fivestar_summary
を上書きする必要があります。これを行うには、関数全体をテーマのtemplate.php
ファイルにコピーし、必要な調整を行います。その下のコードですでに行っています。
function YOURTHEME_fivestar_summary($variables) {
$microdata = $variables['microdata'];
extract($variables, EXTR_SKIP);
$output = '';
$div_class = '';
$average_rating_microdata = '';
$rating_count_microdata = '';
if (isset($user_rating)) {
$div_class = isset($votes) ? 'user-count' : 'user';
$user_stars = round(($user_rating * $stars) / 100, 1);
$output .= '<span class="user-rating">' . t('Your rating: <span>!stars</span>', array('!stars' => $user_rating ? $user_stars : t('None'))) . '</span>';
}
if (isset($user_rating) && isset($average_rating)) {
$output .= ' ';
}
if (isset($average_rating)) {
if (isset($user_rating)) {
$div_class = 'combo';
}
else {
$div_class = isset($votes) ? 'average-count' : 'average';
}
$average_stars = round(($average_rating * $stars) / 100, 1);
if (!empty($microdata['average_rating']['#attributes'])) {
$average_rating_microdata = drupal_attributes($microdata['average_rating']['#attributes']);
}
$output .= '<span class="average-rating">' . t('!stars',
array('!stars' => "<span $average_rating_microdata>$average_stars/5</span>")) . '</span>';
}
if (isset($votes)) {
if (!isset($user_rating) && !isset($average_rating)) {
$div_class = 'count';
}
if ($votes === 0) {
$output = '<span class="empty">'. t('No votes yet') .'</span>';
}
else {
if (!empty($microdata['rating_count']['#attributes'])) {
$rating_count_microdata = drupal_attributes($microdata['rating_count']['#attributes']);
}
// We don't directly substitute $votes (i.e. use '@count') in format_plural,
// because it has a span around it which is not translatable.
$votes_str = format_plural($votes, '!cnt vote', '!cnt votes', array(
'!cnt' => '<span ' . $rating_count_microdata . '>' . intval($votes) . '</span>'));
if (isset($user_rating) || isset($average_rating)) {
$output .= ' <span class="total-votes">(' . $votes_str . ')</span>';
}
else {
$output .= ' <span class="total-votes">' . $votes_str . '</span>';
}
}
}
$output = '<div class="fivestar-summary fivestar-summary-' . $div_class . '">' . $output . '</div>';
return $output;
}