[pdoTools] 2.11.0 - отключение выборки total по умолчанию

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

Для начала, немного теории. Все сниппеты pdoTools используют класс pdoFetch для работы с базой данный. Во время этого происходит выборка данных с подсчётом количества результатов и выставлением плейхолдера [[+total]]. Для максимальной точности, делается это, используя встроенные функции MySQL. Перед выборкой добавляется такая функция:
SQL_CALC_FOUND_ROWS `id`,`pagetitle`,...
И MySQL знает, что нужно считать потенциально выбираемые результаты.

А после выборки делается отдельный запрос для получения результата и выставления плейхолдера
SELECT FOUND_ROWS();


Так вот, этот плейхолдер нужен исключительно для постраничной навигации и вывода количества в showLog, но его выборка может занимать весьма продолжительное время. Так что, в новой версии добавлена опция setTotal прямо в класс pdoFetch, и она отключена по умолчанию.

То есть, теперь все выборки pdoTools не делают эту ненужную работу. Но, так как плейхолдер [[+total]] необходим для постраничной навигации, сниппет pdoPage включает его всегда. При вызове любого сниппета через pdoPage, этот плейхолдер будет выставлен.

Я очень надеюсь, что вы не заметите никаких проблем при обновлении сайта, но теоретически они могут быть, если этот плейсхолдер вам нужен не для пагинации, а для чего-то еще.

Если так, то просто включите его:
[[!pdoResources?
	&parents=`0`
	&...
	&setTotal=`1`
]]
modx.pro уже работает на новой версии, никаких проблем не обнаружено.

Думаю, ускорение работы pdoMenu, pdoCrumbs, pdoNeighbors и других сниппетов стоит этого. Обновляемся, тестируем, и как обычно, пишем отзывы.
Василий Наумкин
15 февраля 2018, 09:10
modx.pro
2
4 351
+13

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

Alexander
15 февраля 2018, 17:49
-3
Логично :) Спасибо!

Василий, я задавал вопрос в разделе «вопросы», но точного ответа так и не было.
Не получается красиво настроить работу pdoPage и ЧПУ. Например, если на главной странице хочешь перейти на вторую страницу по ссылке localhost/page-2, то попадаешь на 404. А по ссылке localhost/index/page-2 все впорядке.
Также проблемы при совместной работе Tagger и pdoPage. Хочу пагинацию с ЧПУ по выборке тэга. Например, localhost/tag/test — это выборка статей по тэгу test. При включенном ЧПУ ссылка на следующую страницу — localhost/index?tag=test&page=2…
Это проблемы в работе pdoTools, мой косяк в настройке или пытаться самом исправить? Спасибо!
    Алексей Шумаев
    16 февраля 2018, 00:27
    +3
    Наверное поможет это.
      Alexander
      16 февраля 2018, 10:23
      0
      Без добавления указанного плагина, страница localhost/index/page-2 выдавала бы 404.
    Dekr
    22 февраля 2018, 11:00
    0
    Проблема с pdoResources после обновления. Кеш чистил полностью.
    Вывод картинок с двойным слешем в начале
    Вызов pdoResources:
    [[pdoResources?
      &parents=`2`
      &tvPrefix=``
      &tpl=`ProductRowTpl`
      &includeTVs=`imgcatalog,imgcatalogbig`
    ]]
    Чанк ProductRowTpl:
    ...
    <a href="[[+imgcatalogbig]]" rel="product_group" title="Фотография [[+pagetitle]]">
    <img src="[[+imgcatalog]]" class="img-responsive" alt="Фотография [[+longtitle]]"></a>
    ...
    Вывод картинки:
    //img/S_line_lab_plus1200x848.jpg
    Если на странице вызвать TV
    [[*imgcatalogbig]]
    то выводит нормально
    /img/S_line_lab_plus1200x848.jpg
      Василий Наумкин
      22 февраля 2018, 21:54
      0
      Ничего такого в новой версии вообще не меняли.

      Только setTotal, и всё.
      Кирилл Киселев
      21 августа 2018, 21:21
      0
      Проблема ЧПУ вместе с VirtualPage.
      В пагинации не присваивается странице своя цифра, везде у ссылок page-1
      Пробовал включить кэширование сниппета, помогает, но активная страница не помечается стилем active
      Ручной переход с вводом page-n работает, не работает только сама пагинация.

      В исходном классе pdoPage дебажил и вот это свойство выдаёт [[+pageVarKey]]-1 в методе makePageLink
      $this->pdoTools->config['pageLinkScheme']

      В самом сниппете pdoPage ещё стоит такая строка
      if (empty($page)) {
          $page = 1;
      }
        Кирилл Киселев
        21 августа 2018, 21:24
        0
        Помогло в параметрах сниппета указать
        &page=`[[+page]]`

        Но после этого теперь не отмечается первая страница как активная при переходе на неё.
          Кирилл Киселев
          21 августа 2018, 21:39
          0
          Поменял [[!+page.nav]] на [[+page.nav]] и заработало.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          8