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

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

Содержание

    Задача

    Нужно вывести один блок шаблона (например, форму, баннер, текст) только на страницах с определёнными номерами: 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

     

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

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

    Комментарии