1. Go to this page and download the library: Download beeralex/beeralex.reviews library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
beeralex / beeralex.reviews example snippets
use Beeralex\Reviews\Services\ReviewsService;
use Beeralex\Reviews\Dto\ReviewDTO;
$service = service(ReviewsService::class);
$dto = new ReviewDTO();
$dto->userName = 'Иван Петров';
$dto->eval = 5;
$dto->review = 'Отличный товар, рекомендую!';
$dto->contactDetails = '[email protected]';
$dto->elementId = 123; // ID товара
$dto->userId = $USER->GetID() ?: null;
$result = $service->add($dto, $_FILES['files']);
if ($result->isSuccess()) {
$elementId = $result->getData()['elementId'];
echo "Отзыв создан с ID: {$elementId}";
} else {
foreach ($result->getErrorMessages() as $error) {
echo "Ошибка: {$error}\n";
}
}
$dto = new ReviewDTO();
$dto->userName = 'А'; // Слишком короткое имя
$dto->eval = 6; // Вне диапазона 1-5
$dto->review = 'OK'; // Слишком короткий отзыв
if (!$dto->isValid()) {
foreach ($dto->getErrors() as $error) {
echo $error->getMessage() . "\n";
}
}
// Вывод:
// Имя должно быть от 2 до 100 символов
// Максимальная оценка - 5
// Отзыв должен быть от 10 до 5000 символов
namespace App\Reviews\Services;
use Beeralex\Reviews\Services\ReviewCreatorService as BaseCreator;
use Beeralex\Reviews\Dto\ReviewDTO;
use Bitrix\Main\Result;
class ReviewCreatorService extends BaseCreator
{
public function create(ReviewDTO $dto, array $files): Result
{
$result = parent::create($dto, $files);
if ($result->isSuccess()) {
$this->sendThankYouEmail($dto);
}
return $result;
}
protected function sendThankYouEmail(ReviewDTO $dto): void
{
\CEvent::Send('REVIEW_THANK_YOU', 's1', [
'USER_NAME' => $dto->userName,
'EMAIL' => $dto->contactDetails,
]);
}
}
use Beeralex\Reviews\Contracts\CreatorContract;
use App\Reviews\Services\ReviewCreatorService;
return [
'services' => [
'value' => [
CreatorContract::class => [
'constructor' => static function () {
return new ReviewCreatorService(
service(FileUploaderContract::class),
service(ReviewsRepository::class)
);
}
],
]
]
];
namespace App\Reviews\Services;
use Beeralex\Reviews\Services\ReviewCreatorService as BaseCreator;
use Beeralex\Reviews\Dto\ReviewDTO;
use Bitrix\Main\Result;
use Bitrix\Main\Error;
class ReviewCreatorService extends BaseCreator
{
public function create(ReviewDTO $dto, array $files): Result
{
$result = new Result();
if ($this->isSpam($dto)) {
$result->addError(new Error('Отзыв отклонен как спам'));
return $result;
}
return parent::create($dto, $files);
}
protected function isSpam(ReviewDTO $dto): bool
{
$spamWords = ['казино', 'кредит', 'займ'];
$text = mb_strtolower($dto->review);
foreach ($spamWords as $word) {
if (str_contains($text, $word)) {
return true;
}
}
return false;
}
}
namespace App\Reviews\Services;
use Beeralex\Reviews\Services\ReviewCreatorService as BaseCreator;
use Beeralex\Notification\NotificationManager;
use Beeralex\Notification\Dto\NotificationMessage;
class ReviewCreatorService extends BaseCreator
{
public function create(ReviewDTO $dto, array $files): Result
{
$result = parent::create($dto, $files);
if ($result->isSuccess()) {
$this->notifyAdmin($dto, $result->getData()['elementId']);
}
return $result;
}
protected function notifyAdmin(ReviewDTO $dto, int $reviewId): void
{
$manager = new NotificationManager();
$message = new NotificationMessage(
eventName: 'NEW_REVIEW_MODERATION',
fields: [
'REVIEW_ID' => $reviewId,
'USER_NAME' => $dto->userName,
'RATING' => $dto->eval,
'PRODUCT_ID' => $dto->elementId,
],
userId: 1 // Администратор
);
$manager->notify($message);
}
}