Как вывести блок только на определённых страницах uCoz

Юрий Герук 2025-11-14 131

Задача

Нужно вывести один блок шаблона (например, форму, баннер, текст) только на страницах с определёнными номерами: page3, page4 … page78.
На всех остальных страницах должен выводиться другой блок.

Такая задача встречается часто: показать другую форму только на нужных страницах, выводить иной текст, менять футер, включать баннеры для определённых URL и так далее.

Почему перечисление страниц — неправильный вариант

Некоторые пытаются сделать условие так:

<?if(
$URI_ID$='page3' or
$URI_ID$='page4' or
$URI_ID$='page5' or
...
$URI_ID$='page78'
)?>
 $MFORM_1$
<?else?>
 $MFORM_3$
<?endif?>

Проблемы такого подхода:

  1. Код получается огромным и неудобным для чтения.
  2. При малейшей ошибке или удалённой странице условие ломается.
  3. Если одна из страниц закрыта правами — проверка может перестать работать.
  4. Добавление или удаление страниц требует вручную редактировать десятки строк.

На больших списках (20–100 страниц) такое условие превращается в невозможный для поддержки «комбайн».

Как должен работать правильный подход

Страницы типа page3, page4, page78 имеют в $URI_ID$ следующий формат:

pageX
pageXX

То есть строка всегда начинается с page, а после неё идёт номер страницы.

Если вырезать первые четыре символа («page»), останется только число:

substr($URI_ID$,4)

Примеры:

  • $URI_ID$='page3' → substr(...)=3
  • $URI_ID$='page12' → 12
  • $URI_ID$='page78' → 78

Теперь можно сравнивать это значение как число и проверять диапазон.

Универсальное решение

Показывать блок на страницах с 3 по 78:

<?if(substr($URI_ID$,4)>=3 and substr($URI_ID$,4)<=78)?>
 $MFORM_1$
<?else?>
 $MFORM_3$
<?endif?>

Подробное объяснение по пунктам

1. substr($URI_ID$,4)

Обрезает первые четыре символа строки page.
Остаётся только число страницы — оно и используется в сравнении.

2. Сравнение диапазона

>=3 — номер страницы должен быть не меньше 3.
<=78 — номер страницы должен быть не больше 78.

То есть условие будет истинным на всех страницах от:

page3
page4
...
page78

3. Блоки в условии

Если условие совпало — показывается $MFORM_1$.
Если нет — показывается $MFORM_3$.

Дополнительные примеры использования

Показать блок на страницах с 5 по 15

<?if(substr($URI_ID$,4)>=5 and substr($URI_ID$,4)<=15)?>
 <!-- ваш контент -->
<?endif?>

Показать блок только на страницах с номером больше 20

<?if(substr($URI_ID$,4)>20)?>
 <!-- контент -->
<?endif?>

Показать блок только на страницах до 10

<?if(substr($URI_ID$,4)<=10)?>
 <!-- контент -->
<?endif?>

Показать блок на страницах, кроме 1-й

<?if(substr($URI_ID$,4)!=1)?>
 <!-- контент -->
<?endif?>

Показать блок только на чётных страницах

<?if(substr($URI_ID$,4)%2=0)?>
 <!-- чётные -->
<?endif?>

Показать блок на страницах, которые делятся на 5

<?if(substr($URI_ID$,4)%5=0)?>
 <!-- каждая пятая страница -->
<?endif?>

Как адаптировать под любую структуру URL

Если страницы имеют вид:

  • page3 → работает сразу
  • page12 → работает сразу
  • files-15 → можно использовать substr($URI_ID$,6)
  • news25 → можно использовать substr($URI_ID$,4)

Если структура другая — правится только число в substr.

Важные нюансы

  1. Условные операторы работают только в шаблонах модулей, а не в статических страницах вида index.html.
  2. Все страницы внутри диапазона должны быть доступны по правам.
  3. Если какая-либо страница закрыта или удалена — условие может работать некорректно.
  4. $URI_ID$ должен содержать ID страницы в стандартном виде (pageX).

Итог

Использование substr() позволяет не перечислять десятки страниц вручную.
Код становится компактным, управляемым и легко адаптируемым под любые диапазоны и любые задачи.

Это решение полностью избавляет от длинных цепочек or и позволяет надёжно выводить любой блок только на нужных страницах.

Оцените полезность материала!

Лицензия: CC BY-SA 4.0

Автор: Юрий Герук

Похожие материалы:

Комментарии