Как вывести отфильтрованный список контента? 2.X

 
Посетитель
small user social cms
Сообщений: 12
Делаю виджет.
Виджет показывается на страницах списка контента.
В нем нужно вывести список значений полей записей контента, допустим, - заголовки (title).
Например, мы находимся на странице списка объявлений в категории - Недвижимость -> Квартиры, отфильтрованного по цене.
В виджете нужно вывести весь отфильтрованный список заголовков из текущей категории.
Что можно написать в файле widget.php, чтобы записать этот список в переменную для передачи в шаблон?
Посетитель
small user social cms
Сообщений: 12
Андрей В:

Делаю виджет.
Виджет показывается на страницах списка контента.
В нем нужно вывести список значений полей записей контента, допустим, - заголовки (title).
Например, мы находимся на странице списка объявлений в категории - Недвижимость -> Квартиры, отфильтрованного по цене.
В виджете нужно вывести весь отфильтрованный список заголовков из текущей категории.
Что можно написать в файле widget.php, чтобы записать этот список в переменную для передачи в шаблон?
Люди, помогите? )
Реклама
cms
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4074
Андрей В:
Что можно написать в файле widget.php
Можно написать всё что угодно. Но много зависит, где вы делаете свой виджет. В content, в каком-то другом контроллере или вообще без контроллера.
Тут https://github.com/instantsoft/icms2/blob/master/system/controllers/content/widgets/list/widget.php есть пример того, что можно написать в файле widget.php. В вашем случае надо будет определить текущую категорию через
Код PHP:
  1. getCategoryBySLUG($ctype_name, $slug)
и задать ее вместо этого блока https://github.com/instantsoft/icms2/blob/master/system/controllers/content/widgets/list/widget.php#L54
Посетитель
small user social cms
Сообщений: 12
Loadырь:

Можно написать всё что угодно. Но много зависит, где вы делаете свой виджет. В content, в каком-то другом контроллере или вообще без контроллера.
Тут https://github.com/instantsoft/icms2/blob/master/system/controllers/content/widgets/list/widget.php есть пример того, что можно написать в файле widget.php. В вашем случае надо будет определить текущую категорию через
Код PHP:
  1. getCategoryBySLUG($ctype_name, $slug)
и задать ее вместо этого блока https://github.com/instantsoft/icms2/blob/master/system/controllers/content/widgets/list/widget.php#L54
Спасибо за помощь! Но что-то не получается.
Виджет пока без контроллера. Но потом, может, запихну в контроллер контента, или создам отдельный.
По сути, мне надо получить то же, что и выводится в стандартном списке контента, только без пагинации.

Записал на видео, может понятней будет вопрос? )
https://youtu.be/MHvygibNamQ
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4074
Не сработало и не сработает. Так как тот код завязан на контроллере content, а вы пытались без контроллера его запустить. Всунете виджет в контроллер content, тогда заработает. Либо переписывать все запросы с учетом безконтрольности.
Андрей В:
По сути, мне надо получить то же, что и выводится в стандартном списке контента, только без пагинации.
Чтобы убрать ограничения на количество записей в списке виджета, надо тут https://github.com/instantsoft/icms2/blob/master/system/controllers/content/widgets/list/widget.php#L14 поставить
Код PHP:
  1. $limit = 0;
