Для вывода значений модуля Fivestar нашел следующий код, который можно вставить в node.tpl.php:
<?php
$votes = fivestar_get_votes('node',$node->nid); // получаем количество оценок
$stars = variable_get('fivestar_stars_'. $node->type, 5);
$average_stars = round(($votes['average']['value'] * $stars) / 100, 1); //вычисляет суммарную оценку
print $average_stars; // выводим оценку
print $votes['count']['value']; // выводим количество оценок?>
Все хорошо, выводит среднюю оценку и общее кол-во.
Но, только если есть хотя бы один голос. Пока оценки нет, выдает ошибку:
Notice: Undefined index: value в функции include() (строка ... в файле ...\node.tpl.php).
Подскажите, пожалуйста, как изменить данный код, чтоб была проверка на наличие голосований, и при их отсутствии, вместо значения, выводило нужный текст.
Комментарии
Написано в теме [Решено]. А ведь с ошибками проблему товарищ не решил.
Дело в том, что при нулевых рейтингах $votes['average']['value'] и $votes['count']['value'] возвращают значание NULL, а это как известно не совсем 0.
Можно конечно запариться и править модуль, на drupal.org даже где-то были патчи. Но можно сделать и проще, например, таким макаром:
<?php
$votes = fivestar_get_votes('node',$node->nid);
$stars = variable_get('fivestar_stars_'. $node->type, 5);
define('average', 'average');
define('value', 'value');
$count_votes = $votes['count']['value'];
$average_stars = round(($votes['average']['value'] * $stars) / 100, 1);
if (
$average_stars == NULL) {$average_stars = 0; // NULL is not 0
}
if ($count_votes == NULL){
$count_votes = 0; // NULL is not 0
}
?>
А выводить уже переменные $average_stars и $count_votes.
Приведенный вами фрагмент кода тоже не решает проблемы с ошибками. Зачем там два define?
Дело в том, что при нулевых рейтингах $votes['average']['value'] и $votes['count']['value'] скорее всего вообще не существуют.
Достаточно isset.
А почему не решает? Очень даже работает. Может не совсем по матану.
Можно тогда так переписать?
<?php
if (!isset($count_votes)) $count_votes=0;
?>
<?php
$votes = fivestar_get_votes('node',$node->nid);
$stars = variable_get('fivestar_stars_'. $node->type, 5); $average_stars = 0;
if (isset($votes['average']['value'])) {
$average_stars = round(($votes['average']['value'] * $stars) / 100, 1);
} $count_votes = 0;
if (isset($votes['count']['value'])){
$count_votes = $votes['count']['value'];
}
?>
Я бы делал например через https://www.drupal.org/project/field_views
Добрый день, спасибо!
Я так и сделал, только не успел опубликовать. Соррян, не знаток PHP.
Только я еще добавил проверку $stars на всякий случай (паранойя):
<?php
if (isset($votes['average']['value']) and isset($stars))
?>
Вот теперь можно писать [РЕШЕНО].
Проверка isset($stars) бессмысленна, ибо значение вы получаете через variable_get, у variable_get второй аргумент - значение по умолчанию, в вашем случае - 5. То есть $stars всегда будет или значением variable, или 5.