Как изменить размер шаблона в битрикс
Перейти к содержимому

Как изменить размер шаблона в битрикс

  • автор:

Изменить размер картинок в битрикс

Встала задачка, на собственном сайте, уменьшить размер превьюшек картинок у анонсов раздела дизайн. Само собой, пере заливать все картинки и лень и долго и глупо. Можно воспользоваться стандартной функцией битрикс CFile::ResizeImage и изменить размеры картинок на лету Для того, чтобы отресайзерить уже загруженные изображения, в нужном месте шаблона компонента вставляем

'.$arItem[

$renderImage = CFile::ResizeImageGet($arItem[«PREVIEW_PICTURE»], Array(«width» => НОВАЯ_ШИРИНА, «height» => НОВАЯ_ВЫСОТА), BX_RESIZE_IMAGE_EXACT, false);
echo »;
?>

Михаил Базаров

Вот и все. В итоге новые, отресайзенные картинки попадут в папку /upload/resize_images и сами применяться в шаблоне

Автор: Михаил Базаров

Закладки:
  • Заработок в интернете (2)
  • Продвижение сайтов (5)
  • 1С-Битрикс (53)
  • Разное (11)
  • css (2)
О разделе:

В данном разделе собраны полезные записи, как мои, так и моих друзей, коллег и партнеров. Полезные записи, приёмы разработки, в общем, всё то, что желательно иметь всегда под рукой.

Вы также можете выслать мне свой рецепт, по разработке сайтов заполнив форму обратной связи, приложив файл со своей статьёй.

Поиск по сайту:
Создание сайта на 1C-Битрикс:
Продвижение сайта:
Свежие записи:

Микроразметка необходима сайту, чтобы упростить поисковикам распознавание информации, размещенной на нем. Shema.org помогает роботам наиболее точно обработать.

Иногда не достаточно картинки анонса, детальной и нужно загружать на сайт больше фотографий к примеру в карточку товара, как правило это делается через.

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

Для некоторых платёжных систем, таких как Яндекс Касса и прочих подобных, требуется наличие SSL сертификата. Ваш сайт должен без ошибок и предупрежден.

Часто возникает необходимость применять разные стили или html код к элементам компонентов новостей и каталога в Битрикс.
Нечётные новости выводились в.

Изменить размер картинок на лету в битрикс

Встала задачка: на собственном сайте, уменьшить размер превьюшек картинок у анонсов раздела дизайн. Само собой, перезаливать все картинки и лень и долго и глупо. Можно воспользоваться стандартной функцией битрикс CFile::ResizeImage и изменить размеры картинок на лету.

Изменить размер картинок на лету в битрикс

Для того, чтобы отресайзерить уже загруженные изображения в нужном месте шаблона компонента, вставляем:

