PHPackages                             beeralex/beeralex.favorite - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Mail &amp; Notifications](/categories/mail)
4. /
5. beeralex/beeralex.favorite

ActiveBitrix-module[Mail &amp; Notifications](/categories/mail)

beeralex/beeralex.favorite
==========================

My notification module

v1.2.0(3mo ago)07MITPHP

Since Oct 6Pushed 3mo ago1 watchersCompare

[ Source](https://github.com/BkycHblu-6oPwuK/beeralex.favorite)[ Packagist](https://packagist.org/packages/beeralex/beeralex.favorite)[ RSS](/packages/beeralex-beeralexfavorite/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (1)Versions (10)Used By (0)

Модуль beeralex.favorite
========================

[](#модуль-beeralexfavorite)

Модуль избранного (wishlist) для интернет-магазина на Bitrix. Позволяет пользователям добавлять товары в избранное с автоматической синхронизацией при авторизации.

Основные возможности
--------------------

[](#основные-возможности)

- ✅ Добавление/удаление товаров в избранное
- 🔄 Автоматическая синхронизация избранного при авторизации
- 📊 Подсчет количества избранных товаров
- ✔️ Проверка статуса товара (в избранном или нет)
- 🔗 Работа с авторизованными и неавторизованными пользователями
- 🌐 Поддержка мультисайтовости
- 🚀 REST API для интеграции с фронтендом

Требования
----------

[](#требования)

- PHP 8.2+
- Bitrix Framework 25.0+ (рекомендуемая для php 8.2)
- Модули: `sale`, `iblock`

Установка
---------

[](#установка)

1. Разместите модуль в `/local/modules/beeralex.favorite/`
2. Установите через административную панель Bitrix
3. Модуль автоматически создаст таблицу и зарегистрирует сервисы

Быстрый старт
-------------

[](#быстрый-старт)

```
use Beeralex\Favorite\FavouriteService;

$favoriteService = service(FavouriteService::class);

// Добавить в избранное
$favoriteService->add($productId = 123);

// Получить список избранного
$favoriteIds = $favoriteService->getByUser();
$count = $favoriteService->getCountByUser();

// Проверить статус
$isFavorite = $favoriteService->isFavoriteProduct(123);

// Удалить из избранного
$favoriteService->deleteByProductID(123);

// Очистить всё избранное
$favoriteService->clear();
```

REST API
--------

[](#rest-api)

Модуль интегрирован с `beeralex.api`:

```
// Добавить в избранное
POST /api/v1/favorite/store/
Параметры: productID

// Переключить статус
POST /api/v1/favorite/toggle/
Параметры: productID

// Получить список
GET /api/v1/favorite/get/

// Удалить из избранного
POST /api/v1/favorite/delete/
Параметры: productID

// Очистить избранное
POST /api/v1/favorite/clear/
```

Основной сервис
---------------

[](#основной-сервис)

### FavouriteService

[](#favouriteservice)

Методы:

- `add(int $productID, int $fUserID = 0): bool` - добавить товар
- `deleteByProductID(int|array $productID, int $fUserID = 0): bool` - удалить товар
- `clear(int $fUserID = 0): bool` - очистить избранное
- `getCountByUser(int $fUserID = 0): int` - количество товаров
- `getIdsByUser(int $fUserID = 0): array` - получить ID товаров
- `getByUser(int $fUserID = 0): array` - получить ID с проверкой существования
- `isFavoriteProduct(int|array $productID, int $fUserID = 0): array|bool` - проверить статус
- `copyFavoritesToFuser(int $fromFuserId, int $toFuserId): void` - копировать между пользователями

Автоматическая синхронизация
----------------------------

[](#автоматическая-синхронизация)

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

```
// Регистрируется автоматически
EventHandlers::onUserLogin($newUserId);
```

Интеграция с каталогом
----------------------

[](#интеграция-с-каталогом)

```
use Beeralex\Favorite\FavouriteService;
use Beeralex\Catalog\Service\CatalogService;

$favoriteService = service(FavouriteService::class);
$catalogService = service(CatalogService::class);

// Получаем избранные товары с ценами
$favoriteIds = $favoriteService->getByUser();
$products = $catalogService->getProductsWithOffers($favoriteIds, true, true);
```

Пример компонента
-----------------

[](#пример-компонента)

```
class FavoritesComponent extends CBitrixComponent
{
    public function executeComponent()
    {
        $favoriteService = service(\Beeralex\Favorite\FavouriteService::class);
        $catalogService = service(\Beeralex\Catalog\Service\CatalogService::class);

        $favoriteIds = $favoriteService->getByUser();
        $this->arResult['PRODUCTS'] = $catalogService->getProductsWithOffers(
            $favoriteIds,
            true,
            true
        );
        $this->arResult['COUNT'] = count($favoriteIds);

        $this->includeComponentTemplate();
    }
}
```

Расширение функционала
----------------------

[](#расширение-функционала)

Создайте свой класс-наследник:

```
namespace App\Service;

use Beeralex\Favorite\FavouriteService as BaseService;

class FavouriteService extends BaseService
{
    public function addWithNotification(int $productId): bool
    {
        $result = $this->add($productId);

        if ($result) {
            // Ваша логика уведомлений
        }

        return $result;
    }
}
```

Зарегистрируйте в `/local/.settings_extra.php`:

```
use Beeralex\Favorite\FavouriteService;
use App\Service\FavouriteService as AppFavouriteService;

return [
    'services' => [
        'value' => [
            FavouriteService::class => [
                'constructor' => static function () {
                    return new AppFavouriteService(
                        \Bitrix\Main\Context::getCurrent()->getSite() ?? 's1'
                    );
                }
            ],
        ]
    ]
];
```

Документация
------------

[](#документация)

Полная документация доступна в [docs/README.md](./docs/README.md)

Лицензия
--------

[](#лицензия)

Проприетарный модуль. © beeralex

###  Health Score

35

—

LowBetter than 80% of packages

Maintenance81

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~14 days

Total

9

Last Release

102d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/77bd3b8ad5192c498ba8d5a70ae80d7d73e8d13dda7989920a4fa47711fcb8c2?d=identicon)[BkycHblu-6oPwuK](/maintainers/BkycHblu-6oPwuK)

---

Top Contributors

[![BkycHblu-6oPwuK](https://avatars.githubusercontent.com/u/122775450?v=4)](https://github.com/BkycHblu-6oPwuK "BkycHblu-6oPwuK (13 commits)")

### Embed Badge

![Health badge](/badges/beeralex-beeralexfavorite/health.svg)

```
[![Health](https://phpackages.com/badges/beeralex-beeralexfavorite/health.svg)](https://phpackages.com/packages/beeralex-beeralexfavorite)
```

###  Alternatives

[tijsverkoyen/css-to-inline-styles

CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.

5.8k505.3M228](/packages/tijsverkoyen-css-to-inline-styles)[minishlink/web-push

Web Push library for PHP

1.9k12.0M53](/packages/minishlink-web-push)[laravel-notification-channels/twilio

Provides Twilio notification channel for Laravel

2587.7M12](/packages/laravel-notification-channels-twilio)[spatie/url-signer

Generate a url with an expiration date and signature to prevent unauthorized access

4422.3M16](/packages/spatie-url-signer)[mattketmo/email-checker

Throwaway email detection library

2742.0M5](/packages/mattketmo-email-checker)[laravel-notification-channels/discord

Laravel notification driver for Discord.

2371.3M11](/packages/laravel-notification-channels-discord)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
