UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: Cubes от 15 Января 2016, 10:41:33

Название: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: Cubes от 15 Января 2016, 10:41:33
Собственно встала такая задача. Мы находимся в "Раздел1", в котором присутствует фильтр по цене (работающий и по вложенным каталогам). Задаем цену от 10 руб. до 15 руб, в результате получаем те разделы(выделены жирным), в объектах которых найдено совпадение(выделено красным).

Пример для наглядности:

Раздел1:
  - Подраздел1:
    -- Объект1 (цена: 11 руб.)
    -- Объект2 (цена: 14 руб.)
  - Подраздел2:
    -- Объект3 (цена: 13 руб.)
    -- Объект4 (цена: 20 руб.)
  - Подраздел3:
    -- Объект5 (цена: 16 руб.)
    -- Объект6 (цена: 21 руб.)

Соответственно на выходе получаем:

Найдено в разделах:
  - Подраздел1
  - Подраздел2
.

Насколько я пониманию, нужно писать кастомный макрос на основе getObjectList, однако в таком случае, если выводить родительскую категорию объекта, в котором найдено совпадение, может возникнуть проблема дублей (в "Подраздел1" есть 2 объекта, в которых найдено совпадение, соответственно "Подраздел1" будет выводится 2 раза). Поделитесь, если есть мысли в какую сторону смотреть и как это красиво реализовать. Работаю с TPL. Спасибо!
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: crazygeorgio от 15 Января 2016, 16:32:03
вызываем метод getObjectList, либо через selector делаем выборку, потом проходимся по массиву и получаем родительскую страницу, пишем ее в массив, потом убираем в массиве дубли
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: Cubes от 15 Января 2016, 16:46:31
Вот с этим "...selector делаем выборку, потом проходимся по массиву и получаем родительскую страницу" и есть проблема. Можете ткнуть, где посмотреть? Если вызываем getObjectList в "Раздел1", то для полученных объектов родительская страница - "Раздел1".
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: crazygeorgio от 15 Января 2016, 16:53:30
у вас же структура
Цитировать
Раздел1:
  - Подраздел1:
    -- Объект1 (цена: 11 руб.)
    -- Объект2 (цена: 14 руб.)
  - Подраздел2:
    -- Объект3 (цена: 13 руб.)
    -- Объект4 (цена: 20 руб.)
  - Подраздел3:
    -- Объект5 (цена: 16 руб.)
    -- Объект6 (цена: 21 руб.)

значит родительская для объектов будет не Раздел 1, а соответствующие подразделы
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: crazygeorgio от 15 Января 2016, 16:54:28
по селектору http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/proizvolnye_vyborki/selector/
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: velodemort от 19 Января 2016, 13:21:32
Здравствуйте! Столкнулся с аналогичной проблемой. Не могу понять, как подружить getObjectList и selector. GetObjectList позволяет отобрать объекты каталога с учетом фильтрации (fields_filter=) и пагинации (p=), а как теперь передать эти данные (отфильтрованные) для обработки в selector (если это вообще так делается)? Или придется усовершенствовать свою выборку, чтобы она принимала данные фильтрации и пагинации?
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: crazygeorgio от 19 Января 2016, 13:25:44
и что вы в селекторе собираетесь делать с данными из getObjectList???
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: velodemort от 19 Января 2016, 13:38:19
Т.е. я правильно понимаю, что нужно писать кастомный макрос, в котором используется selector, учитывающий фильтрацию и пагинацию (проверять через getRequest())? Иного решения нет?
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: crazygeorgio от 19 Января 2016, 13:45:31
вам вообще для чего???
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: velodemort от 19 Января 2016, 14:02:03
У меня похожая структура, как у автора топика, структура примерно такая:
- Группа товаров  (каталог)
  -- Товар (каталог)
   --- Магазин 1. (объект)
   --- Магазин 2. (объект)

Т.е. в каждом товаре, который представляет собой раздел у меня несколько магазинов (объектов). Меня интересует, например поиск по наличию товара, но выводить нужно не магазины, а категории, т.е. товары (внутри которых, в объектах, найдено совпадение). И даже если "товар 1" есть в двух магазинах, показать нужно все-равно один раздел "Товар 1".
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: crazygeorgio от 19 Января 2016, 14:08:52
так вот я и предложил искать объекты с помощью селектора, без учета номера страницы, потом проходиться по выбранным объектам и получать родителя, т.е. каталог в вашем случае, потом уже работаешь с массивом каталогов, т.е. удаляешь дубли, делаешь пагинацию и т.д. я других вариантов не вижу
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: e.ioffe от 19 Января 2016, 23:47:19
Мне кажется, что наличие в разных магазинах лучше делать с использованием составного поля для товара. Selector по нему ищет без особенных проблем + не нужно будет мучаться пагинацией, адресами и т.п.
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: crazygeorgio от 20 Января 2016, 00:08:12
Цитировать
Selector по нему ищет без особенных проблем + не нужно будет мучаться пагинацией, адресами и т.п.

это вот очень интересно, и как же селектор ищет по составному полю???
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: e.ioffe от 20 Января 2016, 00:19:59
http://wiki.umisoft.ru/Selector_-_%D0%BF%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_%D0%B2%D1%8B%D0%B1%D0%BE%D1%80%D0%BA%D0%B8_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85#.D0.9F.D0.BE.D0.B8.D1.81.D0.BA_.D0.BF.D0.BE_.D1.81.D0.B2.D0.BE.D0.B9.D1.81.D1.82.D0.B2.D0.B0.D0.BC_.D1.82.D0.B8.D0.BF.D0.B0_optioned
Название: Re: Вывод разделов, а не объектов каталога при фильтрации.
Отправлено: crazygeorgio от 20 Января 2016, 00:39:58
$pages->where('stores_state')->equals(array('int' => 123));

слабовато как-то, выбрать где значение опции равно 123... если касаемо магазинов, то было бы логичнее искать по ненулевому значению int