Drupal Views: отображает нулевой результат для отношений как 0 - PullRequest
0 голосов
/ 07 января 2011

У меня есть вид, настроенный в Drupal для возврата узлов, сортируя их по их среднему голосу в порядке убывания. Для целей просмотра значение средних голосов представляет собой отношение. Я заметил, что узлы без голосов отображаются после узлов с отрицательным средним. Узлы без голосов должны иметь в среднем 0, но я считаю, что MySQL JOIN вызывает возвращение значений NULL (поскольку в объединенной таблице нет совпадающих строк, так как строка создается после первого голосования каст для этого предмета).

Я обнаружил, что с MySQL можно вывести все значения, которые NULL в столбце, как другое значение с IFNULL(column_name,'other value').

Мне кажется, что мне нужно изменить модуль Views, чтобы получить эту функциональность, но я надеюсь, что есть какая-то опция, которая возвращает NULL значений в отношении (отношения не существует для элемент) как 0 вместо NULL, чтобы я мог правильно отсортировать узлы.

Модули, которые я использую, включают в себя Views, Voting API, Vote Up / Down и CTools.

Спасибо.

1 Ответ

1 голос
/ 07 января 2011

Ооо, пожалуйста, не изменяйте виды напрямую.

Просто напишите плагин. Все это объектно-ориентировано, поэтому вы просто пишете обработчик поля, который расширяет обработчик выхода для этого поля. hook_views_handlers это то место, с которого нужно начинать.

Все, что вам нужно сделать, это скопировать и вставить существующий обработчик, внести изменения в SQL и дать полю новое имя. Он отобразится в вашем списке доступных полей, как и любые другие.

- Правка -

Документация по представлениям поначалу может немного сбивать с толку, если вы никогда не делали этого раньше, но это очень просто, когда вы получите это "ахах!" момент.

Хорошее место для начала - изучить другие модули, расширяющие представления, и скопировать их уловки. Документы по http://views2.logrus.com/doc/html/index.html помогут вам понять, как отображаются объекты.

Лично я бы сделал изменение в методе ->render() вместо метода ->query(). Таким образом, вы можете просто добавить простой if (is_null($value)) {$value = 0;} вместо использования трюков SQL.

...