Ещё недавно для прогресс-бара чтения на сайте приходилось подключать JavaScript: отслеживать событие scroll
, вычислять процент прокрутки и менять ширину элемента. Теперь это можно сделать чисто на CSS, благодаря новой возможности — Scroll-driven animations.
Все записи категории ‘Программирование’
Анимация прокрутки в CSS: animation-timeline: scroll()
Форматирование дат в Twig на Drupal 10/11: date и format_date() с примерами
В Drupal 10/11 при работе с шаблонами Twig часто требуется вывести дату в нужном формате — будь то текущая дата, дата из поля сущности или timestamp. Для этого можно использовать стандартный Twig-фильтр date
, а также функцию format_date()
.
В этой статье разберём основные варианты с примерами, в том числе:
- использование форматов из админки
/admin/config/regional/date-time
. - получение текущего timestamp;
- вывод даты в любом формате PHP;
- локализация с помощью
format_date()
; - работа с датами в ISO-формате;
Как работает position: sticky с bottom: 0 и почему он «не работает»
Иногда кажется, что position: sticky
работает только с top
. Указываешь bottom: 0
— и ничего не происходит. Особенно, если пытаешься сделать так, чтобы элемент «прилип» к нижней границе контейнера при прокрутке. Почему так?
Как запретить Drupal использовать sites/default для неизвестных хостов
В Drupal при использовании мультисайтовой конфигурации (sites/sites.php
) существует скрытая особенность: если домен не найден в $sites
, Drupal по умолчанию загружает настройки из sites/default
. Это может привести к неожиданным проблемам:
- Открытие сайта по IP-адресу;
- Подмена домена в
Host
-заголовке (в том числе в атакующих целях); - Доступ к сайту в неподходящем контексте (на продакшене с тестовым доменом и т.д.);
- Использование кеша с абсолютными ссылками с «чужого домена»;
- и т.д.
К счастью, поведение легко изменить.
Читать далее »Эффективное кеширование по доступу к ноде: параметрический Cache Context в Drupal

Когда мы используем кеширование в Drupal, типичный подход — добавить user
в список контекстов: ['user']
. Это означает, что для каждого пользователя будет создана своя версия кеша. Иногда это оправдано. Но если доступ можно классифицировать в ограниченное число состояний — гораздо разумнее кешировать по этим состояниям.
Отключаем страницы терминов таксономии в Drupal
По умолчанию Drupal генерирует маршруты для каждого термина таксономии. Это означает, что у каждого термина появляется своя страница с URL вида /taxonomy/term/123
. В некоторых случаях такие страницы могут быть полезны, например, если вы используете термины как категории для материалов и хотите отображать подборку по ним. Но чаще всего — особенно для вспомогательных словарей (тегов, фильтров, FAQ-групп) — такие страницы не нужны вовсе.
Drupal: шаблоны для taxonomy_term и view mode — как добавить?
При работе с таксономией в Drupal нередко возникает потребность отображать термины по-разному в зависимости от контекста. Например, один и тот же термин в режиме teaser
должен выводиться компактно, а в режиме full
— с подробным описанием.
Если вы используете разные view mode для терминов таксономии, вполне логично захотеть разные Twig-шаблоны для каждого режима. Но есть нюанс: в отличие от сущностей node
, по умолчанию Drupal не предоставляет template suggestions для taxonomy_term
в зависимости от view mode.
WordPress: вывод рубрик и тегов таксономии в шаблоне single.php
Если вы хотите отобразить рубрики (категории) и теги поста в шаблоне single.php
— т.е. шаблоне одиночной статьи, WordPress предоставляет удобные функции из API-шаблонов. В этой статье разберем, как их использовать правильно и оформить вывод.
Единицы размеров в CSS, отличия между REM, EM, PX и т.п.
В CSS размеры можно задавать с помощью разных единиц измерения: rem
, em
, px
, %
и другие. Разберём ключевые различия между rem
, em
и прочими.
Нормализация базы данных, разбираемся с нормальными формами на примере
Нормализация — это поэтапный процесс, происходит по шагам. Каждый шаг — это нормальная форма (НФ), которая обычно требует, чтобы предыдущий этап нормализации был выполнен. Всего их выделяют шесть, но чаще всего достаточно первых четырёх. Я рассмотрю их применение на простом примере.
Читать далее »