Вкл\Выкл свет
Главная » Computing » Количество страниц в категориях

Количество страниц в категориях

В некоторых разделах сайтов на платформе uCoz сбоит вывод номеров страниц. В общем случае код такой:

<?if($PAGE_SELECTOR$)?><!-<s3015>->Страницы<!-</s>->: $PAGE_SELECTOR$<?endif?>

Почистим его от служебных пометок uCoz’а (на рабочем сайте этого делать не надо):

<?if($PAGE_SELECTOR$)?>Страницы: $PAGE_SELECTOR$<?endif?>

Итак, если переменная $PAGE_SELECTOR$ что-нибудь выдаёт, то будет показан результат выдачи, а если ничего не выдает, то не будет показано даже слово «Страницы:».

Всё бы хорошо, но на самом деле код работает не так. Например, на странице какой-нибудь категории из блока статей:

  • Если в категории нет ни одной статьи, то на странице не показывается ничего — ни номер, ни слово «Страницы:" (так и должно быть);
  • Если в категории статей меньше, чем предел размещения их на одной странице (по умолчанию обычно 10), то появляется слово «Страницы:», но чисел никаких нет;
  • Если статей больше предела размещения на одной странице категории, то код выдаёт нормальный результат: «Страницы:" + переключатель.

Желательно привести код к рабочим результатам.

Если страница списка статей в категории одна, должен выводиться текст: «Страницы: 1» (напоминаем, раздел статей мы взяли для примера, то же можно увидеть, например, в разделе файлов или ссылок). Делаем так:

Страницы: <?if($PAGE_SELECTOR$)?>$PAGE_SELECTOR$<?else?>1<?endif?>

Оказывается, это работает только тогда, когда в категории нет ни одной статьи. Иначе переменная $PAGE_SELECTOR$ перестаёт быть пустой и выдаёт:

<span class=«pagesBlockuz1»></span>

Для того, чтобы обработать эту ситуацию, нужно не просто проверять существование значения, а анализировать его. Если между тегами <span> есть что-нибудь, то надо это «что-нибудь» выводить. А если нет ничего, то надо выводить цифру 1. В применении к нашему случаю, если после первой закрывающей угловой скобки сразу же идёт открывающая, то надо выводить цифру.

Где находится первая закрывающая угловая скобка, нам ответит функция strpos(S1,S2). Здесь S1 — строка, в которой ищем, а S2 — строка, которую ищем. У нас будет:

strpos($PAGE_SELECTOR$,'>')

Но нам нужна собственно и не она, а следующий за ней символ строки. Для этого используем функцию substr(S,N1,N2). Здесь S — строка, которую разрезаем (у нас $PAGE_SELECTOR$); N1 — число, которое указывает с какого символа строку S надо разрезать (у нас это будет strpos($PAGE_SELECTOR$,'>') + 1, нам нужен следующий за закрывающей скобкой символ); N2 — длина строки, которую хотим получить (в нашем случае 1 — нам нужно проверить только следующий за закрывающей скобкой символ). Проще говоря, мы вырезаем из строки, которую выдаёт переменная $PAGE_SELECTOR$ символ, который следует за первой же закрывающей угловой скобкой, и сравниваем его с символом «<». Если есть совпадение, то выводим цифру 1. В противном случае — всё содержимое переменной $PAGE_SELECTOR$. Ниже добавка в код сравнения и полностью вся строка условного оператора:

substr($PAGE_SELECTOR$,strpos($PAGE_SELECTOR$,'>')+1,1) !== '<'

<?if($PAGE_SELECTOR$ && substr($PAGE_SELECTOR$,strpos($PAGE_SELECTOR$,'>')+1,1) !== '<')?>$PAGE_SELECTOR$<?else?>1<?endif?>

Это работает, но можно упростить код. Вместо того, чтобы резать строки и анализировать их, в нашем случае можно просто искать строку «><». Если она есть, то выводим единицу:

<?if($PAGE_SELECTOR$ && strpos($PAGE_SELECTOR$,'><') < 0)?>$PAGE_SELECTOR$<?else?>1<?endif?>

Это тоже работает.

© Photo: Toshiyuki IMAI aka matsuyuki via flickr.com


Добавил: prostologin1
Просмотров: 2219
Теги: ucoz
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Всего комментариев: 0
avatar