[pdoTools] 2.2.5 - ускорение обработки url

Привет, друзья!

Представляю вам новую версию pdoTools, в которой вы можете отключить использование функции modX::makeUrl() во всех сниппетах.

Если на вашем сайте включены friendly_urls и вы генерируете большие массивы страниц, то можно указывать новый тип &scheme — uri.
[[!pdoMenu?
	&parents=`0`
	&level=`3`
	&scheme=`uri`
	&showLog=`1`
]]
Тогда вместо запуска modx::makeUrl() в плейсхолдер [[+link]] будет подставлено содержимое поля uri ресурса. Если же это сделать не получается, то будет запущен оригинальный метод.

По умолчанию modx::makeUrl() используется всегда, что может приводить к тормозам. Теперь вы можете его отключить.

Для проверки скорости я сгенерировал меню modx.pro и получил вот такой лог:
0.0082948: pdoTools loaded
0.0000319: xPDO query object created
0.0005062: Added selection of modResource: SQL_CALC_FOUND_ROWS `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `content`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties`, `hide_on_start`, `show_on_start`, `ticket_rating`
0.0000708: Processed additional conditions
0.0005760: Added where condition: modResource.parent:IN(1,15,5162,30,7595,47,40,3327,3439,4423,4724,12,17,13,21,16,14,18,19,20,22,23,24,4441,31,32,33,34,3,41,42,43,46,44,45,50), OR:modResource.id:IN(1,15,5162,30,7595,47,40,3327,3439,4423,4724,12,17,13,21,16,14,18,19,20,22,23,24,4441,31,32,33,34,3,41,42,43,46,44,45,50), modResource.published=1, modResource.hidemenu=0, modResource.deleted=0, modResource.context_key=web
0.0000770: Sorted by modResource.menuindex, ASC
0.0003381: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`type`, `modResource`.`contentType`, `modResource`.`pagetitle`, `modResource`.`longtitle`, `modResource`.`description`, `modResource`.`alias`, `modResource`.`link_attributes`, `modResource`.`published`, `modResource`.`pub_date`, `modResource`.`unpub_date`, `modResource`.`parent`, `modResource`.`isfolder`, `modResource`.`introtext`, `modResource`.`content`, `modResource`.`richtext`, `modResource`.`template`, `modResource`.`menuindex`, `modResource`.`searchable`, `modResource`.`cacheable`, `modResource`.`createdby`, `modResource`.`createdon`, `modResource`.`editedby`, `modResource`.`editedon`, `modResource`.`deleted`, `modResource`.`deletedon`, `modResource`.`deletedby`, `modResource`.`publishedon`, `modResource`.`publishedby`, `modResource`.`menutitle`, `modResource`.`donthit`, `modResource`.`privateweb`, `modResource`.`privatemgr`, `modResource`.`content_dispo`, `modResource`.`hidemenu`, `modResource`.`class_key`, `modResource`.`context_key`, `modResource`.`content_type`, `modResource`.`uri`, `modResource`.`uri_override`, `modResource`.`hide_children_in_tree`, `modResource`.`show_in_tree`, `modResource`.`properties`, `modResource`.`hide_on_start`, `modResource`.`show_on_start`, `modResource`.`ticket_rating` FROM `modx_site_content` AS `modResource` WHERE  (  ( `modResource`.`parent` IN (1,15,5162,30,7595,47,40,3327,3439,4423,4724,12,17,13,21,16,14,18,19,20,22,23,24,4441,31,32,33,34,3,41,42,43,46,44,45,50) OR `modResource`.`id` IN (1,15,5162,30,7595,47,40,3327,3439,4423,4724,12,17,13,21,16,14,18,19,20,22,23,24,4441,31,32,33,34,3,41,42,43,46,44,45,50) )  AND `modResource`.`published` = 1 AND `modResource`.`hidemenu` = 0 AND `modResource`.`deleted` = 0 AND `modResource`.`context_key` = 'web' )  ORDER BY modResource.menuindex ASC "
0.0680649: SQL executed
0.0002029: Total rows: 4392
0.0556550: Rows fetched
0.1302130: Returning raw data
0.0671182: Tree was built
0.0181720: Start template tree
0.0054049: Created inline chunk with name "ad22a6773e8643db35baf6e56fa79c5d"
1.8507850: Created inline chunk with name "dc6d3757597108f87f958f868cf1591a"
0.5560040: End template tree
2.7648549: Total time
90 439 680: Memory usage
2.8 сек. для генерации меню из 4 392 ресурсов.

