Как получить путь к изображению в 1C-Битрикс
Вы наверняка задавались вопросом «Что это за цифры и где мой путь к картинке?». Давайте разберем несколько примеров, как с этим можно работать.
Как узнать полный путь к картинке в Битриксе
Файлы изображений нам обычно нужны, когда мы говорим за новости или товары. За такие поля, как правило, отвечают свойства элемента «Картинка для анонса» и «Детальная картинка«. Иногда, создают свойства инфоблока, тип этого свойства файл, и используют для дополнительных изображений (например, галерея товаров). Вся проблема в том, что Битрикс не даст вам сразу готовый путь к файлу изображения, или к его уменьшенной ресайз копии.
Советую для начала прочесть небольшую статью про вывод элементов на странице т.к. в дальнейшем мы столкнемся с похожим кодом.
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");?>
if (CModule::IncludeModule("iblock")):
$iblock_id = 1;
$my_elements = CIBlockElement::GetList (
Array("ID" => "ASC"),
Array("IBLOCK_ID" => $iblock_id),
false,
false,
Array('ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE', 'DETAIL_PICTURE')
);
while($ar_fields = $my_elements->GetNext())
echo $ar_fields['PREVIEW_PICTURE']."
";
>
endif;
?>
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
Как видите, мы добавили ‘PREVIEW_PICTURE‘ и ‘DETAIL_PICTURE‘ в массив, который называют arSelect. На моей тестовой копии Битрикса, когда вывожу значения в поле ‘PREVIEW_PICTURE’ получаю
и на самом деле все отработало правильно, мы получили «код изображений», некий уникальный идентификатор файла, по которому мы сможем получить данные.
В 1С-Битрикс есть класс CFile — который используется для работы с файлами и изображениями. Мы воспользуемся его методом GetPath и получим полный путь к изображению на примере картинки для анонса (для детальной все точно также):
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");?>
if (CModule::IncludeModule("iblock")):
$iblock_id = 1;
$my_elements = CIBlockElement::GetList (
Array("ID" => "ASC"),
Array("IBLOCK_ID" => $iblock_id),
false,
false,
Array('ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE', 'DETAIL_PICTURE')
);
while($ar_fields = $my_elements->GetNext())
//echo $ar_fields['PREVIEW_PICTURE']."
";
$img_path = CFile::GetPath($ar_fields["PREVIEW_PICTURE"]);
echo $img_path."
";
>
endif;
?>
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
Теперь у меня выводит:
/upload/iblock/c2a/c2a29aad47791f81f6fa8fd038d83789.jpg
/upload/iblock/35e/35e000d0e7c3a94b32fb086c627f87eb.jpg
/upload/iblock/088/08847400f3c59cae1371cf97009228a9.jpg
Отлично, это то что нужно. Теперь мы при помощи HTML тега img сможем задать картинке путь. Меняем нашу строчку с echo
echo ".$img_path."' alt='Как в битрикс изменить путь к картинкам'>
";
Как изменить размер изображений в Битриксе или выполнить ресайз
Перед тем как создать проект или новый инфоблок, всегда думайте «какого размера должны быть мои изображения». Это очень важно, т.к. если вы не настроите в информационном блоке уменьшение картинки после загрузки, генерацию картинки анонса из детальной (если нужно) и прочие параметры, то размер вашей страницы может превышать несколько мегабайт (а в очень редких случаях даже больше 10 мб).
На самом деле, когда вы строго задаете размеры изображению, используя CSS, картинка все равно грузится в полном размере, и такие вещи не прокатят:
//HTML
img src=".." width="200" height="200">
img src=".." style="width: 200px; height: 200px;">
//CSS
.my-prev-image
width: 200px;
height: 200px;
>
Это не решит нашу проблему с размером исходного изображения на странице, и единственные допустимые правила, на мой взгляд, могут быть max-width и max-height.
Рассмотрим случай, когда у нас уже есть большие картинки и мы хотим получить их уменьшенные копии. Нам поможет метод CFile::ResizeImageGet. Его преимущество в том, что когда мы запускаем страницу, он создает картинки в папке /upload/resize_cache/путь — и если такая картинка уже есть, он автоматически вернет нам путь к ней. Кроме того, мы можем задавать любой размер, качество и даже вид масштабирования изображений.
- BX_RESIZE_IMAGE_EXACT — масштабирует в прямоугольник $arSize c сохранением пропорций, обрезая лишнее;
- BX_RESIZE_IMAGE_PROPORTIONAL — масштабирует с сохранением пропорций, размер ограничивается $arSize;
- BX_RESIZE_IMAGE_PROPORTIONAL_ALT — масштабирует с сохранением пропорций, размер ограничивается $arSize, улучшенная обработка вертикальных картинок.
Давайте попробуем уменьшить наши картинки используя ResizeImageGet:
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");?>
if (CModule::IncludeModule("iblock")):
$iblock_id = 1;
$my_elements = CIBlockElement::GetList (
Array("ID" => "ASC"),
Array("IBLOCK_ID" => $iblock_id),
false,
false,
Array('ID', 'NAME', 'DETAIL_PAGE_URL', 'PREVIEW_PICTURE', 'DETAIL_PICTURE')
);
while($ar_fields = $my_elements->GetNext())
//echo $ar_fields['PREVIEW_PICTURE']."
";
//$img_path = CFile::GetPath($ar_fields["PREVIEW_PICTURE"]);
$img_resize_path = CFile::ResizeImageGet(
$ar_fields["PREVIEW_PICTURE"],
array('width'=>'100', 'height'=>'150'),
BX_RESIZE_IMAGE_PROPORTIONAL
);
//echo "";print_r($img_resize_path);echo "";
echo "]."' alt='Как в битрикс изменить путь к картинкам'>
";
>
endif;
?>
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>$img_resize_path[‘src’] — надеюсь вы заметили что этот метод возвращает нам массив, и нам нужен только src.
- $ar_fields[«PREVIEW_PICTURE»] — поле для кода файла (для детальной меняем на $ar_fields[«DETAIL_PICTURE»]),
- array(‘width’=>’100’, ‘height’=>’150’) — размеры итогового изображения (или вышеупомянутый arSize),
- BX_RESIZE_IMAGE_PROPORTIONAL — тип масштабирования, про котором наши изображения не будут вылазить за указанные границы.
В официальной документации этого метода есть подробное описание, кроме того, там описываются остальные 4 параметра, которые мы тут не использовали (InitSizes, Filters, Immediate, jpgQuality).
Форум
Проблема в том, что сейчас при загрузке картинок через обработку они копируются в папку Temp пользователя C:\Users\Менеджер 1\AppData\Local\Temp\.
Т.е. если мне понадобится перенести базу 1С на другой сервер, то все картинки потеряются.
Плюс картинки добавляют разные менеджеры, каждый под своей учеткой в Windows Server, получается разрозненное хранение загруженных фотографий
Плюс также админы чистят папки Temp. И опять же картинки стираются и на сайт выгружается Характеристики без картинок.
В идеале, чтобы картинки хранились по пути D:\img и все, и ни куда не перемещались.
Кто как решил эту проблему? Как в коде правильно поправить, что картинки брались из папки D:\IMG ?
Страницы: 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

