Рейтинг пользователя

Аватар пользователя WillWe WillWe 26 апреля в 18:21

Комрады, привет.
Задумал я недавно сделать что-то вроде рейтинга пользователей.
И для этого создал поле у пользователя и назвал его рейтинг!
Сообразил правила для его формирования и через всяческие там переменные и вычисления прикрутил к этому полю. В результате всё работает!
Но потом я задумался (точнее вспомнил момент, который оставил сначала на потом): ведь это поле доступно пользователю для редактирования. И его одно никак нельзя запретить (на сколько я знаю). Получается, что пользователь может поставить себе какой угодно рейтинг. Можно конечно это поле скрыть и всё такое, но наверно это не совсем корректно!
Тогда я пошел в гугл и выяснил, что для работы такого рода хорошо должен подойти модуль https://www.drupal.org/project/userpoints
И всё бы ничего. Но есть нюанс! Мне во что бы то ни стало нужно дробное значение этого самого рейтинга. хотя бы с точностью до 0.5
А этот чертов модуль понимает только целые и работать с десятичными переменными никак не хочет!
Из плюсов - в модуле есть разные категории рейтинга (то есть можно вести несколько значений разных у одного пользователя) - вроде бы задумка хорошая. и в профиле они показываются. Заявлена интеграция с вьюс, однако во вьюсе нельзя выбрать одну категорию и отобразить по ней рейтинг (точнее можно, но он не спрашивает что это должна быть за категория - отображает только первую допустим). Но общий рейтинг во вьюсе отобразить можно. Но этого мало! Хотелось бы или десятичных типов данных (может как то это можно в модуле подшаманить методом одной-двух замен?) либо полноценных категорий со вьюсами.
В общем, если у кого есть что сказать по поводу этого моего опуса - милости просим!
Я если сам найду ответ, тоже сюда напишу.
PS: в защиту модуля юзерпоинт: в нем ведь еще ведется статистика транзакций всех. и админу прозрачно видно, сколько и когда и за что пользователь получил! Хотя лично мне это не так важно...

0 Thanks

Комментарии

Аватар пользователя adano adano 26 апреля в 18:57
1

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

<?php
function MYMODULE_form_user_profile_form_alter(&$form, &$form_state$form_id) {
  
$form['field_my_field']['#access'] = FALSE;
}
?>
Аватар пользователя Semantics Semantics 26 апреля в 19:00
1

И правда опус.

Если хотите сохранить свою логику с одним полем - сделайте на него hook_form_alter(), установите ему свойство #access => FALSE и никто не будет его на форме видеть и редактировать.
Иной вариант - поставить модуль https://www.drupal.org/project/field_permissions

Касательно модуля userpoints, судя по схеме таблицы - он хранит только целые.
Но вы можете в нужных вам местах делить на 10, например.

Аватар пользователя marassa marassa 26 апреля в 19:22

А перейти на восьмёрку не вариант? Там можно просто убрать поле из формы безо всякого программирования.

Аватар пользователя sas@drupal.org sas@drupal.org 26 апреля в 21:13

Я за юзерпоинт, плюсов больше чем минусов. Дробные значения, можно заменить масштабированием целых, или где надо поделить на выходе.