Программистам
| Важно! Если после установки кодов на странице вы видите ошибку [an error occurred while processing the directive], значит у вас подключен SSI и вам нельзя использовать в кодах символ #. Пишите например так: <!--{...}-->. Пропишите вручную в настройках модуля вместо #. |
| Важно! Перед удалением модуля нужно сперва удалить разделы на всех сайтах вручную. |
define('LYRMIN_FAVORITE_DISABLE_JS', 'Y');
// JavaScript
class FavoriteList extends Favorite {}
let favorite = new FavoriteList(); |
Счётчик избранного на странице
Выводит на странице цифру с количеством элементов добавленных в избранное пользователя. Так же является ссылкой на страницу со списком избранного. Принцип работы: Разместите на странице в нужном месте код . Во время загрузки страницы данный код будет заменён на HTML код из настроек, по умолчанию: <a href="/personal/favorite/" data-lyrmin-favorite-counter=""></a>. Данный код может быть любым, важно присутствие аттрибута: data-lyrmin-favorite-counter="" так как по нему система определяет в каком html-элементе выводить количество элементов избранного.
Типы избранногоЭто списки избранного которые вы хотите использовать на своём сайте. Важно: Если вы удалили какой-то тип, то из избранного пользователей элементы этого типа не удаляются. В любой момент вы можете вернуть работу с типом обратно.
Кнопки избранного на страницахКнопок можно сделать сколько угодно. Допустим у вас на сайте каталог товаров к которому вы хотите привязать 2 кнопки (like, dislike). При этом данные кнопки могут иметь разный дизайн и добавлять элементы в разные типы. Работа кнопок строится с использованием регулярного выражения которое в себе содержит группу для выборки числа - ID элемента инфоблока.
Рассмотрим шаблоны по умолчанию:
Регулярные выражения:
<!--#FAV_DETAIL_ID-([0-9]+)#--> <!--#FAV_DISLIKE_DETAIL_ID-([0-9]+)#--> |
Регулярное выражение может быть любым, главное чтобы оно содержало одно правило для выделения целого числа - идентификатора элемента.
PHP код на странице товара в каталоге, который необходимо разместить в шаблоне компонента:
<!--#FAV_DETAIL_ID-<?= $arResult["ID"]; ?>#--> <!--#FAV_DISLIKE_DETAIL_ID-<?= $arResult["ID"]; ?>#--> |
По регулярному выражению модулем при загрузке страницы будет найден соответствующий код и заменён на HTML код в соответствии своему регулярному выражению. Таким образом для каждого регулярного выражения можно сделать индивидульный дизайн кнопки. На одной странице могут находится разные компоненты с разным дизайном кнопок обрабатывающие элементы с одинаковыми ID инфоблокв:
<span data-lyrmin-favorite='{"id":"#ID#","type":"like","class":""}' style="display: none;">{{#if added}}Расхотелось!{{else}}Хочу!{{/if}} ({{quantity}})</span>
<span data-lyrmin-favorite='{"id":"#ID#","type":"dislike","class":""}' style="display: none;">{{#if added}}Вроде нормально!{{else}}Не нравится!{{/if}} ({{quantity}})</span> |
Атрибут data-lyrmin-favorite: "id":"#ID#" - обязательный параметр, будет заменён на идентификатор элемента инфоблока. "type":"like" - необязательный параметр, к какому типу относится из настройки Типы избранного. "class":"" - необязательный параметр, какой класс установить к добавленным элементам. В тексте шаблона quantity это количество лайков данного элемента соответствующего типа. Если вам понадобится php код в верстке, укажите его в стандартных php тегах: <?= SITE_ID; ?>
Бывают ситуации когда необходимо указать ID элемента инфоблока явным образом, это можно сделать например так:
<!--#FAV_DETAIL_ID-69#--> <!--#FAV_DISLIKE_DETAIL_ID-746#--> |
Настройка используется для многосайтовости. Например, вы используете один каталог на разных сайтах. На одном сайте он находится в директории /catalog/, на другом /catalogue/. Чтобы при клике по элементу в избранном на странице /personal/favorite/ произошёл переход на соответствующую сайту страницу можно для данного сайта прописать шаблон ЧПУ детальной страницы в соответствии с правилами 1С-Битрикс. Можно просто скопировать правило из настроек комплексного компонента каталога. Пример: #SITE_DIR#catalog/#SECTION_CODE#/#ELEMENT_CODE#.html В случае если произошёл сбой или вы поменяли ЧПУ, можно переписать в избранном ссылки в соответствии с новыми правилами, для этого нажмите на кнопку ниже: Обновить ЧПУ Url.
События PHPСобытия сделаны стандартно используя d7, с возможностью обработки результата, формирования ошибок, остановкой обработки элемента. Под элементом подразумевается элемент избранного.
use Bitrix\Main\EventManager;
use Bitrix\Main\Event;
use Bitrix\Main\Entity\EntityError;
use Bitrix\Main\Entity\EventResult;
// Изменение данных перед сохранением.
// Отмена изменения записи через ошибку.
EventManager::getInstance()->addEventHandler(
"lyrmin.favorite",
"OnLyrminFavoriteBeforeSaved",
"OnLyrminFavoriteBeforeFunction"
);
// Изменение данных перед удалением.
// Отмена удаления записи через ошибку.
EventManager::getInstance()->addEventHandler(
"lyrmin.favorite",
"OnLyrminFavoriteBeforeDelete",
"OnLyrminFavoriteBeforeFunction"
);
function OnLyrminFavoriteBeforeFunction(Event $event) {
$arParams = $event->getParameters();
// Простая установка новых параметров
$event->setParameters($arParams);
// Модификация и удаление отдельных параметров
$r = new EventResult(EventResult::SUCCESS, $arParams, $event->getModuleId());
$r->modifyFields(['TEST' => 'Y']); // Модификация поля
$r->unsetField('URL'); // Удаление поля
// Возвращение ошибки, отмена изменения или удаления записи
$r->addError(new EntityError('Modify parameter error', 'ERROR_PARAMETER_CHANGE'));
return $r;
}
// Получение параметров сохранённой записи для дальнейшей работы.
// Параметры записи изменить уже нельзя.
EventManager::getInstance()->addEventHandler(
"lyrmin.favorite",
"OnLyrminFavoriteSaved",
"OnLyrminFavoriteFunction"
);
// Получение параметров удалённой записи для дальнейшей работы.
// Отменить удаление записи уже нельзя.
EventManager::getInstance()->addEventHandler(
"lyrmin.favorite",
"OnLyrminFavoriteDelete",
"OnLyrminFavoriteFunction"
);
function OnLyrminFavoriteFunction(Event $event) {
$arParams = $event->getParameters();
} |
Срабатывают после первой загрузки страницы, а так же после действия с элементом.
e.getData() - содержит объект Favorite();// Обработка результата
BX.addCustomEvent('onLyrminFavoriteResult', BX.delegate(function (e) {
let _ = e.getData();
let result = _.getResult();
console.log("onLyrminFavoriteResult", result);
}));
// Обработка ошибки
BX.addCustomEvent('onLyrminFavoriteError', BX.delegate(function (e) {
let _ = e.getData();
let error = _.getResult();
console.log("onLyrminFavoriteError", error);
})); |
class FavoriteList extends Favorite {
// Расширяйте возможности класса Favorite
}
let favorite = new FavoriteList({debug: true, favoriteUrl: '/favorite/'});
|
Режим Ajax (AJAX_MODE) для компонент
Доступно с версии 1.0.2.
Для корректной работы компонента в начало файла template.php добавьте код:
<?php if (Bitrix\Main\Context::getCurrent()->getRequest()->isAjaxRequest()): ?><sc ript>BX.ready(function () {favorite.reload();});</sc ript><?php endif; ?>
|
Внимание! Повторная установка в демо-режиме приведет к окончанию демо‑режима и невозможности использовать модуль.