Каталог решений

Покупка продления купона

Продолжительность:
Общая сумма:
0 руб.
Ваш запрос успешно отправлен!

Я согласен с условиями активации продлений
Продлить
Продолжить покупки

Избранное

Модуль Избранное позволяет пользователю позволяет отметить товары для дальнейшего просмотра.Для неавторизованного пользователя список товаров хранится в куках, после авторизации список хранится в специальном свойстве пользователя, которое добавляется при установке модуля.Модуль содержит настройки прав пользователей.Для взаимодействия с внешним кодом предусмотрены события:1. При добавлении товара в избранное, 2. При удалении3. При переносе списка из кук в свойствоДоступны публичные методы:1. Добавлен ли товар в избранное (С учетом прав доступа или нет)2. Количество товаров в избранном  (С учетом прав доступа или нет)3. Полный список добавленных товаров  (С учетом прав доступа или нет)Модуль содержит компонент, который выводит краткий список товаров. Также при установке модуля автоматически создается раздел, где выводится список товаров с подробным описанием, ссылку на который пользователь может получить из краткого списка.Компонент поддерживает технологию аякс. Содержит событие на изменения счетчика товара при добавлении или удалении товара из избранного. Данный счетчик можно расположить в любом месте сайта, в зависимости от дизайна.

Избранное

Избранное

Скриншоты
Описание

Технические данные

Опубликовано:
27.01.2019
Обновлено:
04.04.2023
Версия:
1.0.63
Установлено:
100 - 499 раз
Подходящие редакции:
«Малый бизнес», «Бизнес»
Адаптивность:
Да
Поддержка Композита:
Да
Совместимо с Сайты24
Нет
Совместимо с PHP 8.1
Нет

Пользовательское соглашение

Описание

Модуль Избранное позволяет пользователю позволяет отметить товары для дальнейшего просмотра.

Для неавторизованного пользователя список товаров хранится в куках, после авторизации список хранится в специальном свойстве пользователя, которое добавляется при установке модуля.

Модуль содержит настройки прав пользователей.

Для взаимодействия с внешним кодом предусмотрены события:

1. При добавлении товара в избранное,
2. При удалении
3. При переносе списка из кук в свойство

Доступны публичные методы:

1. Добавлен ли товар в избранное (С учетом прав доступа или нет)
2. Количество товаров в избранном  (С учетом прав доступа или нет)
3. Полный список добавленных товаров  (С учетом прав доступа или нет)

Модуль содержит компонент, который выводит краткий список товаров.

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

Компонент поддерживает технологию аякс. Содержит событие на изменения счетчика товара при добавлении или удалении товара из избранного. Данный счетчик можно расположить в любом месте сайта, в зависимости от дизайна.
Отзывы (1)
Обсуждения (29)
1 - 5 из 29
Что нового
1.0.63 (04.04.2023) Иправления:
  • Исправлено использованеи метода count()
  • Исправлено определение ID пользоватлея в методах getUserId()
1.0.62 (26.01.2022) Иправления:
  • Исправлены баги верстки ссылок в шаблоне компонента wishlist.list
1.0.61 (21.11.2020) Улучшения:
  • Добавлена возможность удалять товары из избранного при повторном клике на кнопку
  • Добавлен шаблон кнопки
1.0.5 (24.08.2020) Иправления:
  • Добавлена возможность задать размеры изображения
1.0.4 (29.05.2020) Иправления:
  • В классе компонента доработан функционал очистки товаров неактивных ( или удаленных ) из избранного
1.0.3 (18.04.2020) Улучшения:
  • Полный рефакторинг кода модуля
Внимание!!! изменен шаблон компонента wishlist.list.
Поэтому текущий, установленный на сайте затрется, eсли при внесенных изменений он не был переименован или скопирован в папку local
1.0.2 (03.02.2020) Исправлен баг при установке модуля
Установка

Внимание, в версии 3 модуль полностью переписан, поэтому старые методы оставлены для совместимости. Документация предыдущих версий сохранена на сайте компании по ссылке https://itserw.ru/support/faq/187/.

Принцип работы

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

