[РЕШЕНО] pagination для bootstrap 3 и 4

Уважаемые коллеги.

Такой вопрос — на сайте Bootstrap 4, pdoPage возвращает по умолчанию шаблоны с классами для Bootstrap 3. Писать кучу INLINE для каждого pdoPage (а их достаточно на сайте) не очень комфортно, поэтому пришлось по-быстрому написать ужасный велосипед, см. код ниже, и сразу вопрос — наверное, можно как-то более изящно решить вопрос, зная гибкость MODX? К сожалению, мои скиллы пока недостаточны для других решений. Так-то все прекрасно работает, конечно, спасибо Василию за Fenom :) Благодарю за любые подсказки.

вызов pdoPage:

...
        'tplPageWrapper'    => '@FILE chunks/pager/pager_wrapper.tpl',
...

велосипедная подгонка шаблона под BS4:

<div class="pagination" aria-label="pager">

    <ul class="pagination justify-content-center">

        {$_pls['first']
            | replace : '<li class="disabled">' : '<li class="page-item disabled">'
            | replace : '<li class="control">' : '<li class="page-item">'
            | replace : '<a' : '<a class="page-link"'
            | replace : '<span>' : '<a class="page-link" href="#">'
            | replace : '</span>' : '</a>'
        }

        {$_pls['prev']
            | replace : '<li class="disabled">' : '<li class="page-item disabled">'
            | replace : '<li class="control">' : '<li class="page-item">'
            | replace : '<a' : '<a class="page-link"'
            | replace : '<span>' : '<a class="page-link" href="#">'
            | replace : '</span>' : '</a>'
        }

        {$_pls['pages']
            | replace : '<li>' : '<li class="page-item">'
            | replace : '<li class="active">' : '<li class="page-item active">'
            | replace : '<a' : '<a class="page-link"'
        }

        {$_pls['next']
            | replace : '<li class="disabled">' : '<li class="page-item disabled">'
            | replace : '<li class="control">' : '<li class="page-item">'
            | replace : '<a' : '<a class="page-link"'
            | replace : '<span>' : '<a class="page-link" href="#">'
            | replace : '</span>' : '</a>'
        }

        {$_pls['last']
            | replace : '<li class="disabled">' : '<li class="page-item disabled">'
            | replace : '<li class="control">' : '<li class="page-item">'
            | replace : '<a' : '<a class="page-link"'
            | replace : '<span>' : '<a class="page-link" href="#">'
            | replace : '</span>' : '</a>'
        }

    </ul><!-- /.pagination -->

</div><!-- /.pagination -->
Азамат
29 сентября 2018, 09:50
modx.pro
1
1 835
0

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

Игорь Зябко
Игорь Зябко
29 сентября 2018, 13:09
0
Пожелание к Василию. Прежде всего спасибо за замечательные компоненты. Спасибо комьюнити.

