diff --git a/fivestar.module b/fivestar.module index 1b9db2c..82f4b5d 100644 --- a/fivestar.module +++ b/fivestar.module @@ -60,6 +60,9 @@ function fivestar_microdata_suggestions() { 'average_rating' => array( '#itemprop' => array('ratingValue'), ), + 'rating_count' => array( + '#itemprop' => array('ratingCount'), + ), ); return $mappings; diff --git a/includes/fivestar.field.inc b/includes/fivestar.field.inc index 53cda56..671b719 100644 --- a/includes/fivestar.field.inc +++ b/includes/fivestar.field.inc @@ -727,6 +727,11 @@ function fivestar_property_info_callback(&$info, $entity_type, $field, $instance 'type' => 'text', 'microdata' => TRUE, ), + 'rating_count' => array( + 'label' => t('Rating count'), + 'type' => 'text', + 'microdata' => TRUE, + ), ); } diff --git a/includes/fivestar.theme.inc b/includes/fivestar.theme.inc index 24b0ef6..0f14349 100644 --- a/includes/fivestar.theme.inc +++ b/includes/fivestar.theme.inc @@ -245,6 +245,7 @@ function theme_fivestar_summary($variables) { $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); @@ -254,7 +255,13 @@ function theme_fivestar_summary($variables) { $output .= ' '; } if (isset($average_rating)) { - $div_class = isset($votes) ? 'average-count' : 'average'; + 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']); @@ -262,20 +269,30 @@ function theme_fivestar_summary($variables) { $output .= '' . t('Average: !stars', array('!stars' => "$average_stars")) . ''; } - if (isset($user_rating) && isset($average_rating)) { - $div_class = 'combo'; - } - if (isset($votes) && !(isset($user_rating) || isset($average_rating))) { - $output .= ' '. format_plural($votes, '@count vote', '@count votes') .''; - $div_class = 'count'; - } - elseif (isset($votes)) { - $output .= ' ('. format_plural($votes, '@count vote', '@count votes') .')'; - } + if (isset($votes)) { + if (!isset($user_rating) && !isset($average_rating)) { + $div_class = 'count'; + } - if ($votes === 0) { - $output = ''. t('No votes yet') .''; + if ($votes === 0) { + $output = ''. t('No votes yet') .''; + } + 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' => '' . intval($votes) . '')); + if (isset($user_rating) || isset($average_rating)) { + $output .= ' (' . $votes_str . ')'; + } + else { + $output .= ' ' . $votes_str . ''; + } + } } $output = '
'. $output .'
';