Давно хотел предложить на гитхабе немного расширить возможности сортировки и фильтрации в датасетах.
То есть дать продвинутым администраторам сайта самим создавать нужные фильтры и сортировки для датасетов, путем прописывания mysql в настройках набора в админке, а не выбирать из предложенных вариантов.
Но потом подумал, что разработчики не станут вводить это в коробку, так как этот функционал придется поддерживать и каким-то образом разъяснять пользователям, как им пользоваться. А кому это нужно, учить людей извращениям.
Но, после этой темы на форуме, я увидел, что такой функционал может быть востребован у людей, разбирающихся в mysql.
Поэтому решил сделать маленькое дополнение, состоящее из двух хуков, которое позволяет прямо из админки прописывать сложносочиненные фильтры и сортировки датасетов.
Первый хук изменяет форму настройки датасетов в админке. Второй добавляет эти нестандартные фильтры и сортировки в модель при получении списка типа контента в наборе.
Ни один системный файл не подвергался правке.
После установки данного компонента появляется в админке возможность написать свой запрос mysql в настройках датасетов.
Пример:
Мы хотим в датасете получить контент с датой публикации только за сегодняшний день (а не за прошедшие сутки) с сортировкой по никнейму автора.
Создаем новый набор и там прописываем в настройках нужную сортировку и фильтрацию:
В результате получаем вполне нормальный запрос mysql:
Сразу предупреждаю, пользоваться этим дополнением смогут только люди, понимающие, что они делают!
Никакие претензии по поводу "я что-то там написал, а теперь что-то не работает" не принимаются.
Это инструмент, а не готовый функционал!
UPDATE
Немного доработал возможности манипуляции сортировкой. Теперь возможны самые сложносочиненные сортировки для джентльменов, знающих толк в извращениях.
Пример:
Мы хотим получить статьи со свежими комментариями, отсортированными по свежести комментариев.
Пишем в my sotring строку (select date_pub from cms_comments where target_id = i.id group by date_pub) desc
Получаем запрос для выборки:
Выглядит страшно, но работает!
Установка дополнения стандартным способом из админки.
То есть дать продвинутым администраторам сайта самим создавать нужные фильтры и сортировки для датасетов, путем прописывания mysql в настройках набора в админке, а не выбирать из предложенных вариантов.
Но потом подумал, что разработчики не станут вводить это в коробку, так как этот функционал придется поддерживать и каким-то образом разъяснять пользователям, как им пользоваться. А кому это нужно, учить людей извращениям.
Но, после этой темы на форуме, я увидел, что такой функционал может быть востребован у людей, разбирающихся в mysql.
Поэтому решил сделать маленькое дополнение, состоящее из двух хуков, которое позволяет прямо из админки прописывать сложносочиненные фильтры и сортировки датасетов.
Первый хук изменяет форму настройки датасетов в админке. Второй добавляет эти нестандартные фильтры и сортировки в модель при получении списка типа контента в наборе.
Ни один системный файл не подвергался правке.
После установки данного компонента появляется в админке возможность написать свой запрос mysql в настройках датасетов.
Пример:
Мы хотим в датасете получить контент с датой публикации только за сегодняшний день (а не за прошедшие сутки) с сортировкой по никнейму автора.
Создаем новый набор и там прописываем в настройках нужную сортировку и фильтрацию:
В результате получаем вполне нормальный запрос mysql:
SELECT i.*, u.nickname AS `user_nickname`, u.avatar AS `user_avatar`, u.groups AS `user_groups`, f.title AS `folder_title` FROM cms_con_news i FORCE INDEX FOR ORDER BY (dataset_curdate) INNER JOIN cms_users AS u ON u.id = i.user_id LEFT JOIN cms_content_folders AS f ON f.id = i.folder_id WHERE (date_pub = CURDATE()) AND (i.is_approved = '1') AND (i.is_deleted IS NULL) AND (i.is_pub = '1') AND (i.is_parent_hidden IS NULL) ORDER BY u.nickname DESC LIMIT 0, 15
Никакие претензии по поводу "я что-то там написал, а теперь что-то не работает" не принимаются.
Это инструмент, а не готовый функционал!
UPDATE
Немного доработал возможности манипуляции сортировкой. Теперь возможны самые сложносочиненные сортировки для джентльменов, знающих толк в извращениях.
Пример:
Мы хотим получить статьи со свежими комментариями, отсортированными по свежести комментариев.
Пишем в my sotring строку (select date_pub from cms_comments where target_id = i.id group by date_pub) desc
Получаем запрос для выборки:
SELECT i.*, u.nickname AS `user_nickname`, u.avatar AS `user_avatar`, u.groups AS `user_groups`, f.title AS `folder_title` FROM cms_con_articles i FORCE INDEX FOR ORDER BY (dataset_fresh) INNER JOIN cms_users AS u ON u.id = i.user_id LEFT JOIN cms_content_folders AS f ON f.id = i.folder_id WHERE (i.is_approved = '1') AND (i.is_deleted IS NULL) AND (i.is_pub = '1') AND (i.is_parent_hidden IS NULL) ORDER BY (SELECT date_pub FROM cms_comments WHERE target_id = i.id GROUP BY date_pub) DESC LIMIT 0, 15
Установка дополнения стандартным способом из админки.
Реклама #
Red-Ray.Ru 5 лет назад #
Abobo 5 лет назад #
Def 5 лет назад #
Ris 5 лет назад #
DeDja 5 лет назад #