Я создаю информационный блок и хочу установить свойство DETAIL_PICTURE. Картинка физически находится на другом сервере. Скажите, есть ли возможность установить это свойство без промежуточного сохранения на сервере (что бы не следить потом за этими файлами, когда они будут не нужны)? Я пробую разные способы, например, MakeFileArray - но нет, это не срабатывает, к сожалению. Путь к картинке задаю как http://site.ru/img.jpg
Все картинки Битрикс сохраняет на сайт. Вы можете прописывать картинку в отдельном свойстве - просто одну или несколько ссылок, и использовать их вместо детальной картинки.
Денис Сон написал: Все картинки Битрикс сохраняет на сайт. Вы можете прописывать картинку в отдельном свойстве - просто одну или несколько ссылок, и использовать их вместо детальной картинки.
Да, мы думали об этом, но это потребует большой переделки существующего кода. То есть, уже все написано с использованием именно DETAIL_PICTURE. Мы сейчас хотим от ручного создания инф. блоков и автоматизируем эту процедуру.
Денис Сон написал: Все картинки Битрикс сохраняет на сайт. Вы можете прописывать картинку в отдельном свойстве - просто одну или несколько ссылок, и использовать их вместо детальной картинки.
Да, мы думали об этом, но это потребует большой переделки существующего кода. То есть, уже все написано с использованием именно DETAIL_PICTURE. Мы сейчас хотим от ручного создания инф. блоков и автоматизируем эту процедуру.
Не потребует. result_modifier.php везде переписываете на изменение DETAIL_PICTURE - это не так много изменений
b7music написал: Ну так сделайте обработчик, который DETAIL_PICTURE подменяет на ваше свойство, в котором указана ссылка на картинку. Но вообще, парсить не хорошо
А мы не парсим - купили другой сайт, где база товаров богаче, чем у нас. Поэтому синхронизируем сайты.
Денис Сон написал: Все картинки Битрикс сохраняет на сайт. Вы можете прописывать картинку в отдельном свойстве - просто одну или несколько ссылок, и использовать их вместо детальной картинки.
Да, мы думали об этом, но это потребует большой переделки существующего кода. То есть, уже все написано с использованием именно DETAIL_PICTURE. Мы сейчас хотим от ручного создания инф. блоков и автоматизируем эту процедуру.
Не потребует. result_modifier.php везде переписываете на изменение DETAIL_PICTURE - это не так много изменений
Ну, на самом деле, таким образом нужно брать не только DETAIL_PICTURE, а еще много других картинок. То есть, начнем с этого, а по такому же принципу и сделаем остально.
Я правильно понимаю, что битрикс так не умеет? Что обязательно картинка должна лежать локально?
b7music написал: DETAIL_PICTURE битрикс берет из локального каталога, по дефолту.
Скорее взять то ее можно хоть откуда, только сохранит он картинку для элемента инфоблока в локальной файловой системе по своим правилам, а в базе данных для DETAIL_PICTURE запишет путь к этой картинке относительно корня сайта.
"Скорее взять то ее можно хоть откуда, только сохранит он картинку для элемента инфоблока в локальной файловой системе по своим правилам, "
так вот не берет! если указать путь http://site/img.jpg то не срабатывает. Об этом и вопрос... Можно, конечно, предварительно копировать изображение, но не слишком это удобно.
Серафима Тетерина написал: "Скорее взять то ее можно хоть откуда, только сохранит он картинку для элемента инфоблока в локальной файловой системе по своим правилам, "
так вот не берет! если указать путь http://site/img.jpg то не срабатывает. Об этом и вопрос... Можно, конечно, предварительно копировать изображение, но не слишком это удобно.
Код напишите, которым вы программно элемент инфоблока создаете.
Если уж очень нужно, то можно сделать и без переработки шаблонов. Потратил пару часов, но у меня получилось. В Битрикс для работы с изображениями есть три очень интересных события, при использовании их вместе можно добиться желаемого результата. В качестве примера для изучения скопируйте нижеприведенный код в отдельный php-файл на сайте и в браузере откройте.
Как я понял, вы предлагаете сохранять для файлов картинок абсолютный адрес на другом ресурсе в detail_picture, а во время работы шаблона, благодаря обработке событий, получать эту картинку с удаленного сайта, сохранять ее во временный файл, а уже потом использовать в шаблоне эту временную копию. Как-то так?
Но в момент сохранения файл, хоть и скачивается (только для определения параметров), но не сохраняется - сразу же удаляется. Т.е. при таком сохранении никакие файлы не сохраняются на сайт. Только в таблицу b_file добавляется запись, где вместо обычного имени файла типа "image.jpg" указан полный путь к картинке на другом сервере, т.е. тот самый http:// mysite.ru/image.jpg. А когда картинка извлекается любым способом - то срабатывает событие "OnGetFileSRC", и в результате получается, что возвращается SRC не такой как обычно (/upload/iblock/abc/image.jpg), а тот же самый http:// mysite.ru/image.jpg. Поэтому, теоретически, в шаблонах менять ничего не нужно.
Но, повторю - это для сохранения через API. При добавлении картинки через админку она будет загружена как обычно.
Скрипт составил только сегодня, по мотивам данного топика. Вспомнил про указанные события и решил проверить как они работают. Оказалось, что работают не так, как хотелось бы, но данную задачу решить можно.
В первом посте спрашивалось, как решить задачу без промежуточного сохранения - такое, в принципе, можно, но тогда не получится узнать размеры картинки, и чтобы картинку битрикс не превратил ее в application/octet-stream, нужно указать любую ширину и высоту отличные от нуля.
Если совсем отказаться от хранения картинок у себя, и отказаться от получения размера, то кроме экономии места на хостинге можно еще и значительно ускорить процесс загрузки - т.к. загрузка картинок это самый длительный процесс при загрузке товаров.
Денис Сон, ну как бы...вы же понимаете, что браузеру лучше загрузить сто картинок на одном сайте с разных доменов, чем с одного. Это связано с количеством одновременных соединений... Но это "улучшение" конечно имеет место быть, если все домены твои и ты можешь отслеживать скорость отдачи контента. Когда грузятся изображения с чужих сайтов, то это не очень. Во первых чужие картинки не хорошо тырить, во вторых не все сервера одинаково быстры, и какие то картинки могут и вовсе недозагрузиться. И есть один интересный способ, как мстить таким сайтам, которые тырят картинки, а вернее грузят с твоего сайта. Это на своем сайте меняем урл картинки, а по старому урлу отдаем какую нибудь левую картинку.
Если совсем отказаться от хранения картинок у себя, и отказаться от получения размера, то кроме экономии места на хостинге можно еще и значительно ускорить процесс загрузки - т.к. загрузка картинок это самый длительный процесс при загрузке товаров.
Меня вот тоже одно время интересовал вопрос - хорошо бы сделать поддомен и с него грузить все картинки на основной сайт. Но все остановилось именно на DETAIL_PICTURE. Думаю, в таком случае, если свой root сервер, то можно грузить картинки как обычно, а папку upload сделать символьной ссылкой для поддомена. Останется только в шаблоне вывода элементов - поправить вывод картинок. Наверное, так.
Оно и понятно, что в плане производительности лучше грузить с других сайтов. Просто тут есть свои минусы. Основной - тот о котором вы упомянули, что картинка может поменяться, а URL у нас на сайте нет. Ну и второе - на разных сайтах картинки могут загружаться по-разному быстро, на некоторых - могут вообще не загрузиться с первого раза.
Но тут другое. Я, когда осмысливал задачу, вообще не думал о чем-либо то в направлении «тырить картинки». Я являюсь разработчиком модулей импорта (в т.ч. Импорт данных) и вопрос я рассматривал как загрузку товаров от какого-либо поставщика, который обычно отдает пользователям XML либо Excel. Хотя, в таких случаях, грузить с их серверов иногда запрещают, но не всегда - и если учитывать что картинки могут занимать несколько гигабайт, то такой способ в некоторых случаях может позволить сэкономить как время, так и деньги. Поэтому, мой код это просто ответ на поставленный в топике вопрос.
Екатерина Шелест написал: Меня вот тоже одно время интересовал вопрос - хорошо бы сделать поддомен и с него грузить все картинки на основной сайт. Но все остановилось именно на DETAIL_PICTURE.Думаю, в таком случае, если свой root сервер, то можно грузить картинки как обычно, а папку upload сделать символьной ссылкой для поддомена. Останется только в шаблоне вывода элементов - поправить вывод картинок. Наверное, так.
Те события, на основе которых я сделал код, как раз позволяют использовать внешние картинки, без необходимости доработки шаблонов. Т.е. можно вообще любые загружаемые файлы, которые сохраняются в b_file, уносить на хранение хоть на свой домашний сервер, хоть в CDN, хоть на поддомен - и загружать уже оттуда. Таким образом можно реализовать любые «хотелки» в плане хранения файлов.
Роман Семёнов написал: они каждый раз на лету отрабатывают (при чтении из БД информации о картинке)? или только при обновлении создании изображения?
Liveapi в помощь. OnGetFileSRC срабатывает при получении массива, описывающего имеющийся в БД файл, т.е. каждый раз. OnMakeFileArray - при получении массива, описывающего сахраняемый файл, для сохранения, т.е. только однажды.
b7music написал: DETAIL_PICTURE битрикс берет из локального каталога, по дефолту.
Скорее взять то ее можно хоть откуда, только сохранит он картинку для элемента инфоблока в локальной файловой системе по своим правилам, а в базе данных для DETAIL_PICTURE запишет путь к этой картинке относительно корня сайта.
Небольшое дополнение к теме.
Есть возможность хранить картинки для всего сайта или для отдельных модулей, например для модуля инфоблоков, на удаленном сервере, когда используются Облачные хранилища (стандартный функционал Битрикс, кроме Первого сайта). В админке и в публичной части, ссылки будут на облачное хранилище. В таблице b_file видимых изменений нет при этом, т.е. также прописывается относительный путь внутри upload. А картинки отдаются с облака. На облаке "зеркалится" папка upload c подкаталогами.
Подключил в качестве эксперимента Selectel как облачное хранилище, перенес 4 гига картинок туда, стоимость хранения, по сравнению с Таймвебом просто смешная.
Ну и не совсем понятно, как влияет на СЕО, когда сайт работает по https, а картинки с товарами отдаются с другого домена и по http.