avxman / ratings
The module ratings post, comment or other object for laravel >=8.0
Installs: 8
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/avxman/ratings
Requires
- php: >=8.0
- laravel/framework: ^8.0
This package is auto-updated.
Last update: 2025-10-22 21:53:57 UTC
README
Работа с рейтингом на сайте. Вывод и сохранение рейтинга.
Установка модуля с помощью composer
composer require avxman/ratings
Настройка модуля
После установки модуля не забываем объязательно запустить команды artisan:
php artisan vendor:publish --tag="avxman-ratings-config",
php artisan vendor:publish --tag="avxman-ratings-migrate"
и после php artisan migrate.
Это установит таблицу рейтинга для получения и сохранения данных.
Команды artisan
- Выгружаем все файлы
php artisan vendor:publish --tag="avxman-ratings-all"
- Выгружаем миграционные файлы
php artisan vendor:publish --tag="avxman-ratings-migrate"
- Выгружаем файлы моделек
php artisan vendor:publish --tag="avxman-ratings-model"
- Выгружаем шаблонные файлы
php artisan vendor:publish --tag="avxman-ratings-view"
- Выгружаем конфигурационные файлы
php artisan vendor:publish --tag="avxman-ratings-config"
Методы
Дополнительные (очерёдность вызова метода - первичная)
setEnabled()- перезаписываем вкл./откл. рейтинга определённой моделиsetIp()- перезаписываем Ip адрес пользователяsetUserAgent()- перезаписываем User agent пользователяsetType()- перезаписываем тип рейтингаsetView()- перезаписываем шаблоны рейтингаsetModelName()- перезаписываем модель рейтингаsetModelUserName()- перезаписываем модель рейтинга пользователяsetExceptModel()- перезаписываем исключение моделей, которые не будут участвовать в рейтингеreset()- сбор параметров рейтинга
Инициализация или сохранение рейтинга (очерёдность вызова метода - второстепенная)
isError()- найдена ли ошибка или отключён рейтингgetOne()- получение рейтинга одиночного результата из моделиgetMany()- получение рейтинга множественного результата из моделиsave()- сохранение рейтинга определённой модели
Вывод (очерёдность вызова метода - последняя, при условии одиночной модели)
toCollection()- получаем результат в виде коллекцииtoArray()- получаем результат в виде массиваtoJson()- получаем результат в виде jsontoHtml()- получаем результат в виде html
Использование метода getMany()
При использовании данного метода в классе модели которую привязываем
к рейтингу нужно добавить трейт Avxman\Rating\Traits\RatingModelTrait.
Когда в модели уже ранее Вами был написан метод rating(),
тогда его нужно переименовать, так как трейт использует данный метод
Использование метода save($collection, $isPermission):bool
Метод может наследовать Дополнительные методы (очерёдность первичная)
перед вызовом save()
К примеру:
\Avxman\Rating\Facades\RatingFacade::save(collect([
'model'=>\App\Models\User::class,
'model_id'=>'1',
'rating'=>'1'
]));
\Avxman\Rating\Facades\RatingFacade::save(collect([
'model'=>\App\Models\AnyModel::class,
'model_id'=>'1',
'rating'=>'1',
'type'=>'five'
]), true);
$collection- коллекция входных данных ['model'=>string,'model_id'=>string|int,'rating'=>string|int,'type'=>string]
model- имя модели;
model_id- ID модели;
rating- оценка рейтинга;
type- тип рейтинга,type_listданные из ключа конфигурационного файла rating.php.
Обязательных данных['model','model_id','rating']$isPermission- [false, true]
false- сохраняем рейтинг, при условии, что рейтинг с указанной моделью уже существует в таблице рейтингов
true- сохраняем рейтинг в любом случаи, даже при отсутствии модели в таблице рейтингов. При отсутствии - создается новая запись в таблице (будьте осторожны, так как можно записать не существующую модель)return bool- возвращает логический результат, при удачной записи - true
Примеры получения результатов
Вызов в controllers
use App\Models\User;
use Avxman\Rating\Facades\RatingFacade;
//Получаем одиночный рейтинг (только одна модель)
$user = User::with('rating')->first();
RatingFacade::setEnabled(false)->getOne($user);
RatingFacade::setIp('111.111.111.111')->getOne($user);
RatingFacade::setUserAgent('a new user agent')->getOne($user);
RatingFacade::setType('ten')->getOne($user);
RatingFacade::setView('vendor.rating.ten.items', 'vendor.rating.ten._item')->getOne($user);
RatingFacade::setModelName(RatingNewModel::class)->getOne($user);
RatingFacade::setModelUserName(RatingUserNewModel::class)->getOne($user);
RatingFacade::setExceptModel([User::class])->getOne($user);
RatingFacade::reset()->getOne($user);
RatingFacade::isError();
RatingFacade::getOne($user)->toCollection();
RatingFacade::getOne($user)->toArray();
RatingFacade::getOne($user)->toJson();
RatingFacade::getOne($user)->toHtml();
//Получение множественного рейтинга (коллекция из одного типа модели)
//Для работы с множественным рейтингом нужно подключить трейт к модели
//для использования связей (читаем "Использование метода getMany()")
$users = User::with('rating')->get();
RatingFacade::setEnabled(false)->getMany($users, 'toHtml');
RatingFacade::setIp('111.111.111.111')->getMany($users, 'toHtml');
RatingFacade::setUserAgent('a new user agent')->getMany($users, 'toHtml');
RatingFacade::setType('ten')->getMany($users, 'toHtml');
RatingFacade::setView('vendor.rating.ten.items', 'vendor.rating.ten._item')->getMany($users, 'toHtml');
RatingFacade::setModelName(RatingNewModel::class)->getMany($users, 'toHtml');
RatingFacade::setModelUserName(RatingUserNewModel::class)->getMany($users, 'toHtml');
RatingFacade::setExceptModel([User::class])->getMany($users, 'toHtml');
RatingFacade::reset()->getMany($users, 'toHtml');
RatingFacade::getMany($users, 'toCollection');
RatingFacade::getMany($users, 'toArray');
RatingFacade::getMany($users, 'toJson');
RatingFacade::getMany($users, 'toHtml');
$this->result['ratings'] = $users->first()->getRating??'';
Вызов во views
Одиночный рейтинг
// Все вышеуказанные функция одиночного рейтинга работают и в шаблонах
{{RatingFacade::getOne($user)->toHtml()}}
// или
{{RatingFacade::setType('ten')->getOne($user)->toJson()}}
Множественный рейтинг
// Все вышеуказанные функция множественного рейтинга работают и в шаблонах
{{RatingFacade::getMany($users, 'toHtml')}}
// или
{{RatingFacade::setType('ten')->getMany($users, 'toJson')}}