Было бы классно, если бы основные компоненты (pdoTools, miniShop2, mSearch2 к примеру) изначально поддерживали BS4.
    Дмитрий
    29 сентября 2018, 14:13
    0
    pdoTools, MiniShop2 и еще куча всяких лежат в открытых репозиториях на гитхабе. Сами сделайте поддержку BS4 и выполните pull request, если для вас это принципиально важно. В том и суть свободного ПО: критикуешь — сделай сам. И не надо тут заливать, что это чьи-то там чужие компоненты и авторы должны их поддерживать, бла-бла-бла.
      Игорь Зябко
      Игорь Зябко
      29 сентября 2018, 15:31
      0
      pdoTools, MiniShop2 и еще куча всяких лежат в открытых репозиториях на гитхабе. Сами сделайте поддержку BS4 и выполните pull request…
      Ох, если бы я умел. Завидую тебе, что ты изучил эти инструменты. Честно.
      Но ты поверь — что-то можно делать и без них, не так, по-другому.

      … если для вас это принципиально важно.
      Непринципиально, но важно. Переход на BS4 позволит во многих случаях экономить кучу времени

      В том и суть свободного ПО: критикуешь — сделай сам.
      Заблуждаешься, совсем не в этом — поверь. Рекомендую Реймонд Эрик — Искусство программирования для Unix
      royallib.com/book/reymond_erik/iskusstvo_programmirovaniya_dlya_Unix.html

      И не надо тут заливать…
      Непонятно.

      … что это чьи-то там чужие компоненты…
      Разумеется известно и кто и как и история их появления — к чему это? Опять непонятно!

      … и авторы должны их поддерживать…
      Не нужно искажать: пожелание это просьба, «должен» — обязанность. Значение слов разное.
    Rootiys
    29 сентября 2018, 16:37
    0
    Прошу прощения, но может все же так:
    {'!pdoPage@Pager' | snippet : [
      ...
    ]}
      Азамат
      29 сентября 2018, 16:44
      0
      Извините, ваще не понял, торможу под вечер да и знаний не хватает. Это сокращенная форма для вызова сниппета pdoPage?
      Азамат
      29 сентября 2018, 16:46
      0
      Я честно говоря заплатил бы за часовую консультацию, где можно было бы покидаться кусками кода с вопросами «это правильно», «это будет работать?», «как блэт это ваще работает?!» :))) Могу на ЯД и на Сбер.
        Rootiys
        29 сентября 2018, 16:51
        0
        В сниппете добавляете новый набор параметров и редактируете в нем чанки пагинации, да и все что угодно.
        joxi.ru/p27QdxBhojo3Zr
        Вызываете потом в шаблоне, как выше написал.
          Азамат
          29 сентября 2018, 16:58
          0
          Понял, спасибо, постараюсь разобраться :)
          Насколько я понял, нужно создать новый набор, а не писать прямо туда, т.к. при обновлении все записанное слетит?

          Осталось с VirtualPage понять, но это уже походу завтра.
            Rootiys
            29 сентября 2018, 18:35
            0
            Да, создать новый набор, чтоб не перетерлось после обновления.
            Азамат
            29 сентября 2018, 17:06
            0
            Все, понял фишку с набором параметров, большое вам спасибо :)
              Rootiys
              29 сентября 2018, 18:35
              0
              Не за что.
                Alexey T
                01 октября 2018, 13:19
                0
                Если делать сайт как компонент, можно в резолвере setup.php вызывать создание набора параметров, в данном случае набор называется Bootstrap4
                if ($snippet = $modx->getObject('modSnippet', array('name' => 'pdoPage'))) {
                        if (!$prop_bootsrap4 = $modx->getObject('modPropertySet', array('name' => 'Bootstrap4'))) {
                            // Подставляем массив свойств для набора Bootstrap4
                            $prop_bootsrap4 = $modx->newObject('modPropertySet', array(
                                'name' => 'Bootstrap4',
                                'description' => 'Pagination Property Set for Bootstrap 4',
                                'properties' => array(
                                    'tplPage' => array(
                                        'name' => 'tplPage',
                                        'desc' => 'pdotools_prop_tplPage',
                                        'options' => array(),
                                        'lexicon' => 'pdotools:properties',
                                        'area' => '',
                                        'type' => 'textfield',
                                        'value' => '@INLINE <li class="page-item"><a class="page-link" href="[[+href]]">[[+pageNo]]</a></li>',
                                    ),
                                    'tplPageWrapper' => array(
                                        'name' => 'tplPageWrapper',
                                        'desc' => 'pdotools_tplPageWrapper',
                                        'options' => array(),
                                        'lexicon' => 'pdotools:properties',
                                        'area' => '',
                                        'type' => 'textfield',
                                        'value' => '@INLINE <ul class="pagination">[[+first]][[+prev]][[+pages]][[+next]][[+last]]</ul>',
                                    ),
                                    'tplPageActive' => array(
                                        'name' => 'tplPageActive',
                                        'desc' => 'pdotools_tplPageActive',
                                        'options' => array(),
                                        'lexicon' => 'pdotools:properties',
                                        'area' => '',
                                        'type' => 'textfield',
                                        'value' => '@INLINE <li class="page-item active"><a class="page-link" href="[[+href]]">[[+pageNo]]</a></li>',
                                    ),
                                    'tplPageFirst' => array(
                                        'name' => 'tplPageFirst',
                                        'desc' => 'pdotools_tplPageFirst',
                                        'options' => array(),
                                        'lexicon' => 'pdotools:properties',
                                        'area' => '',
                                        'type' => 'textfield',
                                        'value' => '@INLINE <li class="page-item"><a class="page-link" href="[[+href]]">[[%pdopage_first]]</a></li>',
                                    ),
                                    'tplPageLast' => array(
                                        'name' => 'tplPageLast',
                                        'desc' => 'pdotools_tplPageLast',
                                        'options' => array(),
                                        'lexicon' => 'pdotools:properties',
                                        'area' => '',
                                        'type' => 'textfield',
                                        'value' => '@INLINE <li class="page-item"><a class="page-link" href="[[+href]]">[[%pdopage_last]]</a></li>',
                                    ),
                                    'tplPagePrev' => array(
                                        'name' => 'tplPagePrev',
                                        'desc' => 'pdotools_tplPagePrev',
                                        'options' => array(),
                                        'lexicon' => 'pdotools:properties',
                                        'area' => '',
                                        'type' => 'textfield',
                                        'value' => '@INLINE <li class="page-item"><a class="page-link" href="[[+href]]">&laquo;</a></li>',
                                    ),
                                    'tplPageNext' => array(
                                        'name' => 'tplPageNext',
                                        'desc' => 'pdotools_tplPageNext',
                                        'options' => array(),
                                        'lexicon' => 'pdotools:properties',
                                        'area' => '',
                                        'type' => 'textfield',
                                        'value' => '@INLINE <li class="page-item"><a class="page-link" href="[[+href]]">&raquo;</a></li>',
                                    ),
                                    'tplPageSkip' => array(
                                        'name' => 'tplPageSkip',
                                        'desc' => 'pdotools_tplPageSkip',
                                        'options' => array(),
                                        'lexicon' => 'pdotools:properties',
                                        'area' => '',
                                        'type' => 'textfield',
                                        'value' => '@INLINE <li class="page-item disabled"><span class="page-link">...</span></li>',
                                    ),
                                    'tplPageFirstEmpty' => array(
                                        'name' => 'tplPageFirstEmpty',
                                        'desc' => 'pdotools_tplPageFirstEmpty',
                                        'options' => array(),
                                        'lexicon' => 'pdotools:properties',
                                        'area' => '',
                                        'type' => 'textfield',
                                        'value' => '@INLINE <li class="page-item disabled"><span class="page-link">[[%pdopage_first]]</span></li>',
                                    ),
                                    'tplPageLastEmpty' => array(
                                        'name' => 'tplPageLastEmpty',
                                        'desc' => 'pdotools_tplPageLastEmpty',
                                        'options' => array(),
                                        'lexicon' => 'pdotools:properties',
                                        'area' => '',
                                        'type' => 'textfield',
                                        'value' => '@INLINE <li class="page-item disabled"><span class="page-link">[[%pdopage_last]]</span></li>',
                                    ),
                                    'tplPagePrevEmpty' => array(
                                        'name' => 'tplPagePrevEmpty',
                                        'desc' => 'pdotools_tplPagePrevEmpty',
                                        'options' => array(),
                                        'lexicon' => 'pdotools:properties',
                                        'area' => '',
                                        'type' => 'textfield',
                                        'value' => '@INLINE <li class="page-item disabled"><span class="page-link" aria-hidden="true">&laquo;</span></li>',
                                    ),
                                    'tplPageNextEmpty' => array(
                                        'name' => 'tplPageNextEmpty',
                                        'desc' => 'pdotools_tplPageNextEmpty',
                                        'options' => array(),
                                        'lexicon' => 'pdotools:properties',
                                        'area' => '',
                                        'type' => 'textfield',
                                        'value' => '@INLINE <li class="page-item disabled"><span class="page-link" aria-hidden="true">&raquo;</span></li>',
                                    ),
                                ),
                            ));
                            // Запись набора свойств и пишем в лог установки
                            if ($prop_bootsrap4->save() && $snippet->addPropertySet($prop_bootsrap4)) {
                                $modx->log(xPDO::LOG_LEVEL_INFO,
                                    'Property set "pdoPage" for snippet <b>pdoPage</b> was created');
                            } else {
                                $modx->log(xPDO::LOG_LEVEL_ERROR,
                                    'Could not create property set "Bootstrap4" for <b>pdoPage</b>');
                            }
                        }
                    }
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              12