И это с родными чанками, а если указать чанк Fenom:
[[!pdoMenu?
	&parents=`0`
	&level=`3`
	&showLog=`1`
	&scheme=`uri`
	&tpl=`@INLINE <li{$classes}><a href="{$link}" {$attributes}>{$menutitle}</a>{$wrapper}</li>`
]]
то
0.0084081: pdoTools loaded
0.0000329: xPDO query object created
0.0004718: Added selection of modResource: SQL_CALC_FOUND_ROWS `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `content`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties`, `hide_on_start`, `show_on_start`, `ticket_rating`
0.0000770: Processed additional conditions
0.0005898: Added where condition: modResource.parent:IN(1,15,5162,30,7595,47,40,3327,3439,4423,4724,12,17,13,21,16,14,18,19,20,22,23,24,4441,31,32,33,34,3,41,42,43,46,44,45,50), OR:modResource.id:IN(1,15,5162,30,7595,47,40,3327,3439,4423,4724,12,17,13,21,16,14,18,19,20,22,23,24,4441,31,32,33,34,3,41,42,43,46,44,45,50), modResource.published=1, modResource.hidemenu=0, modResource.deleted=0, modResource.context_key=web
0.0001080: Sorted by modResource.menuindex, ASC
0.0003691: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`type`, `modResource`.`contentType`, `modResource`.`pagetitle`, `modResource`.`longtitle`, `modResource`.`description`, `modResource`.`alias`, `modResource`.`link_attributes`, `modResource`.`published`, `modResource`.`pub_date`, `modResource`.`unpub_date`, `modResource`.`parent`, `modResource`.`isfolder`, `modResource`.`introtext`, `modResource`.`content`, `modResource`.`richtext`, `modResource`.`template`, `modResource`.`menuindex`, `modResource`.`searchable`, `modResource`.`cacheable`, `modResource`.`createdby`, `modResource`.`createdon`, `modResource`.`editedby`, `modResource`.`editedon`, `modResource`.`deleted`, `modResource`.`deletedon`, `modResource`.`deletedby`, `modResource`.`publishedon`, `modResource`.`publishedby`, `modResource`.`menutitle`, `modResource`.`donthit`, `modResource`.`privateweb`, `modResource`.`privatemgr`, `modResource`.`content_dispo`, `modResource`.`hidemenu`, `modResource`.`class_key`, `modResource`.`context_key`, `modResource`.`content_type`, `modResource`.`uri`, `modResource`.`uri_override`, `modResource`.`hide_children_in_tree`, `modResource`.`show_in_tree`, `modResource`.`properties`, `modResource`.`hide_on_start`, `modResource`.`show_on_start`, `modResource`.`ticket_rating` FROM `modx_site_content` AS `modResource` WHERE  (  ( `modResource`.`parent` IN (1,15,5162,30,7595,47,40,3327,3439,4423,4724,12,17,13,21,16,14,18,19,20,22,23,24,4441,31,32,33,34,3,41,42,43,46,44,45,50) OR `modResource`.`id` IN (1,15,5162,30,7595,47,40,3327,3439,4423,4724,12,17,13,21,16,14,18,19,20,22,23,24,4441,31,32,33,34,3,41,42,43,46,44,45,50) )  AND `modResource`.`published` = 1 AND `modResource`.`hidemenu` = 0 AND `modResource`.`deleted` = 0 AND `modResource`.`context_key` = 'web' )  ORDER BY modResource.menuindex ASC "
0.0749900: SQL executed
0.0002191: Total rows: 4392
0.0871830: Rows fetched
0.1325550: Returning raw data
0.0684011: Tree was built
0.0181000: Start template tree
0.0049889: Created inline chunk with name "48e54d681cadea8b959ffb02a7661e02"
0.0610340: Compiled Fenom chunk with name "inline/48e54d681cadea8b959ffb02a7661e02"
0.3693681: Created inline chunk with name "dc6d3757597108f87f958f868cf1591a"
0.1056440: End template tree
0.9358311: Total time
90 439 680: Memory usage
Чуть меньше секунды!

Вполне возможно, что в каких-то ситуациях url получатся неправильными, поэтому перед влючением советую проверить всё как следует.

В pdoResources параметр &scheme работает только при включении &useWeblinkUrl, а так как по умолчанию он отключен, проще сразу указывать плейсхолдер [[+uri]] в чанках.

Другие изменения

— Сниппет pdoTitle теперь передаёт все полученные параметры во вложенный вызов pdoCrumbs. Так что вы можете указывать параметр &exclude и другие.

— Сниппет pdoSitemap научился обрабатывать теги MODX, если они вдруг встречаются в ссылках. Например, из-за мультиязычности этого сайта ссылка на файлохранилище унас выглядит так:
[[!++cultureKey:is=`ru`:then=`https://file.modx.pro`:else=`https://file.modx.pro/en/`]]

Новая версия уже в репозиториях, можно обновляться.
Василий Наумкин
07 февраля 2016, 11:10
4
3 293
+13
Поблагодарить автора Отправить деньги

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

Alex Alex
07 февраля 2016, 14:25
-5
При выводе TV с типом вывода Дата, отображает не так как настроено в TV. Т.е. выдаёт всё от дней до секунд. В настройках TV стоит %d-%m-%Y
    Alex Alex
    07 февраля 2016, 14:30
    -8
    Даёшь больше минусов без объяснения!
      Василий Наумкин
      07 февраля 2016, 14:46
      +3
      Даёшь чтение документации перед задаванием вопросов! Да и указание сниппета и вызова, чтобы можно было убедиться в наличии бага, тоже не помешает.

      Параметр &processTVs.
        Alex Alex
        07 февраля 2016, 15:05
        +1
        Отлично, спасибо!
      Alex Alex
      07 февраля 2016, 15:08
      -3
      мало минусов, больше злости =)

      А если честно, то после такого страшно вопросы задавать.
        Василий Наумкин
        07 февраля 2016, 16:12
        +1
        И не говори, страх какой в этом интернете — могут минус поставить!
          Alex Alex
          07 февраля 2016, 17:16
          -5
          Зная тебя — ставь.
            Роман Садоян
            08 февраля 2016, 11:20
            0
            Зная его — ставлю.
              Это сообщение было удалено
Павел Гвоздь
07 февраля 2016, 14:51
+3
Спасибо за &exclude в pdoTitle! :)
Владимир Дремучий
07 февраля 2016, 15:10
+2
pdoCrumbs валит страницу, ошибка 500

UPD: Переустановил pdoTools, теперь все нормально. Спасибо :)
    Yar
    Yar
    08 февраля 2016, 15:33
    0
    Такая же проблема.
    Переустановка пакета pdoTools не помогает.
    Может нужен откат к предыдущей версии?
      Владимир Дремучий
      08 февраля 2016, 15:35
      0
      Попробуй откатится, потом обновить.
        Yar
        Yar
        08 февраля 2016, 15:47
        0
        Откат — удаление — установка — работа pdoCrumbs
Алексей
07 февраля 2016, 17:02
0
Спасибо за обновления! Подскажите, схема генерации uri (&scheme=`uri`) работает в режиме
&scheme=`full`
или
&scheme=`abs`
?
    Илья Уткин
    07 февраля 2016, 18:29
    +3
    URI в базе данных хранятся от корня сайта (но без первого слеша)
      Алексей
      07 февраля 2016, 23:21
      +1
      Тогда вместо запуска modx::makeUrl() в плейсхолдер [[+link]] будет подставлено содержимое поля uri ресурса. Если же это сделать не получается, то будет запущен оригинальный метод.
      Я имею ввиду, когда не удастся подставить uri поле ресурса — как будет генериться схема url в этом случае.
      будет запущен оригинальный метод.
      с какой схемой? -)
        Василий Наумкин
        08 февраля 2016, 04:44
        0
        С такой же, то есть -1.
          Алексей
          08 февраля 2016, 09:12
          1
          0
          ок! круто.
          Василий, подскажи, почему не показываешь синтаксис феном во всей его красе — передача массивов сниппетам?
          {$_modx->runSnippet('!pdoMenu',[
          	'parents'	=>0,
          	'level'		=>3,
          	'showLog'	=>1,
          	'scheme'	=>'uri',
          	'tpl'		=>'@INLINE <li{$classes}><a href="{$link}" {$attributes}>{$menutitle}</a>{$wrapper}</li>'
          ])}
      Борода
      14 марта 2016, 12:49
      0
      А если поставить значение link_tag_scheme — full. Всё равно uri будут в базе от корня без первого слеша?
        Илья Уткин
        14 марта 2016, 12:56
        0
        Не знаю, но думаю, что да.

        Вот, вы проверьте и нам расскажите))
          Борода
          16 марта 2016, 17:03
          0
          Если Я правильно всё сделал, то ты правильно думал)
          По ходу, link_tag_scheme — full просто [[++site_url]] при генерации ссылок подставляет) В принципе, логично. Вдруг адрес сайта поменяется, а в базе ссылки со старым адресом)
Сергей Шлоков
08 февраля 2016, 13:32
0
Актуально только для некэшируемого pdoMenu.
__________
Кэп :)
Yar
Yar
08 февраля 2016, 16:07
0
Для работы pdoSitemap, также как и для pdoCrumbs требуется переустановка пакета pdoTools 2.2.5:
Деинсталлировать — Отмечаем Восстановить — затем Установить заново
Иначе ошибка 500 на страницах с вызовом сниппета
    Василий Наумкин
    08 февраля 2016, 16:17
    0
    Вы бы хоть в логи заглянули, отчего такая ошибка вылезает у вас? Более 70 загрузок только из modstore, а об ошибке отписались всего 2 человека. При этом, переустановка решает вопрос.

    Сдаётся мне, проблема не в компоненте.
      Yar
      Yar
      08 февраля 2016, 16:43
      0
      Василий, а в Журнале ошибок MODX Revolution пусто
        Василий Наумкин
        08 февраля 2016, 16:47
        0
        Ошибок 500 в журнале MODX не может быть по определению.

        Ошибки сервера пишутся в лог сервера.
          Yar
          Yar
          08 февраля 2016, 16:56
          0
          такая статистика на сервера была отключена — подключил
    Денис
    16 февраля 2016, 14:47
    0
    пока решил проблему таким же способом
Это сообщение было удалено
    Это сообщение было удалено
Сергей Шлоков
15 октября 2016, 11:20
0
А шаблон для категорий, указанный в tplCategoryFolder параметре, должен использоваться для ресурсов с isfolder=1?
В документации написано так
&tplCategoryFolder Специальный чанк оформления категории. Категория — это документ с «isfolder = 1» и или нулевым шаблоном, или с атрибутом «rel=category»
В коде такой проверки нет.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.