Вывод пагинации без дублирования ссылок на первую и последнюю страницы с помощью pdoPage

1)Сниппет:

[[!pdoPage?
        &tpl=`New`
        &limit=`4`
        &includeTVs=`image`
        &limit=`2`
        &pageLimit=`3`
        &tplPageWrapper=`@INLINE <nav aria-label="pagination"><ul class="pagination">[[+prev]][[+first]][[+pages]][[+last]][[+next]]</ul></nav>`
        &tplPageFirst=`@INLINE <li class="page-item 1"><a class="page-link" href="[[+href]]">1</a></li>`
        &tplPageLast=`@INLINE <li class="page-item 1"><a class="page-link" href="[[+href]]">[[+pageCount]]</a></li>`
        &tplPage=`@INLINE <li class="page-item"><a class="page-link" href="[[+href]]">[[+pageNo]]</a></li>`
        &tplPageActive=`@INLINE <li class="page-item active "><a class="page-link" href="[[+href]]">[[+pageNo]]</a></li>`
        &tplPagePrev=`@INLINE <li class="page-item"><a class="page-link" href="[[+href]]"><img src="assets/app/img/prev.png" alt="Предыдущая"><span class="sr-only">Next</span></a></li>`
        &tplPageNext=`@INLINE <li class="page-item"><a class="page-link" href="[[+href]]"><img src="assets/app/img/next.png" alt="Следующая"><span class="sr-only">Next</span></a></li>`
        &tplPagePrevEmpty=`@INLINE <li class="page-item disabled"><a class="page-link" ><img src="assets/app/img/prev.png" alt="Предыдущая"><span class="sr-only">Next</span></a></li>`
        &tplPageNextEmpty=`@INLINE <li class="page-item disabled"><a class="page-link" ><img src="assets/app/img/next.png" alt="Следующая"><span class="sr-only">Next</span></a></li>`
        &tplPageFirstEmpty=``
        &tplPageLastEmpty=``
      ]]
2) Результат при активной 2-ой:



3) Результат при активной 1-ой:



Хотелось бы получить такой результат: закрепленные ссылки на первую и последнюю страницы, между ними 3 промежуточные страницы. Пробовал найти как выводить плейсхолдер [[+pages]] без первой и последней, но не нашел.

Заранее благодарю за любые мысли, направляющие в нужную сторону.
kirill
26 июля 2018, 20:03
modx.pro
2 113
0

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

Баха Волков
26 июля 2018, 21:45
0
А что если схалтурить и сделать вот так в чанке tplPage:

{if $pageNo not in [1, $pageCount]}
<li class="page-item"><a href="{$href}" class="page-link">{$pageNo}</a></li>
{/if}

// Или через css

<li class="page-item" {$pageNo in [1, $pageCount] ? 'style="display:none" или class="hidden"' : ''}><a href="{$href}" class="page-link">{$pageNo}</a></li>

Проверьте-ка вдруг подойдет
    kirill
    26 июля 2018, 22:16
    0
    Первый вариант работает наполовину: убирает дублирование, на 1 и 2 выводит 4 кнопки, на 3-* 5 кнопок. Также хотелось бы еще убрать такое же дублирование последних кнопок, так как с $pageCount почему-то не убирает, хотя если подставить число страниц, то убирает.

    Второй вариант работает некорректно.
      Баха Волков
      26 июля 2018, 22:30
      0
      Оба варианта одинаковые, но не суть.

      Я так и думал, что в чанк tplPage не приходит плейсхолдер [[+pageCount]], нуу… так как я слаб в php, то я бы попробовал залезть через js в объект pdoPage до загрузки и сделал бы нужные манипуляции
    Баха Волков
    27 июля 2018, 21:21
    0
    Попробуйте вот так:

    {'!pdoPage' | snippet : [
        'tplPage' => '@INLINE {if $pageNo not in [1, $_modx->getPlaceholder("pageCount")]}<li class="page-item"><a href="{$href}" class="page-link">{$pageNo}</a></li>{/if}',
        'pageLimit' => 3
    ]}
    На первой и последней странице по два выводит?
      kirill
      30 июля 2018, 15:00
      0
      Нет, так не выходит.
      Немного сделал иначе, с небольшой потерей функционала.
      Теперь стрелки ссылаются на 1-ю и последнюю страницы.

      [[!pdoPage?
              &tpl=`New`
              &limit=`4`
              &includeTVs=`image`
              &limit=`2`
              &pageLimit=`5`
              &tplPageWrapper=`@INLINE <nav aria-label="pagination"><ul class="pagination">[[+first]][[+pages]][[+last]]</ul></nav>`
              &tplPageFirst=`@INLINE <li class="page-item"><a class="page-link" href="[[+href]]"><img src="assets/app/img/prev.png" alt="Предыдущая"><span class="sr-only">Next</span></a></li>`
              &tplPageLast=`@INLINE <li class="page-item"><a class="page-link" href="[[+href]]"><img src="assets/app/img/next.png" alt="Следующая"><span class="sr-only">Next</span></a></li>`
              &tplPage=`@INLINE <li class="page-item"><a class="page-link" href="[[+href]]">[[+pageNo]]</a></li>`
              &tplPageActive=`@INLINE <li class="page-item active "><a class="page-link" href="[[+href]]">[[+pageNo]]</a></li>`
              &tplPagePrev=``
              &tplPageNext=``
              &tplPagePrevEmpty=``
              &tplPageNextEmpty=``
              &tplPageFirstEmpty=`@INLINE <li class="page-item disabled"><a class="page-link" ><img src="assets/app/img/prev.png" alt="Предыдущая"><span class="sr-only">Next</span></a></li>`
              &tplPageLastEmpty=`@INLINE <li class="page-item disabled"><a class="page-link" ><img src="assets/app/img/next.png" alt="Следующая"><span class="sr-only">Next</span></a></li>`
            ]]
      Евгений
      17 апреля 2019, 16:16
      0
      Результат как на Связном.





      Копируем сниппет pdoPage с новым именем _pdoPage.
      (С целью исключения перезаписи при обновлении)

      Строка 159. Конструкция вида:
      if (!empty($pageCount) && $pageCount > 1) {
              $pagination = array(
                  'first' => $page > 1 && !empty($tplPageFirst)
                      ? $pdoPage->makePageLink($url, 1, $tplPageFirst)
                      : '',
                  'prev' => $page > 1 && !empty($tplPagePrev)
                      ? $pdoPage->makePageLink($url, $page - 1, $tplPagePrev)
                      : '',
                  'pages' => $pageLimit >= 7 && empty($disableModernPagination)
                      ? $pdoPage->buildModernPagination($page, $pageCount, $url)
                      : $pdoPage->buildClassicPagination($page, $pageCount, $url),
                  'next' => $page < $pageCount && !empty($tplPageNext)
                      ? $pdoPage->makePageLink($url, $page + 1, $tplPageNext)
                      : '',
                  'last' => $page < $pageCount && !empty($tplPageLast)
                      ? $pdoPage->makePageLink($url, $pageCount, $tplPageLast)
                      : '',
              );

      Меняем
      $page > 1 на $page > 2
      $page < $pageCount на $page < $pageCount - 1

      Сам вызов
      [[!_pdoPage?
          -//-
          &tplPageFirst=`@INLINE <li class="control"><a href="[[+href]]">[[+pageNo]]</a></li>`
          &tplPageLast=`@INLINE <li class="control"><a href="[[+href]]">[[+pageNo]]</a></li>`
          &tplPageFirstEmpty=`@INLINE `
          &tplPageLastEmpty=`@INLINE `
          &tplPagePrevEmpty=`@INLINE `
          &tplPageNextEmpty=`@INLINE `
      ]]
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        6