Project Title
Проект создан для вывода ресурсов у клиента с учетом пагинации, на modx версии 2.6.1-pl и выше. Основное отличие от pdoResources и аналогов, в том что позволяет выводить данные с учетом последовательности сложной сортировки. Например, есть сайт на говнохостинге, с общим списком товаров > 100000. Необходимо получить товары в следующией последовательности не нарушая общее кол-во товаров и пагинации:
- Только с обозаченные как "особенные"
- С ценой до 100 (исключая особенные)
- С ценой 100-199 (исключая особенные)
- Популярные (исключая предыдущие пункты)
- ...
- все остальные
Тип ресурса, связи с другими ресурсами и таблицами не имеет значения. Вы можете даже выводить данные которые находятся вне схемы БД modx.
Getting Started
Приложение, требует наличие компонента Bp, если у вас его нет... вы можете заменить используемые вызовы на свои.
Prerequisities
You'll need to install:
- PHP (Minimum 7.3)
Installing
Usage
Для каждого нового appId необходимо создать файл с соответствующим именем в src/Filter. Смотрите примеры в папке. Все необходимые плагины и сниппеты лежат в папке elements.
Snippet
Вывод ресурсов на странице.
[[!+page.nav]]
[[!pdoPage?
&showLog=`0`
&element=`bp.cocain`
&appId=`business`
&resourceId = `[[*id]]`
&where=`{"template":"30","parent":"[[++bp.filters_businessId]]"}`
&TV_tvPrefix=`TV`
&includeTVs=`img,anyUrl,currency,topnine,international,categories,projectCountry,projectRegion,projectCity,stage,cost(int),patent`
]]
TODO
- Метод поиска таблиц по префиксу в имени
- Метод определения appId
- Метод добавляющий в регистр запись о том что нужно сбросить кеш у определенного приложения (app_id + context_key)
- Метод получения инфы из регистра о том что нужно сбросить кеш
- Задание cron сброса кеша по указанному идентификатору приложения - cron_clearCocaineCache
- Реакция на событие - добавление в регистр информации о необходимости сброса кеша сделать отмену сброса, т.е. выкидывать задание из кеша при некоторых условиях Например менеджер опубликовал проект, пользователь отредактировал и он снялся с публикации время между этими действиями не достигло момента обновления, т.е. обновлять нет нужды, но как поступать если у нас несколько заказов на сброс кеша одного и того же приложения: регистр выглядит как: bp_cocain -> project -> в очереди uid|time, а в payload ['project name' => uid] Тогда можно будет удалять из очереди не нужные данные зная uid, например это может быть номер проекта.
- Добавить класс UsersFilter
- UsersFilter - оживить where
- UsersFilter - сджоинить с таблицей ресурсов, для проверка наличия ресурсов это можно сразу отображать, есть ресурс или нет
- UsersFilter - сджоинить с таблицей оплаченных заказов
- добавить кнопку в USERS для сброса кеша
- выводить есть ли оплата и ресурсы в общей таблице
- сброс кеша для бизнесов
- ???не правильно работает setTotal при наличии условия where, он кажется его не запускает
- ??? параметр пачек может сделать динамическим он не всегда нужен
- ??? Trait или abstarct или array_merge(config_default, config)
- Если документ сняли с публикации, когда он должен пропасть из кеша? Сразу или при общем сбросе?
- Реакция на событие при сбросе кеша - отчистка мусора: удаление таблиц из БД
- Реакция на событие при общем сбросе кеша
- Добавить инфу в регистр о необходимости сброса кеша для app_id: projects
- Добавить инфу в регистр о необходимости сброса кеша для app_id: users
- Добавить блокировку долгих методов через файл lock например. См метод lockFile core/xpdo/cache/xpdocachemanager.class.php
- Добавить блокировку во время очистки кеша ???
- Улучшить проброс ошибок так чтобы получить имя метода и класса где она произошла (getTrace, getLine либо посмотреть как реализовано в cron)
Authors
License
This project is licensed under the MIT License - see the LICENSE.md file for details.