Отображение текущего ранга узла из голосов (api голосования) в поле зрения


Как и в названии. Я борюсь с программированием, но безуспешно. Механизм api голосования слишком сложен для меня. Как я могу отобразить текущий ранг узла (порядковый номер) по голосам?

Мое мнение сейчас:

Критерии сортировки: (Результаты голосования) Результаты голосования: Описание функции

Отношения Узел: Результаты голосования

При отображении всех результатов у него есть номер заказа благодаря модулю просмотра полей php.

Отображение позиции в ранге текущего отдельного узла это ад для меня. Пользовательский sql-запрос вообще не работает.

Я использую api для голосования и модуль оценки.

Пожалуйста, помогите.

РЕДАКТИРОВАТЬ

Так как я использую +1/-1 Я пытаюсь:

  1. Сумма +1 голосов
  2. Сумма -1 Голосов
  3. Вычтите сумму -1 голосов из суммы +1

Код:

$plus_rates = db_query("SELECT count(value) AS sum, content_id AS nid FROM votingapi_vote WHERE tag = 'vote' AND value_type = 'points' AND value = 1 GROUP BY content_id ORDER BY sum DESC, nid ASC");
                                         $minus_rates = db_query("SELECT count(value) AS sum, content_id AS nid FROM votingapi_vote WHERE tag = 'vote' AND value_type = 'points' AND value = -1 GROUP BY content_id ORDER BY sum DESC, nid ASC");


                     $pluses = array();
                                         $minuses = array();

                     while ( $row = db_fetch_object($plus_rates) ) {

                                            $pluses[$row->nid] = $row->sum;         

                     }

                                         $plus_rates = NULL;

                                         while ( $row = db_fetch_object( $minus_rates ) ) {

                                            $minuses[$row->nid] = $row->sum;

                                         }

                                         $minus_rates = NULL;

                                         $keys = array_keys($minuses);

                                         foreach($keys as $k) {

                                                if (array_key_exists($k, $pluses)) {

                                                        $pluses[$k] = $pluses[$k] - $minuses[$k];

                                                }

                                         }

                                         arsort($pluses, SORT_NUMERIC);

                                         firep($pluses, 'pluses');

$плюсы отсортированы по порядку, но порядок полностью отличается от моего отображения вида:

  • Сортировка циртерии: (Результаты голосования) Голосование результаты: Функция desc)
  • Узел взаимосвязи: Результаты голосования, функция агрегирования: общий балл

РЕДАКТИРОВАТЬ 2

Я пытаюсь напрямую запросить votingapi_cache, но все равно порядок совершенно иной, чем в представлениях:

ВЫБЕРИТЕ значение, content_id ИЗ votingapi_cache, ГДЕ value_type= "очки" И тег = "голосование" И ФУНКЦИЯ = "сумма" ПОРЯДОК ПО значению DESC ПРЕДЕЛ 0, 30

Author: Codium, 2011-07-21

3 answers

Проверьте комментарии к этому вопросу: Проблема визуализации значения рейтинга в представлении

Похоже, что вы, вероятно, не установили агрегатную функцию для связи Узел: Результаты голосования. Вы определенно можете отобразить общее количество голосов в представлении, не написав никакого собственного кода.

 1
Author: Chaulky, 2017-04-13 12:47:05

votingapi_vote это не таблица, к которой вы можете получить доступ непосредственно в представлениях. Если вы используете модуль данных , вы должны иметь возможность сделать его доступным для представлений и создать представление на нем напрямую. Это будет на более низком уровне, чем то, что вы делаете через узлы, но может быть проще для вас.

 1
Author: Jeremy French, 2011-07-21 10:48:17

Хорошо, я сделал это,

Настройки первого просмотра (Просмотр для основного списка рейтингов):

Критерии сортировки:

(Результаты голосования) Результаты голосования: Значение desc, Узел: Nid asc

Код:

$result = db_query("SELECT c.content_id AS nid, c.value AS sum
                                                                FROM votingapi_cache AS c
                                                                INNER JOIN node AS n ON c.content_id = n.nid
                                                                WHERE c.value_type = 'points'
                                                                AND c.tag = 'vote'
                                                                AND c.function = 'sum'
                                                                AND n.type = 'profile'
                                                                AND n.status = 1
                                                                ORDER BY sum DESC , nid ASC
                                                        ");
                           $is_rated = FALSE; 

                                     while ($row = db_fetch_object($result)) {

                                        $counter++;

                                         if ($profile->nid == $row->nid) {

                                            $is_rated = TRUE;
                                          break;

                                         }

                                     }

В реальности следует также обратиться к временной таблице и кэшу.

 0
Author: Codium, 2011-07-21 19:55:50