$renderImage = CFile::ResizeImageGet( $arItem["PREVIEW_PICTURE"], Array("width" => НОВАЯ_ШИРИНА, "height" => НОВАЯ_ВЫСОТА), BX_RESIZE_IMAGE_EXACT, false ); echo ''.$arItem[';

Параметры масштабирования и обрезки можно установить такими переменными:

  • BX_RESIZE_IMAGE_EXACT — масштабирует в прямоугольник $arSize c сохранением пропорций, обрезая лишнее (в примере выше именно оно);
  • BX_RESIZE_IMAGE_PROPORTIONAL — масштабирует с сохранением пропорций, размер ограничивается $arSize;
  • BX_RESIZE_IMAGE_PROPORTIONAL_ALT — масштабирует с сохранением пропорций за ширину при этом принимается максимальное значение из высоты/ширины, размер ограничивается $arSize, улучшенная обработка вертикальных картинок.

В итоге новые, отресайзенные картинки попадут в папку /upload/resize_images и сами применятся в шаблоне.

Параметры метода CFile::ResizeImageGet:

array CFile::ResizeImageGet( mixed file, array arSize, const resizeType = BX_RESIZE_IMAGE_PROPORTIONAL, bool bInitSizes = false, array arFilters = false, bool bImmediate = false, bool jpgQuality = false ); 
  • file Идентификатор файла из таблицы b_file или массив описания файла (Array(FILE_NAME, SUBDIR, WIDTH, HEIGHT, CONTENT_TYPE)), полученный методом GetFileArray.
  • Size Массив в виде Array(«width»=>WIDTH, «height»=>HEIGHT) со значениями ширины и высоты для уменьшаемой картинки. Оба ключа обязательны.
  • resizeType Тип масштабирования:
  • InitSizes Флаг возвращения в результирующем массив размеров измененной картинки. True — возвращает, false — нет
  • Filters Массив массивов для постобработки картинки с помощью фильтров: array(array(«name» => «sharpen», «precision» => 15)). Фильтров пока один — sharpen. Задавать его не обязательно — будет инициализирован автоматом. Используется для наведения резкости у миниатюр.
  • Immediate Флаг передается в обработчик события OnBeforeResizeImage, по смыслу означает масштабирование непосредственно при вызове метода. Обработчик в принципе может выполнять отложенное масштабирование.
  • jpgQuality Число, устанавливающее в процентах качество JPG при масштабировании. Чем больше значение, тем выше качество и больше размер файла изображения.

Ресайз изображения в 1С Битрикс

В 1С Битрикс существует метод изменения размера изображения CFile::ResizeImageGet() который может изменить размер изображения (с учётом пропорции или без него), его качество, обрезать изображения. Этот метод сохраняет уменьшенную копию изображения в папку /upload/resize_cache/ . При повторном вызове и актуальности кеша, метод сразу вернёт путь к ранее созданной картинке, что значительно экономит ресурс сервера. Метод принимает следующие параметры:

Параметр Описание Доступно с версии
file Идентификатор файла из таблицы b_file или массив описания файла (Array(FILE_NAME, SUBDIR, WIDTH, HEIGHT, CONTENT_TYPE)), полученный методом GetFileArray()
Size Массив в виде [‘width’=>100, ‘height’=>150] со значениями ширины и высоты для уменьшаемой картинки. Оба ключа обязательны.
resizeType Тип масштабирования изображения:
  • BX_RESIZE_IMAGE_EXACT — масштабирует в прямоугольник $arSize c сохранением пропорций, обрезая срезания части изображения;
  • BX_RESIZE_IMAGE_PROPORTIONAL — масштабирует с сохранением пропорций, размер ограничивается $arSize , т.е. если какая-то часть изображения не попала в размеры $arSize , она будет удалена;
  • BX_RESIZE_IMAGE_PROPORTIONAL_ALT — масштабирует с сохранением пропорций за ширину при этом принимается максимальное значение из высоты/ширины, размер ограничивается $arSize , улучшенная обработка вертикальных картинок.

Тут нас будут интересовать первые 2 метода.

Вызывается метод примерно вот так:

 $file = CFile::ResizeImageGet( $uInfo['PERSONAL_PHOTO'], ['width'=>150, 'height'=>150, BX_RESIZE_IMAGE_PROPORTIONAL, true ); $img = ''; 

Получается довольно громоздко и неудобно. И поэтому я в своей работе использую обёртку для этой функции которая выглядит так:

 /** * Ресайз изображения с проверкой атрибутов * @param $photo id картинки или массив содержащий id * @param $wi ширина * @param $hi высота * @param $mode тип масштабирования при ресайзе (обрезать изображение или пропорционально уменьшать) * @return mixed */ function ResizeImage($photo, $wi, $hi, $mode = false) < if(is_array($photo)) $photo = $photo["ID"]; if($wi >0 && $hi > 0) < $arPhoto = CFile::ResizeImageGet($photo, Array("width" =>$wi, "height" => $hi), ($mode ? BX_RESIZE_IMAGE_EXACT : BX_RESIZE_IMAGE_PROPORTIONAL), true, false, false, 100); $src = $arPhoto["src"]; > else < $arPhoto = CFile::GetFileArray($photo); $src = $arPhoto["SRC"]; >return $src; > 

Добавить её нужно в файл init.php расположенный или в папке /bitrix/php_interface/ или в папке /local/php_interface/ если он есть и там и там, то у local будет приоритет.

Пользоваться ей в коде гораздо проще. Ей необходимо передать в коде ID изображения или массив описывающий его, например $arItem[‘PREVIEW_PICTURE’] это массив картинки для анонса, например в компоненте «Список новостей» bitrix:news , в этом случае функция сама найдёт идентификатор изображения по ключу ID. Далее передаётся размер. Параметр $mode влияет на то как изображение будет уменьшено. Не обязательный, по умолчанию false, что приводит к пропорциональному уменьшению изображения без удаления части картинки.

Применение функции

Пример вызова пользовательской функции ресайза:

 <?=$arItem['NAME'];?> 

Как видите такой вызов гораздо короче и лучше читается. По желанию можно доработать эту функцию и например добавлять к изображению водяной знак.

Как изменить размеры картинок которые загружаюстя и урезаются?

Как изменить размеры картинок которые загружаюстя и урезаются?
Вот находимся мы с разделе товаров и видим список твоаров, а там картинки слишком маленькие, как мне сделать так чтобы картинки загружались с размером 150х150 пискелей?

Сообщений: 1782 Баллов: 257 Регистрация: 04.05.2007
02.05.2011 17:00:26

У каждого товара есть две картинки: детальная и для анонса. Размеры этих картинок задаются в настройках инфоблока, и для их изменения есть несколько вариантов:
1. настроить инфоблок на другой размер картинок (старые придется перезалить)
2. использовать готовое решение, например, resizer (найдите через поиск, я его не продаю). Это позволяет использовать несколько размеров картинок путем создания нужного из детальной.
3. написать свою перерезалку. Аналогично п. 2

ITConstruct . Разработка сайтов в Москве и Новосибирске. Внедрение корпоративных порталов. Техническая поддержка

Постоянный посетитель
Сообщений: 184 Баллов: 32 Регистрация: 21.07.2008
02.05.2011 17:14:43

не получается настроить инфоблок чтобы картинка в переменной: $arElement[«PREVIEW_IMG»] содержалась нужных мне размеров, только размеры на странице просмотра товара настраиваются.

Еше проблема в том, что туда где список товаров попадает картинка из «Подробно», а картинки из «Анонс» вообще нигде нет. И вот в этой переменной и хранится картинка из «Подробно» — $arElement[«PREVIEW_IMG»]

Первый вопрос тот же, как сделать чтобы в списке товаров выводились картинки с нужными мне размерами?

Второй вопрос как сделать чтобы в компоненте списка товаров в переменной $arElement[«PREVIEW_IMG»] находились данные от картинки Анонса а не картинки Детально?

Заранее благодарю за помощь.

Битрикс малый бизнес 10.0

Сообщений: 987 Баллов: 87 Регистрация: 05.03.2009
02.05.2011 17:15:02

Подробнее про пункты:
1. Рабочий стол -> Контент -> Информ. блоки -> Типы информ. блоков -> Ваш инфоблок
Смотрим «Поля», нужном ставим Уменьшать если большая и размеры

while ($arElement = $res->GetNext()) < $image = CFile::GetFileArray($arElement['PHOTO']); if (!empty($image)) < // Пропорциональное уменьшение аватарки $tmpImage = CFile::ResizeImageGet($image, array("width" =>150, "height" => 150), BX_RESIZE_IMAGE_PROPORTIONAL, false); $image['src'] = $tmpImage['src']; > else < // Картинка, если аватарки нет $image['src'] = '/noimage150.png'; >print '' . $arElement['NAME'] . ''; >

З.Ы. Если вам нужны именно квадратные изображения, используйте еще clip: rect(Y1, X1, Y2, X2)

Постоянный посетитель
Сообщений: 184 Баллов: 32 Регистрация: 21.07.2008
02.05.2011 17:20:28
Ведь если я изменю файл модуля то при обновлении системы все вернется назад. или другого выхода нет?
Сообщений: 987 Баллов: 87 Регистрация: 05.03.2009
02.05.2011 17:20:44

Цитата
Связь пишет:
Второй вопрос как сделать чтобы в компоненте списка товаров в переменной $arElement[«PREVIEW_IMG»] находились данные от картинки Анонса а не картинки Детально?

В шаблоне компонента выведите $arElement (пример: print_r($arElement)
И посмотрите там картинку анонса.

Сообщений: 987 Баллов: 87 Регистрация: 05.03.2009
02.05.2011 17:22:05

Цитата
Связь пишет:
Ведь если я изменю файл модуля то при обновлении системы все вернется назад. или другого выхода нет?

Вы не будуте изменять компонент или модуль, вы будете редактировать шаблон компонента — это другое.

В шаблоне компонента делайте любые модификации. Никакого вреда системе этим не нанесете.

Постоянный посетитель
Сообщений: 184 Баллов: 32 Регистрация: 21.07.2008
02.05.2011 17:29:43
спасибо, во всем разобрался.
Постоянный посетитель
Сообщений: 133 Баллов: 22 Регистрация: 28.08.2011
30.09.2011 09:47:04

Подскажите пожалуйста: битрикс уменьшил фото используя BX_RESIZE_IMAGE_EXACT.
Фото получились обрезанные и не пропорциональные.Как обрезать их заново используя BX_RESIZE_IMAGE_PROPORTIONAL ?

Заглянувший
Сообщений: 6 Регистрация: 24.11.2011
Краснов Кирилл
29.12.2011 17:43:35

Объясните, пожалуйста. В настройках инфоблока стоит урезать если больше 110×110. Пытаюсь вывести каталог товара с фильтром, а в PREVIEW_IMAGE картинка оригинального или детального размера. Хотя в анонсе на товар картинка корректна.

Страницы: 1

Продукты

Управление сайтом
Битрикс24
Интернет-магазин + CRM

Решения

Для интернет-магазинов
Каталог готовых решений

Внедрение

Выбрать партнера
Проверить партнера
Стать партнером

1С-Битрикс http://www.1c-bitrix.ru Общие вопросы info@1c-bitrix.ru Приобретение и лицензирование продуктов : sales@1c-bitrix.ru Маркетинг/мероприятия/PR marketing@1c-bitrix.ru Партнерская программа partners@1c-bitrix.ru Мы работаем с 10:00 до 19:00 по московскому времени. Офис в Москве 127287 Россия Московская область Москва 2-я Хуторская улица дом 38А строение 9 Офис в Калининграде +7 (4012) 51-05-64 Офис в Калининграде 236001 Россия Калининградская область Калининград Московский проспект 261 Офис в Киеве ukraine@1c-bitrix.ru Телефон в Киеве +3 (8044)221-55-33 Офис в Киеве 01033 Украина Калининградская область Киев улица Шота Руставели 39/41 офис 1507

Контент для лиц от 16 лет и старше

© 2001-2024 «Битрикс», «1С-Битрикс». Работает на 1С-Битрикс: Управление сайтом. Политика конфиденциальности

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *