Отображать "предыдущую" и "следующую" нумерацию страниц в статьях Modx Revolution, даже когда они неактивны?

У меня есть блог, созданный в modx Revolution с использованием статьи, но у меня возникли проблемы с настройкой некоторых частей нумерации страниц. Мой текущий вызов разбивки на страницы выглядит так:

[[!+page.nav:notempty=`<nav>[[!+page.nav]]</nav>`]]

Я добавил следующие параметры листинга к вызову getPage, чтобы удалить шаблон [[+ first]] и [[+ last]] из разбивки на страницы, и вставить статическую ссылку «вернуться к началу»:

&pageNavOuterTpl=`[[+prev]]<a href="#header">Back to top</a>[[+next]]`

Однако одна вещь все еще не работает, как я предполагал. По умолчанию ссылки previous и next исчезают, если нет предыдущей или следующей страницы. Однако в таком случае я бы предпочел отобразить их и сделать неактивными. Таким образом, разбивка на страницы всегда будет выглядеть одинаково, но неактивные части могут быть выделены серым цветом.

Похоже, что include.getpage.php содержит следующие строки (которые не позволяют отображать предыдущие и следующие ссылки, когда нет страниц для перехода):

// lines 16 - 18

if (!empty($pagePrevTpl) && ($page - 1) >= 1) {
    $nav['prev'] = getpage_makeUrl($modx, $properties, $page - 1, $pagePrevTpl);
}

// and lines 29 - 31

if (!empty($pageNextTpl) && ($page + 1) <= $pageCount) {
    $nav['next'] = getpage_makeUrl($modx, $properties, $page + 1, $pageNextTpl);
}

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

// example for lines 16 - 18

if (!empty($pagePrevTpl)) {
    if (($page - 1) >= 1) {
        $nav['prev'] = getpage_makeUrl($modx, $properties, $page - 1, $pagePrevTpl);
    } else {
        $nav['prev'] = x // where x = default value for prev (set with :default)
    }
}

Простое else или elseif, подобное приведенному выше, сработает, но этого не будет после обновления. У кого-нибудь есть идеи, как лучше всего подойти к этому? Есть ли способ достичь того, чего я хочу, без перезаписи изменений при обновлении? С набором свойств или что-то в этом роде? Я надеюсь, что кто-нибудь знает, как это сделать.


person Community    schedule 21.07.2013    source источник


Ответы (4)


Для ясности: этот ответ был опубликован OP. Я сделал это, потому что ни один из других ответов не был на высоте (плакаты даже не ответили на мои комментарии / предложения), и я не хочу давать 150 пунктов. награда за плохой ответ. Поскольку SO автоматически назначает награду за предоставленные ответы (даже не предлагая выбора не присуждать ее OP), я решил сделать это таким образом. Я бы предпочел не присуждать награду, чем отдавать ее тому, кто не прилагает для этого усилий.

Итак, поскольку это ошибка в фрагменте статьи include.getpage.php, я решил исправить ее и с помощью php. Поэтому я использовал фрагмент под названием nav.placeholder, чтобы при необходимости вставить заполнитель. Он вызывается из шаблона статей так:

<!-- Secondary Navigation -->
<!-- Insert the nav tag only when there is pagination -->
[[!+page.nav:notempty=`<nav>`]] 
  <!-- Call nav.placeholder snippet and test if placeholder is needed -->
  [[!nav.placeholder? &nav=`[[!+page.nav]]` &before=`1`]]
  <!-- Display regular pagination, without surrounding tags -->
  [[!+page.nav:notempty=`[[!+page.nav]]`]]
  <!-- Call nav.placeholder snippet and test if placeholder is needed -->      
  [[!nav.placeholder? &nav=`[[!+page.nav]]` &before=`0`]]
<!-- Insert the /nav tag only when there is pagination -->
[[!+page.nav:notempty=`</nav>`]]

Этот вызов передает содержимое page.nav (с переменной nav) во фрагмент и сообщает ему, в какой позиции меню он находится с переменной before (чтобы заполнитель не вставлялся в неправильное место).

Сам фрагмент выглядит так:

if (strstr($nav, "Older") != false && $before == 1) {
  return "insert 'newer' placeholder content here";
} elseif (strstr($nav, "Newer") != false && $before == 0) {
  return "insert 'older' placeholder here";
}

Я знаю, что это все довольно хакерское и не очень динамичное, но оно работает, не будет перезаписано при обновлении, и все это делается в cms без уродливого взлома js или css.

person Durk    schedule 30.07.2013
comment
Я удалил свой пароль к другой учетной записи, поэтому я не буду использовать баллы в награде. - person ; 30.07.2013

Вы можете сделать пару вещей. Вы можете отделить его от статей и просто использовать сниппет getPages, хотя это заставит вас изменить параметры сниппета, чтобы изменить настройки, а не использовать параметры статей. Это, вероятно, лучший способ, потому что если вы обновите статьи, он заменит любые изменения, которые вы вносите в файлы (поэтому вам придется повторить свои измененные изменения).

Однако, если вы предпочитаете продолжать использовать параметры в расширенных настройках контейнера, вы также можете изменить следующий файл:

ядро ​​/ компоненты / статьи / модель / статьи / статьиcontainer.class.php

Найдите этот код:

<div class="paging">
<ul class="pageList">
  [[!+page.nav]]
</ul>
</div>

Вы можете изменить это там. Просто помните, что если вы обновите статьи, все изменения, сделанные здесь, будут перезаписаны.

person Garret Overstreet    schedule 21.07.2013

Возможным решением может быть использование javascript, чтобы проверить, существуют ли на странице следующие и предыдущие элементы. Если их нет, добавьте неактивные заполнители.

Первым шагом было бы обернуть заполнители [[+ prev]] и [[+ next]] в шаблоне ModX, например

<span id="prevwrapper">[[+prev]]</span>
<span id="nextwrapper">[[+next]]</span>

Затем добавьте некоторый javascript для запуска при загрузке страницы, что-то вроде (при условии, что ссылки имеют идентификаторы «prev» и «next»):

if(!document.getElementById("prev")){
    document.getElementById('prevwrapper').innerHTML = "<span class='inactive'>Prev</span>";
}
if(!document.getElementById("next")){
    document.getElementById('nextwrapper').innerHTML = "<span class='inactive'>Next</span>";
}

Очевидно, это будет работать, только если включен javascript, но это переместит ваш код из ядра плагина и ядра самого ModX, избегая проблем с будущими обновлениями.

person user2071803    schedule 24.07.2013

Это было довольно сложно сделать с текущей версией getPage, фрагмента, который в статьях используется для нумерации страниц. Из них я внес некоторые изменения в getPage. По сути, желание добавляет две новые опции. Один для включения функциональности, а другой для дополнительного применения класса CSS к этим заполнителям.

Пока мой запрос на перенос не будет обработан, не стесняйтесь получить источник здесь https://github.com/victorhaggqvist/getPage < / а>.

person Victor Häggqvist    schedule 25.12.2013
comment
Спасибо. Надеюсь, ваш запрос на перенос будет объединен с основной веткой! - person ; 02.01.2014