Задать вопрос
@mit5x

Как можно упростить код?

Для формирования картинок нужного размера, под нужные мне размеры экранов, я использую на сайте два вот таких куска кода.

Раз:
<?if(!empty($arItem["PREVIEW_PICTURE"])){
$file_w400 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>400, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w600 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>600, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w800 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>800, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w900 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>900, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w1000 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>1000, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w1200 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>1200, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w1400 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>1400, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w1500 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>1500, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w1600 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>1600, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w1800 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>1800, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w2200 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>2200, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w2100 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>2100, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w2400 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>2400, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w2600 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>2600, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
$file_w3000 = CFile::ResizeImageGet($arItem["PREVIEW_PICTURE"], array('width'=>3000, 'height'=>10000), BX_RESIZE_IMAGE_PROPORTIONAL, true);  
?>


Два:
<picture>
<source srcset="
<?=$file_w600["src"]?> 1x,
<?=$file_w900["src"]?> 1.5x,
<?=$file_w1200["src"]?> 2x,
<?=$file_w1500["src"]?> 2.5x,
<?=$file_w1800["src"]?> 3x,
<?=$file_w2100["src"]?> 3.5x,
<?=$file_w2400["src"]?> 4x"
media="(max-width: 767px)
">
<img src="" srcset="">
</picture>


Выглядит не оптимально и очень не удобно.

Можно как-то иначе описать первый кусок, функцией?

А во втором куске, передавать этой функции нужные мне аргументы, например:
<picture>
<source srcset="
<?=makePreview (arItem["PREVIEW_PICTURE"], 600, 10000,)?> 1x,
<?=makePreview (arItem["PREVIEW_PICTURE"], 800, 10000,)?> 1.5x,
...

Второй кусок у меня в этом случае меньше не будет, тут понятно. Но зато не будет заморочек с первым.
  • Вопрос задан
  • 358 просмотров
Подписаться 2 Простой 9 комментариев
Решения вопроса 1
@mit5x Автор вопроса
Всем спасибо.
В итоге сделал вот так:

<?php
if (!empty($arItem["PREVIEW_PICTURE"])) {
    $widths = [400, 600, 800, 900, 1000, 1200, 1400, 1500, 1600, 1800, 2100, 2200, 2400, 2600, 3000];
    $resizedImages = [];  // Массив для хранения всех изображений

    foreach ($widths as $width) {
        $resizedImage = CFile::ResizeImageGet(
            $arItem["PREVIEW_PICTURE"],
            ['width' => $width, 'height' => 10000],
            BX_RESIZE_IMAGE_PROPORTIONAL,
            true
        );

        // Сохраняем результат в массиве
        $resizedImages[$width] = $resizedImage;

        // Создаём переменную динамически
        ${"file_w{$width}"} = $resizedImage;  // Создание переменной file_w400, file_w600 и т.д.
    }
}

// Теперь вы можете получить доступ к каждому из изображений с помощью динамически созданных переменных
echo '<img src="' . $file_w600["src"] . '" alt="Image 600px">';
echo '<img src="' . $file_w900["src"] . '" alt="Image 900px">';
echo '<img src="' . $file_w1200["src"] . '" alt="Image 1200px">';
// Добавьте вывод других изображений по мере необходимости
?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rusyska55011
@rusyska55011
Сложи переменные и значения 'width' в массив и проходись по нему циклом, вставляя эти значения в вызываемый метод
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы