Работа с веб-разработкой на платформе 1С-Битрикс часто требует решения стандартных, но важных задач: обработки изображений, работы с датами и правильной сортировки данных. В этой статье мы разберем три практических примера кода, которые помогут вам сделать ваши компоненты и шаблоны более функциональными и эффективными.
1. Интеллектуальная обрезка изображений
Одной из самых частых задач является вывод изображений в строго заданных размерах, без потери пропорций. В Битрикс для этого идеально подходит метод CFile::ResizeImageGet.
<?
// Обрезка изображения с сохранением пропорций
$file = CFile::ResizeImageGet(
$arResult["DETAIL_PICTURE"], // Исходный массив изображения
array('width' => 50, 'height' => 50), // Желаемые размеры
BX_RESIZE_IMAGE_PROPROPORTIONAL, // Метод обрезки (пропорционально)
true // Флаг кэширования
);
?>
<img src="<?= $file['src']; ?>" alt="<?= $arResult['NAME']; ?>">Что здесь происходит?
-
BX_RESIZE_IMAGE_PROPORTIONAL— гарантирует, что изображение будет уменьшено по большей стороне, а пропорции сохранятся. Никаких искажений не будет. -
Кэширование (
true) — Битрикс создаст физический файл обработанного изображения и сохранит его. При следующих запросах изображение будет отдаваться с диска, что значительно снижает нагрузку на процессор.
Альтернативные методы обрезки:
-
BX_RESIZE_IMAGE_EXACT— изображение будет точно подогнано под указанные размеры, возможны искажения. -
BX_RESIZE_IMAGE_PROPORTIONAL_ALT— аналогиченPROPORTIONAL, но более "умный" алгоритм при обрезке.
2. Фильтрация элементов по дате
Часто в компонентах или в ORM-запросах требуется фильтровать элементы, устанавливая временные рамки. Например, выбрать все элементы до конца текущего дня.
<?
// Получаем дату-метку для "сегодня, 23:59:59"
$endOfCurrentDay = date("d.m.Y H.i.s", mktime(23, 59, 59, date("m"), date("d"), date("Y")));
// Пример использования в фильтре для CIBlockElement::GetList
$arFilter = [
'<=DATE_ACTIVE_FROM' => $endOfCurrentDay,
'IBLOCK_ID' => $iblockId
];
?>Разберем конструкцию:
-
Функция
mktime(23, 59, 59, ...)создает временную метку для последней секунды указанного дня (сегодня). -
date("d.m.Y H.i.s", ...)форматирует эту метку в строку, понятную API Битрикс.
Этот подход универсален и может быть использован для формирования любых граничных дат (начало недели, конец месяца и т.д.).
3. Сортировка ассоциативных массивов по внутренним значениям
Когда стандартных возможностей сортировки компонента Битрикс недостаточно, на помощь приходит функция uasort(). Она позволяет отсортировать массив, сохраняя ключи, на основе пользовательской функции сравнения.
Предположим, у нас есть массив товаров $arResult["ITEMS"], и мы хотим отсортировать его по цене из первого торгового предложения.
Шаг 1: Создаем функции сравнения
<?
// Функция для сортировки по возрастанию (от меньшей к большей цене)
function _sortByPriceAsc($arItem1, $arItem2)
{
$price1 = $arItem1["OFFERS"][0]["CATALOG_PRICE_1"];
$price2 = $arItem2["OFFERS"][0]["CATALOG_PRICE_1"];
if ($price1 == $price2) {
return 0;
}
// "Вернуть 1" означает, что первый элемент больше второго и должен идти после.
return ($price1 > $price2) ? 1 : -1;
}
// Функция для сортировки по убыванию (от большей к меньшей цене)
function _sortByPriceDesc($arItem1, $arItem2)
{
$price1 = $arItem1["OFFERS"][0]["CATALOG_PRICE_1"];
$price2 = $arItem2["OFFERS"][0]["CATALOG_PRICE_1"];
if ($price1 == $price2) {
return 0;
}
// Здесь, наоборот, если первый элемент меньше, он должен идти после.
return ($price1 < $price2) ? 1 : -1;
}
?>Шаг 2: Применяем сортировку к массиву
<?
// Для сортировки по возрастанию
uasort($arResult["ITEMS"], "_sortByPriceAsc");
// Или для сортировки по убыванию
uasort($arResult["ITEMS"], "_sortByPriceDesc");
?>Важные моменты:
-
uasortvsusort:uasortсохраняет ключи массива, что часто критично в Битрикс, где ключом может быть ID элемента. -
Проверка на существование: В реальном проекте всегда стоит проверять, существует ли массив
OFFERSи не пуст ли он, чтобы избежать ошибок. -
Универсальность: Этот метод можно адаптировать для сортировки по любому полю или свойству внутри массива элемента.
Заключение
Эти три примера охватывают ключевые аспекты внутренней разработки в Битрикс: работу с файлами, временем и сложными структурами данных. Понимание и правильное использование этих техник позволяет создавать гибкие, производительные и отвечающие бизнес-требованиям решения. Используйте их как надежный фундамент для своих проектов.