В типе контента список формируется тут https://github.com/instantsoft/icms2/blob/master/system/controllers/content/frontend.php#L217. Там можете увидеть и как фильтрация сделана из фильтра.
Андрей В:
Записал на видео
Посмотрел видео и думаю вы хотите сделать что-то такое https://prefitchi.ru/hotels ?
Там всё непросто и на пальцах это не объяснить.
Для начала фильтрация количества записей всё таки будет нужна. Как минимум при >3000 записей на ПК и при >1000 записей на мобилках у вас карта и страница с ней будут страшно тормозить.
Затем вы столкнетесь с ограничениями Яндекса на карте (25000 запросов в сутки и эта цифра не такая и большая как многим кажется). И это тоже вам надо будет как-то обходить.
Из-за этих ограничений потом вам надо будет решить задачу "Как вывести на карте только те записи, которые входят в область карты при ее прокрутке?".
Остальные мелочи по работе с картой Яндекса (объединение меток в кластеры, масштабирование области карты по содержимому и т. п.), вполне можете осилить.
В общем могу лишь пожелать удачи в этом деле.
Редактировалось: 1 раз (Последний: 3 апреля 2021 в 20:42)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 3374
Андрей В:
В виджете нужно вывести весь отфильтрованный список заголовков из текущей категории.
Что можно написать в файле widget.php, чтобы записать этот список в переменную для передачи в шаблон?
Может быть проще сделать?
Создать набор в типе контента, отфильтровать по цене
Спойлер
А в виджете выводить контент из этого набора?
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4074
Ris, вся фишка в том, что категория должна автоматически определяться и записи должны фильтроваться по фильтру набранному пользователем на сайте.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 3374
Loadырь:
Ris, вся фишка в том, что категория должна автоматически определяться и записи должны фильтроваться по фильтру набранному пользователем на сайте.
Тогда может хук content_list_filter ?
В нём получаем категорию из урла, фильтр из POST и вперёд?
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4074
slug и фильтр есть в request, по slug найти категорию не сложно, остальное дело техники.
Посетитель
small user social cms
Сообщений: 12
Loadырь:
Всунете виджет в контроллер content, тогда заработает.
Я попробовал это сделать с \system\controllers\content\widgets\list\widget.php
Никаких изменений его поведения не обнаружил.
Loadырь:
Посмотрел видео и думаю вы хотите сделать что-то такое https://prefitchi.ru/hotels ?
Скорее как здесь - https://move.ru, ну или как на Авито, в Циане и т.д. Доска объяв недвижимости специфична, в отличие от простых объяв. Нужно активно работать с адресами и картой. Пока в инстанте никто еще не реализовал этот функционал, а зря. Приходится самому делать, хоть я и не прогер )
Loadырь:
Затем вы столкнетесь с ограничениями Яндекса на карте (25000 запросов в сутки и эта цифра не такая и большая как многим кажется). И это тоже вам надо будет как-то обходить.
Уже обошел ) Ключ у меня используется только единожды при добавлении объявления. Там идет проверка введенного адреса и если он есть, то вычисляются координаты. Которые потом, при просмотре списка и записи контента выводятся в отдельном шаблоне уже без ключа - он им не нужен.
Так что в день можно загружать минимум 5-10 тыс объяв. Сам просмотр их на сайте - "бесплатный" ))
Loadырь:
Из-за этих ограничений потом вам надо будет решить задачу "Как вывести на карте только те записи, которые входят в область карты при ее прокрутке?".
Да, по идее надо, но думаю пока обойдусь. Так как не планирую размещать тысячи объяв. А для ускорения, можно выводить только минимальную информацию - заголовок, цена и координаты. Остальное можно подгружать (фото и прочее) аяксом при клике пользователем по метке на карте. (Уже работает).
Loadырь:
вся фишка в том, что категория должна автоматически определяться и записи должны фильтроваться по фильтру набранному пользователем на сайте.
Да, все верно.
Loadырь:
В типе контента список формируется тут https://github.com/instantsoft/icms2/blob/master/system/controllers/content/frontend.php#L217. Там можете увидеть и как фильтрация сделана из фильтра.
Сегодня именно этот файл исследовал. Чувствую, что в нем разгадка. Но не могу понять (нет знаний) как это все втыкнуть в виджет? )
Посетитель
small user social cms
Сообщений: 12
Вопрос актуален.
Кто-нибудь может дать рабочий код?
Или, если есть готовый сайт объявлений недвижимости по типу перечисленных выше, готов купить.
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.