Как вывести плашку «NEW» для товаров в uCoz

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

Как вывести плашку «NEW» для товаров, добавленных за последние 10 дней в uCoz

Задача

Необходимо, чтобы у товара в интернет-магазине автоматически появлялась плашка «NEW» (или «Новинка»), если товар был добавлен в течение последних 10 дней.
В день добавления метка должна появляться сразу, а на 11-й день — исчезать без ручных действий.

Почему простое вычитание не работает

Многие пробуют написать что-то вроде:

<?if(($DATE$ - $ADD_DATE$) <= 864000)?><span>New</span><?endif?>

Но это не работает, потому что $ADD_DATE$ — это строка в формате дд-мм-гггг (например, 23-10-2025), а не число.
Язык шаблонов uCoz умеет вычитать только числовые значения, поэтому даты нужно сначала разобрать на составляющие и привести к числу.

Как работает решение

Мы используем функции:

  • substr() — чтобы вытащить из $ADD_DATE$ день, месяц и год;
  • int() — чтобы преобразовать их в числа;
  • стандартные переменные $DAY$, $MONTH$, $YEAR$ — чтобы получить текущую дату.

Дальше идёт три проверки:

  1. Тот же месяц и год.
    Разница между текущим днём и днём добавления ≤ 10.
  2. Соседний месяц.
    Если товар добавлен в конце прошлого месяца, а сейчас уже новый — проверяем разницу через длину месяца (28–31 день) и високосные года.
  3. Переход декабря → январь.
    Отдельная проверка для смены года.

Плюс отдельно учтены случаи, когда $ADD_DATE$ отображается словами «Сегодня» или «Вчера».

Готовое условие для шаблона

Код вставляется в шаблон списка товаров и карточки товара (в зависимости от дизайна):

<?if(
 ($ADD_DATE$='Сегодня' or $ADD_DATE$='Вчера')
 ||
 (
 int(substr($ADD_DATE$,6,4)) = $YEAR$ &&
 int(substr($ADD_DATE$,3,2)) = $MONTH$ &&
 $DAY$ - int(substr($ADD_DATE$,0,2)) >= 0 &&
 $DAY$ - int(substr($ADD_DATE$,0,2)) <= 10
 )
 ||
 (
 int(substr($ADD_DATE$,6,4)) = $YEAR$ &&
 $MONTH$ = int(substr($ADD_DATE$,3,2)) + 1 &&
 $DAY$ + (
 31
 - ( (int(substr($ADD_DATE$,3,2))=4) or (int(substr($ADD_DATE$,3,2))=6) or (int(substr($ADD_DATE$,3,2))=9) or (int(substr($ADD_DATE$,3,2))=11) )
 - ( (int(substr($ADD_DATE$,3,2))=2) * (3 - ( (int(substr($ADD_DATE$,6,4))%400=0) or ( (int(substr($ADD_DATE$,6,4))%4=0) and (int(substr($ADD_DATE$,6,4))%100!=0) ) )) )
 ) - int(substr($ADD_DATE$,0,2)) <= 10
 )
 ||
 (
 int(substr($ADD_DATE$,6,4)) + 1 = $YEAR$ &&
 int(substr($ADD_DATE$,3,2)) = 12 &&
 $MONTH$ = 1 &&
 $DAY$ + 31 - int(substr($ADD_DATE$,0,2)) <= 10
 )
)?>
 <span class="label new">⚡ NEW</span>
<?endif?>

Как это работает на практике

  • В день добавления (Сегодня) товар получает плашку ⚡ NEW.
  • На следующий день (Вчера) — плашка остаётся.
  • Затем каждый день идёт обратный отсчёт: 9, 8, 7, …
  • После 10 дней с момента добавления метка автоматически исчезает.

Условие корректно работает для:

  • всех 12 месяцев года,
  • переходов между месяцами,
  • високосных годов,
  • смены года (декабрь → январь).

Пример использования

<div class="product-card">
 <?if(
 ($ADD_DATE$='Сегодня' or $ADD_DATE$='Вчера')
 || (...)
 )?><span class="label new">⚡ NEW</span><?endif?>
 <img src="$PHOTO$" alt="$ENTRY_TITLE$">
 <h3>$ENTRY_TITLE$</h3>
 <div class="price">$PRICE$ $CURRENCY$</div>
</div>

Итого

✔ Метка появляется в день выгрузки
Держится ровно 10 календарных дней
Исчезает автоматически
✔ Работает для всех месяцев и годов
✔ Поддерживает даты вида «Сегодня» и «Вчера»

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

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

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

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

Комментарии