Как выводить или скрывать содержимое по году добавления материала

Юрий Герук 2025-11-16 17

Содержание

    Работа с датами в шаблонах uCoz часто упирается в одну задачу. Нужно понять, в каком году был добавлен материал, и на основе этого показать или скрыть часть разметки. Например.
    Показать блок только для материалов 2025 года.
    Скрыть старые материалы.
    Отдельно оформить публикации прошлых лет.

    Здесь легко запутаться в операторах. Есть системный оператор $YEAR$. Но он выводит текущий год на сервере. То есть не год добавления материала, а именно текущий календарный год.
    Если в условии использовать $YEAR$=="2025", это никак не привязано к $ADD_DATE$ конкретного материала и к его реальной дате публикации.

    Для работы по году добавления материала нужно использовать только $ADD_DATE$ и получать из него первые четыре символа.

    Где взять год добавления из $ADD_DATE$

    Оператор $ADD_DATE$ содержит дату добавления материала. Пример значения.

    2023-11-16 14:32:10
    

    Год занимает первые четыре символа.
    Получение года добавления.

    substr($ADD_DATE$,0,4)
    

    Эта конструкция работает в шаблонах модулей. Её уже можно использовать внутри условий <?if()?>.

    Почему $YEAR$ не подходит для проверки года добавления

    Кратко.

    $YEAR$ выводит текущий год.
    substr($ADD_DATE$,0,4) выдаёт год именно у этого материала.

    Если в шаблоне написать что то вроде

    <?if($YEAR$=="2025")?>...<?endif?>
    

    Условие будет зависеть только от текущего года. При наступлении 2026 года оно начнёт работать иначе, даже если материалы были добавлены много лет назад.

    Поэтому для задач вида. показать 2024. скрыть 2022. оформить архив до 2020. используется только substr($ADD_DATE$,0,4) внутри условий.

    Базовые условия по году

    Дальше идут типовые конструкции, которые можно копировать в шаблоны и подставлять свои годы.

    Показать содержимое только для материалов 2025 года

    <?if(substr($ADD_DATE$,0,4)=="2025")?>
     ... содержимое ...
    <?endif?>
    

    Работает так. Если материал добавлен в 2025 году, выводится блок внутри условия. Для материалов любых других лет блок не выводится.

    Скрыть содержимое для материалов 2025 года

    <?if(substr($ADD_DATE$,0,4)!="2025")?>
     ... содержимое ...
    <?endif?>
    

    В этом случае всё, кроме 2025 года, будет видно. Публикации 2025 года блок пропускают.

    Показать содержимое только для двух конкретных лет, например 2023 и 2024

    <?if(
     substr($ADD_DATE$,0,4)=="2023" ||
     substr($ADD_DATE$,0,4)=="2024"
    )?>
     ... содержимое ...
    <?endif?>
    

    Здесь используются логические ИЛИ. Достаточно совпадения хотя бы с одним годом.

    Скрыть содержимое для нескольких лет, например 2020, 2021, 2022

    <?if(
     substr($ADD_DATE$,0,4)!="2020" &&
     substr($ADD_DATE$,0,4)!="2021" &&
     substr($ADD_DATE$,0,4)!="2022"
    )?>
     ... содержимое ...
    <?endif?>
    

    Тут используются логические И. Блок выводится только если год добавления не равен ни одному из перечисленных.

    Показать содержимое для материалов старше определённого года

    Пример. Нужны материалы до 2020 года включительно.

    <?if(substr($ADD_DATE$,0,4)<"2020")?>
     ... содержимое ...
    <?endif?>
    

    Такое сравнение работает корректно, потому что год всегда записан четырьмя цифрами.

    Показать содержимое для материалов не старее определённого года

    Пример. Нужны материалы начиная с 2022 года и новее.

    <?if(substr($ADD_DATE$,0,4)>="2022")?>
     ... содержимое ...
    <?endif?>
    

    Диапазон лет. Показать только материалы с 2021 по 2024 год включительно

    <?if(
     substr($ADD_DATE$,0,4)>="2021" &&
     substr($ADD_DATE$,0,4)<="2024"
    )?>
     ... содержимое ...
    <?endif?>
    

    Такой вариант часто используют для архивов и подборок по периодам.

    Примеры применения в реальных шаблонах

    Ниже примеры, которые можно вставлять прямо в шаблоны модулей. Новости. Блог. Каталог файлов. Магазин.

    Предупреждение о возможной устаревшей информации.

    Задача. показать заметное предупреждение для материалов, которые были добавлены до 2020 года.

    <?if(substr($ADD_DATE$,0,4)<"2020")?>
    <div class="old-entry-note">
     Материал добавлен давно. Информация может быть неактуальной.
    </div>
    <?endif?>
    

    Такой блок удобно размещать в шаблоне полного материала.

    Новая версия блока только для материалов 2025 года

    Например, на 2025 год внедрён новый вариант оформления. Для всех остальных год остаётся старая разметка.

    <?if(substr($ADD_DATE$,0,4)=="2025")?>
    <div class="entry-layout entry-layout-2025">
     ... разметка нового вида ...
    </div>
    <?else?>
    <div class="entry-layout entry-layout-archive">
     ... старая разметка ...
    </div>
    <?endif?>
    

    В этом примере один и тот же шаблон ведёт себя по разному для старых и новых материалов.

    Скрыть рекламный блок для материалов текущего года

    Суть. не показывать рекламу в свежих статьях, но оставить её для старых публикаций.
    Предположим, что сейчас на сайте актуальный год 2025.

    <?if(substr($ADD_DATE$,0,4)!="2025")?>
    <div class="entry-banner">
     ... код баннера ...
    </div>
    <?endif?>
    

    Когда год сменится, нужно будет просто обновить число внутри условия.

    Вывод только материалов до определённого года в списке

    Например, формируется список только архивных материалов до 2022 года.

    <?if(substr($ADD_DATE$,0,4)<"2022")?>
    <div class="entry-archive-item">
     <a href="$ENTRY_URL$">$NAME$</a>
     <span class="entry-archive-year">
     $ADD_DATE$
     </span>
    </div>
    <?endif?>
    

    Такое условие можно добавить в шаблон вывода материалов категории или в глобальный шаблон вывода списка.

    Вывод только материалов определённых годов в списке

    Например. нужен список только за 2019, 2020 и 2021 годы.

    <?if(
     substr($ADD_DATE$,0,4)=="2019" ||
     substr($ADD_DATE$,0,4)=="2020" ||
     substr($ADD_DATE$,0,4)=="2021"
    )?>
    <div class="entry-year-filtered">
     <a href="$ENTRY_URL$">$NAME$</a>
    </div>
    <?endif?>
    

    Так организуют подборки вроде. лучшие материалы за выбранные годы.

    Подпись или бейдж для материалов конкретного года

    Пример. для материалов 2024 года нужно добавить небольшую метку.

    <?if(substr($ADD_DATE$,0,4)=="2024")?>
    <span class="entry-badge entry-badge-2024">
     Материал за 2024 год.
    </span>
    <?endif?>
    

    Этот кусок удобно вставить рядом с заголовком или датой.

    Краткое резюме

    Главная идея.

    • $YEAR$ показывает текущий календарный год и не связан с датой добавления конкретного материала.
    • Для логики по году добавления используется только substr($ADD_DATE$,0,4).

    Через простые условия вида substr($ADD_DATE$,0,4)=="2025" или substr($ADD_DATE$,0,4)<"2020" можно.

    • выводить блоки только для нужного года.
    • скрывать отдельные годы или несколько лет.
    • работать с диапазонами лет.
    • оформлять старые и новые материалы по разному.
    • собирать архив и подборки по годам прямо на уровне шаблонов.

    Такой подход не зависит от текущего года на сервере и всегда привязан к фактической дате добавления материала.

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

     

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

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

    Комментарии