Задача:
Сделать ленту материалов, типа блог (в том числе и коллективные), отсортированную по дате добавления, критерий вхождения рейтинг равный, либо больший 0.
Проблема:
Создал вьюшку, страницу тизеров, фильтр по типу материалов и voting result (sum) больше либо равное 0. Сортировка по дате добавления. Непонятки в том, что в ленте отбражаются лишь материалы за которые уже был отдан голос.
Тоесть если материал новый и рейтинг у него ноль, он туда не попадает, но если за материал были голоса (например 1+ и 1-) он входит с рейтингом ноль в эту вьюшку.
Необходимо же чтоб материалы новые за которые еще не голосовали так же там отображались. Как побороть? Сталкивался кто нибудь с такой проблемой?
Комментарии
Столкнулся с такой же проблемой.
Понравился метод, предложенный Рокмкой:
"Как вариант, можно в настройках Voting API ("/admin/settings/votingapi") выбрать настройку "Tally results at cron-time" и поставить запуск крона раз в минуту."
Сделал запуск крона раз в минуту, но по ходу все равно новые ноды в таблицу вотинг апи не добавляются и view все равно не отображает новые ноды.
Разобрался. Пришлось переписать hook_cron.
Решение нашлось благодаря neochief'у на друпал.орг.
По ссылке следующее: в файле votingapi_views.inc меняем строку:
$query->add_where("%s %s %d", $field, $filter['operator'], $filter['value']);
на
if (( $filter['value'] == "0") || ( $filter['value'] === NULL) ){
$query->add_where("$field is NULL OR %s %s %d", $field, $filter['operator'], $filter['value']);
} else {
$query->add_where("%s %s %d", $field, $filter['operator'], $filter['value']);
}
Теперь выставляя во вьюшке значение greater than or equal to 0 будут отображаться материалы от нуля и выше.
Эта заплатка правда не решает проблемы если нам надо вывести greater than or equal to -1
пока не пробывал но думаю это можно побороть составной вьюшкой . Выставляя в одной значение greater than or equal to -1, а в другой equal to 0 в итоге на страницы должны отобразиться все материалы от -1 и выше, включае те за которые не голосовали.
Поправте, если не правильно мыслю.
Править код модулей — плохое решение. Лучше написать свой модуль, который будет выполнять те же действия по хук_инсерт. А еще лучше сделать простые инсерты в таблицы votingapi_vote и votingapi_cache.
Мде, я сначало подумал мой косяк. Ведь это так логично выставлять новой ноде рейтинг 0.
Спасибо, будем бороть.
Ни разу это не логично. На некоторых сайтах встречаются рейтинги от 1 до 5 с дефолтным значением 3.
К сожалению, с точки зрения модуля VotingAPI — это правильная логика: после того как за пост отдан голос добавляются или обновляются записи с соответствующим ноде нидом в таблице votingapi_cache. До того как за ноду отдан голос записи в этой таблице, связанной с этой нодой нет, по этому фильтры "VotingAPI [...]" её проигнорируют.
Как вариант, можно в настройках Voting API ("/admin/settings/votingapi") выбрать настройку "Tally results at cron-time" и поставить запуск крона раз в минуту. Кстати, если вы не знаете как настроить крон или (омг!) у вашего хостера его настроить нельзя, то можно воспользоваться новым сервисом Веб-крон.
Или все в тех же настройках Voting API можно выбрать "Never tally votes: I am using a custom module to control vote results" и повесить на хук hook_insert соответствующий обработчик.
Хотя, вполне возможно, без своего модуля здесь все равно не обойтись. Вероятно, понадобится еще и на все тот же хук_инсерт повесить добавление записи с соответствующим ноде нидом в таблицу votingapi_vote.