Skip to content

Модуль фильтров для посадочных страниц. 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() - Проверка на integer
  • bool isEnum()- Проверка на enum
  • bool isText() - Проверка на text
  • bool 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
  }

Планируемые доработки

  • Интерфейс для привязки элементов