[pdoTools] Версия 1.10.1-pl Сортировка ТВ параметров
Доступна для загрузки новая версия pdoTools с небольшими, но очень важными для многих пользователей, изменениями.
У снипета pdoResources появились новые параметры:
Как видите, одновременно работает сортировка сначала по указанному ТВ, а затем по полю ресурса. Если вы не указываете &sortbyTVType, то ТВ сортируется как и прежде, в соответствии со своим типом.
Так как я не анонсировал предыдущую версию 1.1.0-pl, напишу об этом здесь.
В pdoMenu вернулся параметер &showDeleted. В прошлый раз оказалось, что он не работает, потому что карта сайта MODX не хранит id удалённых ресурсов и функуця modX::getChildIds() их просто не возвращает.
Пришлось заменить выборку её на собственную функцию pdoFetch::getChildIds(), очень своевременно предложенную одним из пользователей.
Новый метод включается только при указании &showDeleted=1, потому что он выбирает всех потомков напрямую из БД, что, конечно, медленнее, чем получение их из файла кэша MODX.
Исправлен стандартный javascript pdoPage. Ajax пагинация теперь отлично дружит с кнопочками браузера вперёд-назад.
В pdoPage также исправлено перезаписывание параметров &frontend_js и &frontend_css вызываемого дочернего сниппета, если &ajax=0. То есть, если ajax не включен у pdoPage, он не подключает свои скрипты и не мешает, например, сниппету ms2Gallery сделать это.
В классе pdoFetch добавлена возможность указывать функции в select. Например, теперь корректно работает такой вызов:
Ну и, наконец, исправлена ошибка в быстрых плейсхолдерах. Теперь их можно использовать и для JSON полей объектов.
Например:
Это просто быстрее, потому что парсер MODX на них вообще никак не реагирует и не пытается обработать. Поэтому с их помощью можно вызывать фильтры и сниппеты.
Всем удачной работы в MODX!
У снипета pdoResources появились новые параметры:
- &sortbyTV — Сортировка по ТВ параметру. Если он не указан в &includeTVs, то будет подключен автоматически.
- &sortdirTV — Направление сортировки ТВ: по убыванию или возрастанию. Если не указан, то будет равен параметру &sortdir.
- &sortbyTVType — Тип сортировки по ТВ параметру. Возможные варианты: string, integer, decimal и datetime. Если пусто, то ТВ будет отсортирован в зависимости от его типа: как текст, число или дата.
[[!pdoResources?
&parents=`0`
&select=`id,pagetitle`
&sortby=`publishedon`
&sortdir=`DESC`
&sortbyTV=`Type`
&sortbyTVType=`integer`
&sortdirTV=`ASC`
&showLog=`1`
]]
С вот таким результатом:0.0002079: pdoTools loaded 0.0000279: xPDO query object created 0.0003412: Included list of tvs: Type 0.0002730: leftJoined modTemplateVarResource as TVtype 0.0001318: Added selection of modResource: SQL_CALC_FOUND_ROWS `id`, `pagetitle` 0.0000091: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `tv.Type` 0.0000179: Processed additional conditions 0.0002561: Added where condition: modResource.published=1, modResource.deleted=0 0.0000870: Replaced TV conditions 0.0001929: Sorted by CAST(`TVtype`.`value` AS SIGNED INTEGER), ASC 0.0000050: Sorted by modResource.publishedon, DESC 0.0000041: Limited to 10, offset 0 0.0002260: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`pagetitle`, IFNULL(`TVtype`.`value`, '') AS `tv.Type` FROM `modx_site_content` AS `modResource` LEFT JOIN `modx_site_tmplvar_contentvalues` `TVtype` ON `TVtype`.`contentid` = `modResource`.`id` AND `TVtype`.`tmplvarid` = 3 WHERE ( `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 ) ORDER BY CAST(`TVtype`.`value` AS SIGNED INTEGER) ASC, modResource.publishedon DESC LIMIT 10 " 0.0008218: SQL executed 0.0000918: Total rows: 34 0.0000210: Rows fetched 0.0003099: Returning processed chunks 0.0030849: Total time 6 815 744: Memory usage
Как видите, одновременно работает сортировка сначала по указанному ТВ, а затем по полю ресурса. Если вы не указываете &sortbyTVType, то ТВ сортируется как и прежде, в соответствии со своим типом.
Другие изменения
Так как я не анонсировал предыдущую версию 1.1.0-pl, напишу об этом здесь.
В pdoMenu вернулся параметер &showDeleted. В прошлый раз оказалось, что он не работает, потому что карта сайта MODX не хранит id удалённых ресурсов и функуця modX::getChildIds() их просто не возвращает.
Пришлось заменить выборку её на собственную функцию pdoFetch::getChildIds(), очень своевременно предложенную одним из пользователей.
Новый метод включается только при указании &showDeleted=1, потому что он выбирает всех потомков напрямую из БД, что, конечно, медленнее, чем получение их из файла кэша MODX.
Исправлен стандартный javascript pdoPage. Ajax пагинация теперь отлично дружит с кнопочками браузера вперёд-назад.
В pdoPage также исправлено перезаписывание параметров &frontend_js и &frontend_css вызываемого дочернего сниппета, если &ajax=0. То есть, если ajax не включен у pdoPage, он не подключает свои скрипты и не мешает, например, сниппету ms2Gallery сделать это.
В классе pdoFetch добавлена возможность указывать функции в select. Например, теперь корректно работает такой вызов:
[[!pdoResources?
&parents=`0`
&select=`CAST(id AS DECIMAL(10,2)) as id, pagetitle`
]]
Это достигается специальной обработкой параметра перед отправкой в xPDO. Вывод:Array ( [id] => 4.00 [pagetitle] => HybridAuth [idx] => 10 [link] => )
Ну и, наконец, исправлена ошибка в быстрых плейсхолдерах. Теперь их можно использовать и для JSON полей объектов.
Например:
[[!pdoResources?
&parents=`0`
&select=`id,pagetitle,properties`
&where=`{"class_key":"Ticket"}`
&tpl=`@INLINE
<p>{{+id}} - {{+pagetitle}}
{{+properties.tickets.process_tags}}</p>
<!--pdotools_properties.tickets.process_tags Теги обрабатываются-->
<!--pdotools_!properties.tickets.process_tags Теги не обрабатываются-->
`
]]
Да-да, я советую всем использовать такие плейсхолдеры в INLINE чанках, как {{+id}}.Это просто быстрее, потому что парсер MODX на них вообще никак не реагирует и не пытается обработать. Поэтому с их помощью можно вызывать фильтры и сниппеты.
Всем удачной работы в MODX!
Комментарии: 1
Блин, неужели не надо будет больше заморачиваться с CAST(tvfield AS SIGNED INTEGER)! Ну спасибо!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.