ИНСТРУКЦИЯ ПО УСТАНОВКЕ И НАСТРОЙКЕ МОДУЛЯ 1С-БИТРИКС
  1. Установка модуля

    Зайти в административную панель 1С-Битрикс и перейти в раздел «Marketplace» -> «Установленные решения». Выбрать модуль «Модуль избранное (itserw.wishlist)» и нажать кнопку УСТАНОВИТЬ. http://prntscr.com/lsm8fs Далее мы попадаем на страницу настроек установки модуля http://prntscr.com/lsm8kc При отмеченной опции скопировать публичные файлы в публичную часть сайта будет добавлен раздел избранных товаров. Далее следует указать название папки с разделом избранных товаров. По умолчанию эта папка wishlist. И если такая папка уже существует на сайте, то отмеченная опция “Переписывать существующие файлы” - затрет все файлы из этой папки. После установки модуля появится сообщение о его успешной установке. Далее необходимо перейти к настройкам модуля

  2. Настройка модуля

    Настройки модуля расположены по пути
    Настройки ->Настройки продукта->Настройки модулей->Модуль избранное
    Основные настройки
    Пользовательское свойство - задается идентификатор пользовательского свойства, в котором хранятся id товаров избранного
    Идентификатор куки – в котором хранятся id товаров избранного
    Вкладка доступ – устанавливается права доступа к модулю избранного.
    http://prntscr.com/lsmcbq
    И нажимаем сохранить
    Далее выведем вывести компонент, где необходимо отображать список избранного

  3. Вывод компонента в произвольном месте сайта и настройка компонента

    Добавим вызов компонента на все страницы сайта, в файл footer.php шаблона.
    Для начала в публичной части сайта создадим тестовый раздел
    http://prntscr.com/lsmeis
    И из визуальной части редактора вызовем компонент и добавим необходимые настройки
    http://prntscr.com/lsmeql
    http://prntscr.com/lsmeu9
    Далее перейдем к настройка
    Все настройки можно оставить по умолчанию, кроме настроек тип информационного блока и код информационного блока, а так же настройки аякс По умолчанию пока только один шаблон для списка избранного, в след версии мы добавим несколько шаблонов. Но функционал модуля позволяет создать свой шаблон – индивидуальный под дизайн вашего сайта. Список можно расположить во всплывающем попап окне, в выезжающий плашках сайта или в любом произвольном месте сайта. Копируем код компонента и добавляем в произвольное место сайта
    Пример

    <?$APPLICATION->IncludeComponent("itserw:wishlist.list",
    "",
    Array(
    "AJAX_MODE" => "Y",
    "AJAX_OPTION_ADDITIONAL" => "",
    "AJAX_OPTION_HISTORY" => "Y",
    "AJAX_OPTION_JUMP" => "N",
    "AJAX_OPTION_STYLE" => "Y",
    "CACHE_GROUPS" => "Y",
    "CACHE_TIME" => "36000000",
    "CACHE_TYPE" => "A",
    "IBLOCKS" => "2",
    "IBLOCK_TYPE" => "catalog",
    "ITSERW_ACTION" => "action",
    "ITSERW_BTN_CLASS" => "itserw_wishlist",
    "ITSERW_BTN_CLASS_DELETE" => "itserw_wishlist_delete",
    "ITSERW_ID" => "id_w",
    "ITSERW_LINK" => "/wishlist/",
    "WIDTH_IMAGE" => "100",
    "HEIGHT_IMAGE" => "100",
    )
    
    );?>
    После необходимо также настроить раздел избранное. Фильтр товаров там уже добавлен. Следует только вывести по этому фильтру элементы. Можно с помощью компонента catalog.section, добавив параметр "FILTER_NAME" => "arFilterWishlist". Далее раздел тест можно удалить.