© 2001-2023 «Битрикс», «1С-Битрикс». Работает на 1С-Битрикс: Управление сайтом. Политика конфиденциальности
Путь до картинки bitrix sql
Как в Bitrix с помощью SQL можно менять картинку товара на первью или в материале? Все записи товаров находятся в таблице b_iblock_element . В ней есть папки столбцы priview_picture и detail_picture проблема в том что в них совсем не пути или ссылки а просто численный значения не понятно как связанные с финальной папкой в которой лежат изображения. Например цифре 2 в detail_picture соответствует путь /upload/iblock/852/8528fffbee0d8eb38ba44856ea8d222b.jpg
Отслеживать
19.4k 29 29 золотых знаков 47 47 серебряных знаков 139 139 бронзовых знаков
задан 28 мая 2016 в 22:18
125 1 1 золотой знак 2 2 серебряных знака 7 7 бронзовых знаков
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Очень редко в битриксе возникает необходимость обращаться напрямую к БД. Чтобы получить список элементом детальными изображениями можно воспользоваться следующей конструкцией:
"asc"), array("ACTIVE" => "Y") ); while ($arElement = $rsIBlockElementList->GetNext()) < $arElement["DETAIL_PICTURE"] = (0 < $arElement["DETAIL_PICTURE"] ? CFile::GetFileArray($arElement["DETAIL_PICTURE"]) : false); ?>
"/> ?>
Отслеживать
ответ дан 13 июн 2016 в 19:20
75 1 1 серебряный знак 9 9 бронзовых знаков
в таблице b_file записи с изображениями есть айдишники и их пути.
Изменить автоматическую генерацию имен файлов и сохранять оригинальные названия можно в настройках главного модуля «Сохранять исходные имена загружаемых файлов».
Отслеживать
11.7k 9 9 золотых знаков 28 28 серебряных знаков 40 40 бронзовых знаков
ответ дан 28 мая 2016 в 23:22
46 1 1 бронзовый знак
- sql
- битрикс
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как исправить путь у картинки в Битриксе?

У тебя какой-то скрипт лежит скорее всего в файле /images/index.php, который, судя по запросу, ресайзит картинку и выводит ее. Во-первых, нужно понять, стоит ли вообще что-то менять и если стоит, то либо в result_modifier’е компонента делать ресайз картинки и в arResult писать путь до нее, либо, если ресайз не нужен, просто вставлять прямой путь (например, через CFile::GetPath).
