[РЕШЕНО] pagination для bootstrap 3 и 4
Уважаемые коллеги.
Такой вопрос — на сайте Bootstrap 4, pdoPage возвращает по умолчанию шаблоны с классами для Bootstrap 3. Писать кучу INLINE для каждого pdoPage (а их достаточно на сайте) не очень комфортно, поэтому пришлось по-быстрому написать ужасный велосипед, см. код ниже, и сразу вопрос — наверное, можно как-то более изящно решить вопрос, зная гибкость MODX? К сожалению, мои скиллы пока недостаточны для других решений. Так-то все прекрасно работает, конечно, спасибо Василию за Fenom :) Благодарю за любые подсказки.
вызов pdoPage:
велосипедная подгонка шаблона под BS4:
Такой вопрос — на сайте 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 -->
Комментарии: 12
Пожелание к Василию. Прежде всего спасибо за замечательные компоненты. Спасибо комьюнити.
Было бы классно, если бы основные компоненты (pdoTools, miniShop2, mSearch2 к примеру) изначально поддерживали BS4.
Было бы классно, если бы основные компоненты (pdoTools, miniShop2, mSearch2 к примеру) изначально поддерживали BS4.
pdoTools, MiniShop2 и еще куча всяких лежат в открытых репозиториях на гитхабе. Сами сделайте поддержку BS4 и выполните pull request, если для вас это принципиально важно. В том и суть свободного ПО: критикуешь — сделай сам. И не надо тут заливать, что это чьи-то там чужие компоненты и авторы должны их поддерживать, бла-бла-бла.
pdoTools, MiniShop2 и еще куча всяких лежат в открытых репозиториях на гитхабе. Сами сделайте поддержку BS4 и выполните pull request…Ох, если бы я умел. Завидую тебе, что ты изучил эти инструменты. Честно.
Но ты поверь — что-то можно делать и без них, не так, по-другому.
… если для вас это принципиально важно.Непринципиально, но важно. Переход на BS4 позволит во многих случаях экономить кучу времени
В том и суть свободного ПО: критикуешь — сделай сам.Заблуждаешься, совсем не в этом — поверь. Рекомендую Реймонд Эрик — Искусство программирования для Unix
royallib.com/book/reymond_erik/iskusstvo_programmirovaniya_dlya_Unix.html
И не надо тут заливать…Непонятно.
… что это чьи-то там чужие компоненты…Разумеется известно и кто и как и история их появления — к чему это? Опять непонятно!
… и авторы должны их поддерживать…Не нужно искажать: пожелание это просьба, «должен» — обязанность. Значение слов разное.
Прошу прощения, но может все же так:
{'!pdoPage@Pager' | snippet : [
...
]}
Извините, ваще не понял, торможу под вечер да и знаний не хватает. Это сокращенная форма для вызова сниппета pdoPage?
Я честно говоря заплатил бы за часовую консультацию, где можно было бы покидаться кусками кода с вопросами «это правильно», «это будет работать?», «как блэт это ваще работает?!» :))) Могу на ЯД и на Сбер.
В сниппете добавляете новый набор параметров и редактируете в нем чанки пагинации, да и все что угодно.
joxi.ru/p27QdxBhojo3Zr
Вызываете потом в шаблоне, как выше написал.
joxi.ru/p27QdxBhojo3Zr
Вызываете потом в шаблоне, как выше написал.
Понял, спасибо, постараюсь разобраться :)
Насколько я понял, нужно создать новый набор, а не писать прямо туда, т.к. при обновлении все записанное слетит?
Осталось с VirtualPage понять, но это уже походу завтра.
Насколько я понял, нужно создать новый набор, а не писать прямо туда, т.к. при обновлении все записанное слетит?
Осталось с VirtualPage понять, но это уже походу завтра.
Да, создать новый набор, чтоб не перетерлось после обновления.
Все, понял фишку с набором параметров, большое вам спасибо :)
Не за что.
Если делать сайт как компонент, можно в резолвере 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]]">«</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]]">»</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">«</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">»</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>');
}
}
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.