ВАЖНО - для работы кнопок добавления в избранное (напр. в компоненте news.list) на странице ОБЯЗАТЕЛЬНО должен быть подключен компонент "itserw:wishlist.list" (например в footer.php, можно даже в блоке с display:none;), иначе кнопки работать не будут. Также если компоненты в шаблонах которых вы добавили кнопки работают в режиме AJAX, то нельзя в них подключать  "itserw:wishlist.list", он должен быть подключен один раз как описано выше (например в footer.php)!
  1. Добавление кнопки на сайт

    Пример кода добавления кнопки для компонентов catalog.element, catalog.top и др.
    В начале файла где будет располагаться кнопка добавляем псевдоним имени класса с помощью оператора use

    use \Itserw\Wishlist\Favorites;
       
    <? if (CModule::IncludeModule("itserw.wishlist")): ?>
    
        <button class="button button--favorites itserw_wishlist js-add-to-wishlist-btn <? if (Favorites::getInstance()->getStorageObject()->isStorageValue(array($item['ID']))): ?>itserw_wishlist_added<? endif; ?>"
                data-id="<?= $item['ID'] ?>" data-action="add" data-product-id="<?= $item['ID'] ?>"
                data-toggle="tooltip" title=""
                data-original-title="<? if (!empty(Favorites::getInstance()->getStorageObject()->isStorageValue(array($item['ID'])))): ?><?= GetMessage('ITSERW_WISHLIST_TMPL_IN_FAVORITES') ?><? else: ?> <?= GetMessage('ITSERW_WISHLIST_TMPL_FAVORITES') ?><? endif; ?>">
            <i class="fa fa-heart"></i>
            <span class="button__text"><? if (Favorites::getInstance()->getStorageObject()->isStorageValue(array($item['ID']))): ?><?= GetMessage('ITSERW_WISHLIST_TMPL_IN_FAVORITES') ?><? else: ?> <?= GetMessage('ITSERW_WISHLIST_TMPL_FAVORITES') ?><? endif; ?></span>
        </button>
    
        <? endif ?>
    Добавлен новый шаблон кнопки, работает с версии обновления 1.0.61

       
    <? if (CModule::IncludeModule("itserw.wishlist")): ?>
    
        <button class="button-favorite-default itserw_wishlist  js-add-to-wishlist-btn <? if (Favorites::getInstance()->getStorageObject()->isStorageValue(array($arResult['ID']))): ?>itserw_wishlist_added<? endif; ?>"
                data-id="<?= $arResult['ID'] ?>" data-action="add" data-product-id="<?= $arResult['ID'] ?>">
            <svg area-label="<?= GetMessage('ITSERW_WISHLIST_TMPL_FAVORITES') ?>" version="1.1"xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
                     viewBox="0 0 446.171 446.171" style="enable-background:new 0 0 446.171 446.171;" xml:space="preserve" width="20" height="20">
                <path class="svg-hard-bg" d="M399.151,81.241c42.841,40.751,42.841,106.057,0,146.808l-20.898,19.853L223.608,394.71
                    L68.963,247.902l-20.898-19.853c-42.841-40.751-42.841-106.057,0-146.808s111.804-40.751,154.645,0l20.898,19.853l20.898-19.853
                    C287.347,40.49,356.31,40.49,399.151,81.241z"/>
                <path class="svg-hard-border" d="M223.608,410.384c-3.657,0-7.837-1.567-10.971-4.18L37.094,239.543
                    C13.584,216.555,0,186.775,0,154.906s13.061-62.171,37.094-84.637c48.588-45.976,127.478-45.976,176.065,0l9.927,9.404l9.927-9.404
                    c48.588-45.976,127.478-45.976,176.065,0l0,0c24.033,22.465,37.094,52.767,37.094,84.637s-13.061,62.171-37.094,84.637
                    L234.58,406.204C231.445,408.816,227.265,410.384,223.608,410.384z M125.388,66.612c-24.033,0-48.065,8.882-66.351,26.122
                    c-17.763,16.718-27.167,38.661-27.167,62.171s9.927,45.453,27.167,62.171L223.608,373.29L388.18,217.078
                    c17.763-16.718,27.167-38.661,27.167-62.171s-9.927-45.453-27.167-62.171l0,0c-36.571-35.004-96.131-35.004-133.225,0
                    l-20.898,19.853c-6.269,5.747-15.673,5.747-21.42,0l-20.898-19.853C173.453,74.971,149.42,66.612,125.388,66.612z"/>
        </svg>
        </button>
    
        <? endif ?>

  2. Внимание! Идентификатор товара в кнопке должен быть реально существующего. Так как при добавлении товара модуль проверяет наличие товара в базе. И если не найдет, то добавления не произойдет. Используемые методы модуля описаны далее в документации пункта 6

  3. Добавление счетчика избранных товаров в произвольное место сайта c помощью кода. Данный код представлен с поддержкой композита.
    <span id="js-favorite-prod-count">    <? Bitrix\Main\Page\Frame::getInstance()->startDynamicWithID("wishlist-count"); ?>
    
        <? if (CModule::IncludeModule("itserw.wishlist")) {
    
              echo \Itserw\Wishlist\Favorites::getInstance()->getCountValuesFromFavorites();
    
        } ?>
    
        <? Bitrix\Main\Page\Frame::getInstance()->finishDynamicWithID("wishlist-count", ""); ?>
    </span>

  4. Компонент избранное при удалении и добавлении товара создает js событие wishlist, что позволяет изменять счетчик на лету. Пример добавления обработчика js события: Содержит данные количества элементов e.detail.COUNT, а так же массив элементов e.detail.ITEMS.

    <script>
        window.addEventListener('wishlist', function (e) {
            $('#js-favorite-prod-count').text(e.detail.COUNT);
        }, false);
    
    </script>

      7. Отображение товаров в разделе избранное

     
use \Bitrix\Main\Loader;

use \Itserw\Wishlist\Favorites;

if (Loader::includeModule('itserw.wishlist')) 
{
//Получаем все товары
$arFilter = Favorites::getInstance()->getStorageObject()->getStorageValue();
$GLOBALS['arFilter']['ID'] = $arFilter;
}
?>

