[pdoTools] Версия 1.10.1-pl Сортировка ТВ параметров

Доступна для загрузки новая версия pdoTools с небольшими, но очень важными для многих пользователей, изменениями.

У снипета pdoResources появились новые параметры:
  • &sortbyTV — Сортировка по ТВ параметру. Если он не указан в &includeTVs, то будет подключен автоматически.
  • &sortdirTV — Направление сортировки ТВ: по убыванию или возрастанию. Если не указан, то будет равен параметру &sortdir.
  • &sortbyTVType — Тип сортировки по ТВ параметру. Возможные варианты: string, integer, decimal и datetime. Если пусто, то ТВ будет отсортирован в зависимости от его типа: как текст, число или дата.
Первые два давно были в классе pdoFetch, а третий я добавил только вчера.Теперь они все выведены в параметры сниппета pdoResources и вы можете из использовать вот так:
[[!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!
Василий Наумкин
28 февраля 2015, 05:53
modx.pro
3
5 787
+9

Комментарии: 1

Василий Краковецкий
28 февраля 2015, 14:21
+4
Блин, неужели не надо будет больше заморачиваться с CAST(tvfield AS SIGNED INTEGER)! Ну спасибо!
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    1