UMIhelp
Разработка дополнительного функционала => Custom макросы => Тема начата: 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. Спасибо!
-
вызываем метод getObjectList, либо через selector делаем выборку, потом проходимся по массиву и получаем родительскую страницу, пишем ее в массив, потом убираем в массиве дубли
-
Вот с этим "...selector делаем выборку, потом проходимся по массиву и получаем родительскую страницу" и есть проблема. Можете ткнуть, где посмотреть? Если вызываем getObjectList в "Раздел1", то для полученных объектов родительская страница - "Раздел1".
-
у вас же структура
Раздел1:
- Подраздел1:
-- Объект1 (цена: 11 руб.)
-- Объект2 (цена: 14 руб.)
- Подраздел2:
-- Объект3 (цена: 13 руб.)
-- Объект4 (цена: 20 руб.)
- Подраздел3:
-- Объект5 (цена: 16 руб.)
-- Объект6 (цена: 21 руб.)
значит родительская для объектов будет не Раздел 1, а соответствующие подразделы
-
по селектору http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/proizvolnye_vyborki/selector/
-
Здравствуйте! Столкнулся с аналогичной проблемой. Не могу понять, как подружить getObjectList и selector. GetObjectList позволяет отобрать объекты каталога с учетом фильтрации (fields_filter=) и пагинации (p=), а как теперь передать эти данные (отфильтрованные) для обработки в selector (если это вообще так делается)? Или придется усовершенствовать свою выборку, чтобы она принимала данные фильтрации и пагинации?
-
и что вы в селекторе собираетесь делать с данными из getObjectList???
-
Т.е. я правильно понимаю, что нужно писать кастомный макрос, в котором используется selector, учитывающий фильтрацию и пагинацию (проверять через getRequest())? Иного решения нет?
-
вам вообще для чего???
-
У меня похожая структура, как у автора топика, структура примерно такая:
- Группа товаров (каталог)
-- Товар (каталог)
--- Магазин 1. (объект)
--- Магазин 2. (объект)
Т.е. в каждом товаре, который представляет собой раздел у меня несколько магазинов (объектов). Меня интересует, например поиск по наличию товара, но выводить нужно не магазины, а категории, т.е. товары (внутри которых, в объектах, найдено совпадение). И даже если "товар 1" есть в двух магазинах, показать нужно все-равно один раздел "Товар 1".
-
так вот я и предложил искать объекты с помощью селектора, без учета номера страницы, потом проходиться по выбранным объектам и получать родителя, т.е. каталог в вашем случае, потом уже работаешь с массивом каталогов, т.е. удаляешь дубли, делаешь пагинацию и т.д. я других вариантов не вижу
-
Мне кажется, что наличие в разных магазинах лучше делать с использованием составного поля для товара. Selector по нему ищет без особенных проблем + не нужно будет мучаться пагинацией, адресами и т.п.
-
Selector по нему ищет без особенных проблем + не нужно будет мучаться пагинацией, адресами и т.п.
это вот очень интересно, и как же селектор ищет по составному полю???
-
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
-
$pages->where('stores_state')->equals(array('int' => 123));
слабовато как-то, выбрать где значение опции равно 123... если касаемо магазинов, то было бы логичнее искать по ненулевому значению int