Назад

Практические приемы разработки в Битрикс: Обрезка изображений, работа с датами и сортировка массивов

Главная
Блог
Практические приемы разработки в Битрикс: Обрезка изображений, работа с датами и сортировка массивов

Работа с веб-разработкой на платформе 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");
?>

Важные моменты:

  • uasort vs usort: uasort сохраняет ключи массива, что часто критично в Битрикс, где ключом может быть ID элемента.

  • Проверка на существование: В реальном проекте всегда стоит проверять, существует ли массив OFFERS и не пуст ли он, чтобы избежать ошибок.

  • Универсальность: Этот метод можно адаптировать для сортировки по любому полю или свойству внутри массива элемента.

Заключение

Эти три примера охватывают ключевые аспекты внутренней разработки в Битрикс: работу с файлами, временем и сложными структурами данных. Понимание и правильное использование этих техник позволяет создавать гибкие, производительные и отвечающие бизнес-требованиям решения. Используйте их как надежный фундамент для своих проектов.

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи