Appearance
Модуль фильтров для посадочных страниц. realweb.api.seo.filter
Совместимость
realweb.api v.6
Зависимости
realweb.api.elasticsearch v.6
realweb.api.migration v.6
Модуль позволяет создавать сео посадочные страницы для каталога с предустановленным фильтром.
Каждая страница является элементом инфоблока “Пресеты фильтров” со своим адресом, привязкой к категориям товара, метатегами, сео текстом и набором "фильтров" для товаров.
Модуль предоставляет интерфейс заполнения страниц для контент-менеджера и api для получения страниц для разработчика
Пример - hair-boutique-nuxt.bitrix.dev.realweb.ru
Каталог продажи волос для наращивания. Необходимо создать страницу по фильтру: Тип волос: Славянские Тип крепления: Капсулы Длина: 40 см.
Модуль не ограничен для использования только в одном инфоблоке. При желании “рядом” можно расположить пресеты фильтров для второго каталога товаров и т.д.
Настройки
Для добавления свойств в интерфейс управления фильтрами необходимо добавить ID этих свойств в пользовательское свойство инфоблока ID свойств для отображения (UF_PROPERTY_ID)
Практическое использование
Перед вызовом методов фильтрации необходимо установить ID целевого инфоблока
php
use Realweb\Api\Module\Seo;
Seo\Model\Filter\Helper::getInstance()->setIblockId(Catalog\Model\Helper::PRESET_FILTER_IBLOCK_ID);Получение всех сео страниц для раздела
php
use Realweb\Api\Module\Seo;
$obCollection = Seo\Model\Filter\Helper::getInstance()->getElasticItemsBySectionId($iSectionId);Получение всех сео страниц по фильтру
php
use Realweb\Api\Module\Seo;
$arFilter = array(
'SECTION_ID'=>1,
'PRICE'=>array('min'=>0),
'1'=>array(2,3) //1 - ID свойства
);
$obCollection = Seo\Model\Filter\Helper::getInstance()->getElasticItemsByFilter($arFilter);Параметры фильтра:
SECTION_ID- раздел (IDили массивID)PRICE- массив видаarray("min"=>$iMin,"max"=>$iMax)IBLOCK_ID- ID инфоблока каталога с товарамиURL- адрес страницы{ID свойства}- фильтрация по свойству каталога. Фильтрация по "числовому" типу осуществляется в виде массиваarray("min"=>$iMin,"max"=>$iMax)
Получение сео страницы по адресу
php
use Realweb\Api\Module\Seo;
/** @var Seo\Model\Filter\Elastic\Item\Entity $obItem */
$obItem = Seo\Model\Filter\Helper::getInstance()->getElasticItemByUrl($strUrl);Основная сущность сео страницы
Seo\Model\Filter\Elastic\Item\Entity
Обладает следующими встроенными методами:
int getId()-IDэлемента страницы в инфоблокеint getIblockId()-IDинфоблокаstring getName()- Названиеstring getUrl()- Адрес страницыarray getSectionId()- Массив привязанных разделовint getPriceMin()- Минимальная ценаint getPriceMax()- Максимальная ценаSeo\Model\Filter\Elastic\Item\Property\Collection getProperties()- Коллекция свойств
Сущность свойства страницы
Seo\Model\Filter\Elastic\Item\Property\Entity
Обладает следующими встроенными методами:
int getId()-IDсвойства в инфоблоке (Свойство цены имеетID=PRICE)string getType()- Тип свойстваinteger- целое числоenum- список выбораtext- текстовое свойство
bool isRange()- Проверка на integerbool isEnum()- Проверка на enumbool isText()- Проверка на textbool hasValue()- Проверка на наличие значенияSeo\Model\Filter\Elastic\Item\Property\Value\Entity getFilterValue()- получение значенияSeo\Model\Filter\Elastic\Item\Property\Value\Collection getFilterValueCollection()- получение коллекции значений
Разница между getFilterValue() и getFilterValueCollection() в подходе формирования фильтра.
getFilterValue()
Отдает единственное значение для формы. В качестве значения будет строка, массив ID или же массив вида array("min"=>$iMin,"max"=>$iMax) (Например, для поля price)
getFilterValueCollection()
Отдает коллекцию значения для формы. Для полей типа "range" коллекция будет содержать 2 поля с разными именами с постфиком min или max
События
После получения имени свойства и его значения вызываются события onAfterGetFieldName и onAfterGetFieldValue
php
public static function onAfterGetFieldName(string &$strResult, Seo\Model\Filter\Elastic\Item\Property\Entity $obProperty, string $strPostfix): void
{
}
public static function onAfterGetFieldValue(string &$strResult, Seo\Model\Filter\Elastic\Item\Property\Entity $obProperty, string $strPostfix): void
{
}Практический пример
php
namespace Realweb\Api\Module\Catalog\Model\Section;
use Realweb\Api\Module\Seo;
class Entity extends \Realweb\Api\Model\Iblock\Section\Entity
{
public function toJson(): array
{
$arData = array(
'id' => (int) $this->getId(),
'title' => $this->getName(),
'filters' => $this->toJsonPresets(),
);
return $arData;
}
public function toJsonPresets(): array
{
$arResult = array();
Seo\Model\Filter\Helper::getInstance()->setIblockId(Catalog\Model\Helper::PRESET_FILTER_IBLOCK_ID);
$obCollection = Seo\Model\Filter\Helper::getInstance()->getElasticItemsBySectionId($this->getId());
foreach ($this->getSeoFilters()->getCollection() as $obSeoFilter) {
$arItem = array(
'id' => (int) $obSeoFilter->getId(),
'label' => $obSeoFilter->getName(),
'url' => $obSeoFilter->getUrl(),
);
}
}
return $arResult
}Планируемые доработки
- Интерфейс для привязки элементов