<? if (count($arFilter)): ?>
   //Здесь вызов компонента например, bitrix:catalog.section 
<? endif; ?>
Краткая документация по классам и методам модуля.

Модуль содержит 3 класса и 1 интерфейс.

Класс DataStorageCookie - если избранное хранится в куках, класс DataStorageProperty - если избранное хранится в свойстве.

Два этих класса наследуются от 1 и того же интерфейса (содержат одинаковые методы, но со своей логикой работы).    
interface dataStorageInterface
{
    /**
     * Добавляет хранилище данных
     * @param array $value
     * @return mixed
     */
    public function addStorage(array $value);

    /**
     * Удаляет хранилище данных
     * @return mixed
     */
    public function deleteStorage();

    /**
     * Проверяет, есть ли хранилище для данных
     * @return mixed
     */
    public function isStorage();

    /**
     * Добавляет значение в хранилище
     * @param array $values
     * @return mixed
     */
    public function addStorageValue(array $values);

    /**
     * Удаляет значение из хранилища
     * @param array $values
     * @return mixed
     */
    public function deleteStorageValue(array $values);

    /**
     * Получает данные из хранилища
     * @return mixed
     */
    public function getStorageValue();

    /**
     * Проверяет, есть ли передаваемые данные в хранилище
     * @param array $values
     * @return mixed
     */
    public function isStorageValue(array $values);
}
И еще 1 новый класс Favorites  - его работа заключается в том, чтобы определить на основе авторизации какое хранилище данных использовать.

Все классы построены по шаблону проектирования Singleton.
Вся работа происходит с классом Favorites.
Получаем хранилище данных избранного
 Favorites::getInstance()->getStorageObject() 
А далее используем любые методы хранилища представленные в интерфейсе, например получим все данные
Favorites::getInstance()->getStorageObject()->getStorageValue()
События модуля

Все события делятся на After и Before

Before вызываются до совершения действия и могут повлиять на результат - для отмены действия требуется вернуть false из функции.

Аfter - после

События
OnBeforeValueCookieToPropertyMove 
OnAfterValueCookieToPropertyMove

происходят в момент авторизации пользователя в системе, когда способ хранения данных в куках меняется на хранение в свойстве пользователя

Следующие группы событий работают непосредственно с добавлением или удалением данных

Вызывается перед добавлением элемента в куку

$values - массив элементов

AddEventHandler("itserw.wishlist", "OnBeforeCookieFavoritesValueAdd", "MyBeforeCookieFavoritesValueAdd");

function MyBeforeCookieFavoritesValueAdd(&$values){

return false;
}

Вызывается перед удалением элемента из куки

AddEventHandler("itserw.wishlist", "OnBeforeCookieFavoritesValueDelete", "MyOnBeforeCookieFavoritesValueDelete");

function MyOnBeforeCookieFavoritesValueDelete(&$values){
$values = array(7);
}

Вызывается после добавления элемента в куку

AddEventHandler("itserw.wishlist", "OnAfterCookieFavoritesValueAdd", "MyAfterCookieFavoritesValueAdd");

function MyAfterCookieFavoritesValueAdd($values){

}

Вызывается после удаления элемента из куки

AddEventHandler("itserw.wishlist", "OnAfterCookieFavoritesValueDelete", "MyOnAfterCookieFavoritesValueDelete");

function MyOnAfterCookieFavoritesValueDelete($values){

}

Аналогичные функции, только если данные хранятся свойстве пользователя

AddEventHandler("itserw.wishlist", "OnBeforeCustomPropertyFavoritesValueAdd", "MyBeforeCustomPropertyFavoritesValueAdd");

function MyBeforeCustomPropertyFavoritesValueAdd(&$values){

return false;
}


AddEventHandler("itserw.wishlist", "OnBeforeCustomPropertyFavoritesValueDelete", "MyBeforeCustomPropertyFavoritesValueDelete");

function MyBeforeCustomPropertyFavoritesValueDelete(&$values){
$values = array(9);
}



AddEventHandler("itserw.wishlist", "OnAfterCustomPropertyFavoritesValueAdd", "MyAfterCustomPropertyFavoritesValueAdd");

function MyAfterCustomPropertyFavoritesValueAdd($values, $user){

}


AddEventHandler("itserw.wishlist", "OnAfterCustomPropertyFavoritesValueDelete", "MyAfterCustomPropertyFavoritesValueDelete");

function MyAfterCustomPropertyFavoritesValueDelete($values, $user){

}

Поддержка

Другие решения разработчика

Решение добавлено в корзину

Перейдите в корзину и оформите заказ или продолжите покупки
Перейти в корзину
Продолжить покупки