cmssmarty Опубликовано 28 февраля, 2018 Жалоба Поделиться Опубликовано 28 февраля, 2018 Здравствуйте.Скажите пожалуйста, может кто-то сталкивался с вопросом. На сайт загружаются товары через импорт csv, фото грузятся по ссылкам с сайта-поставщика. Как правильно прописать функцию в simpla/ajax/import.php чтобы каждое загружаемое фото при выполнении импорта сразу автоматически рессайзилось под заданные размеры, а не тогда, когда человек просматривает сайт? Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 28 февраля, 2018 Жалоба Поделиться Опубликовано 28 февраля, 2018 (изменено) Если все изображения находятся удалённо, то для начала их нужно загрузить (см. функцию download_image в api/Image.php), после нужно выполнить ресайз (см. api/Design.php функция resize()) для каждого изображения в каждом разрешении. Это так теория, на практике всё куда сложнее. Изменено 28 февраля, 2018 пользователем Noxter Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 28 февраля, 2018 Жалоба Поделиться Опубликовано 28 февраля, 2018 фото грузятся по ссылкам с сайта-поставщика. скажу больше, фото загружается тоже не сразу по ссылке. а при первом обращении к ресайзу на сайте. надо переделывать загрузку и все остальное. подумайте нужно ли оно вам? и в чем смысл. если товаров грузиться пару тысяч будет нагрузка на сайт т.к. все будет ресайзиться сразу. для того чтобы небыло нагрузки и сделано так чтобы картинки резались только когда они нужны а не все вместе. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 28 февраля, 2018 Жалоба Поделиться Опубликовано 28 февраля, 2018 скажу больше, фото загружается тоже не сразу по ссылке. а при первом обращении к ресайзу на сайте. надо переделывать загрузку и все остальное. подумайте нужно ли оно вам? и в чем смысл. если товаров грузиться пару тысяч будет нагрузка на сайт т.к. все будет ресайзиться сразу. для того чтобы небыло нагрузки и сделано так чтобы картинки резались только когда они нужны а не все вместе.Ведь грузится по 10 штук (товаров) за раз а не по 1к, я думаю правильнее сделать загрузку и ресайз сразу, об этом писал 3 недели назад Пикусову, сказал что подумает над этим. Цитата Ссылка на сообщение Поделиться на другие сайты
cmssmarty Опубликовано 28 февраля, 2018 Автор Жалоба Поделиться Опубликовано 28 февраля, 2018 (изменено) Ведь грузится по 10 штук (товаров) за раз а не по 1к, я думаю правильнее сделать загрузку и ресайз сразу Поддерживаю. На сколько я понимаю, фото грузится сразу в папку originals, а не при рессайзе. А уже при просмотре, рессайзы создаются в папке products Изменено 28 февраля, 2018 пользователем cmssmarty Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 28 февраля, 2018 Жалоба Поделиться Опубликовано 28 февраля, 2018 Поддерживаю. На сколько я понимаю, фото грузится сразу в папку originals, а не при рессайзе.Если фото удалённое то нет, в таблице s_images хранится полный путь на удалённый источник, а уже при просмотре товара выполняется ресайз, вслед за ресайзом функция download_image которая копирует оригинал в папку originals, а уже после обновления странциы выполняется ресайз от оригинала. Как по мне это вообще как-то топорно, куда проще было бы сразу загрузить картинку а после выполнить ресайз и вернуть обрезанную картинку. Цитата Ссылка на сообщение Поделиться на другие сайты
cmssmarty Опубликовано 28 февраля, 2018 Автор Жалоба Поделиться Опубликовано 28 февраля, 2018 Если фото удалённое то нет, в таблице s_images хранится полный путь на удалённый источник, а уже при просмотре товара выполняется ресайз, вслед за ресайзом функция download_image которая копирует оригинал в папку originals, а уже после обновления странциы выполняется ресайз от оригинала.Как по мне это вообще как-то топорно, куда проще было бы сразу загрузить картинку а после выполнить ресайз и вернуть обрезанную картинку. Может можно вставить как раз функции download_image и resize (несколько функций resize, которые используются на сайте) в ajax/import.php // Изображения товаров if(isset($item['images'])) { // Изображений может быть несколько, через запятую $images = explode(',', $item['images']); foreach($images as $image) { $image = trim($image); if(!empty($image)) { // Имя файла $image_filename = pathinfo($image, PATHINFO_BASENAME); // Добавляем изображение только если такого еще нет в этом товаре $this->db->query('SELECT filename FROM __images WHERE product_id=? AND (filename=? OR filename=?) LIMIT 1', $product_id, $image_filename, $image); if(!$this->db->result('filename')) { $this->products->add_image($product_id, $image); } } } } Сейчас буду ломать голову над этим, отпишусь о результате в случае решения Цитата Ссылка на сообщение Поделиться на другие сайты
a13x Опубликовано 28 февраля, 2018 Жалоба Поделиться Опубликовано 28 февраля, 2018 Может можно вставить как раз функции download_image и resize (несколько функций resize, которые используются на сайте) в ajax/import.php Конечно можно, и причём делается это совсем не сложно. Цитата Ссылка на сообщение Поделиться на другие сайты
cmssmarty Опубликовано 1 марта, 2018 Автор Жалоба Поделиться Опубликовано 1 марта, 2018 Может можно вставить как раз функции download_image и resize (несколько функций resize, которые используются на сайте) в ajax/import.php Конечно можно, и причём делается это совсем не сложно. Если загрузку на сервер сделать очень просто, тупо добавив строчку $this->image->download_image($image); После // Добавляем изображение только если такого еще нет в этом товаре $this->db->query('SELECT filename FROM __images WHERE product_id=? AND (filename=? OR filename=?) LIMIT 1', $product_id, $image_filename, $image); if(!$this->db->result('filename')) { $this->products->add_image($product_id, $image); } в ajax/import.php, то с рессайзом я уже действительно запутался, множество методов перепробовал - никак не выходит реализовать запрос на рессайз с заданными параметрами в api/image Цитата Ссылка на сообщение Поделиться на другие сайты
cmssmarty Опубликовано 1 марта, 2018 Автор Жалоба Поделиться Опубликовано 1 марта, 2018 $this->design->resize_modifier($image_filename,200,200,w); результата не дает Цитата Ссылка на сообщение Поделиться на другие сайты
Karabaska Опубликовано 1 марта, 2018 Жалоба Поделиться Опубликовано 1 марта, 2018 (изменено) Скорее всего, надо что-то вида $this->image->resize($this->design->resize_modifier($image_filename,200,200,w)); И в базе к этому моменту запись должна уже быть... Изменено 1 марта, 2018 пользователем Karabaska Цитата Ссылка на сообщение Поделиться на другие сайты
cmssmarty Опубликовано 1 марта, 2018 Автор Жалоба Поделиться Опубликовано 1 марта, 2018 Скорее всего, надо что-то вида$this->image->resize($this->design->resize_modifier($image_filename,200,200,w));И в базе к этому моменту запись должна уже быть... Нет, рессайз не создается в папке files/products..,. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 1 марта, 2018 Жалоба Поделиться Опубликовано 1 марта, 2018 (изменено) Нет, рессайз не создается в папке files/products..,.Вам нужно выполнить: print $this->design->resize_modifier($image_filename, 200, 200);Вариант выше работать не будет. Изменено 1 марта, 2018 пользователем Noxter Цитата Ссылка на сообщение Поделиться на другие сайты
Karabaska Опубликовано 1 марта, 2018 Жалоба Поделиться Опубликовано 1 марта, 2018 Вам нужно выполнить: $this->design->resize_modifier($image_filename, 200, 200); Вариант выше работать не будет.И что, неужели это будет работать?Указанную строку куда ни вставляй, результата не будет НИКАКОГО. Ибо вызываемая в этой строке функция просто формирует текстовую строку, после чего возвращает результат в НИКУДА. Результат просто теряется и выходит бесполезная работа... А вот вариант выше у меня работает (при небольших изменениях). Если, конечно, его вставить в нужное место... Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 1 марта, 2018 Жалоба Поделиться Опубликовано 1 марта, 2018 И что, неужели это будет работать?Указанную строку куда ни вставляй, результата не будет НИКАКОГО. Ибо вызываемая в этой строке функция просто формирует текстовую строку, после чего возвращает результат в НИКУДА. Результат просто теряется и выходит бесполезная работа... А вот вариант выше у меня работает (при небольших изменениях). Если, конечно, его вставить в нужное место...Много ума не нужно чтобы распечатать результат выполнения функции, так что свои выпендрёжи прояви в другом месте, возможно в кругу семьи, друзей. Цитата Ссылка на сообщение Поделиться на другие сайты
Karabaska Опубликовано 1 марта, 2018 Жалоба Поделиться Опубликовано 1 марта, 2018 Вам нужно выполнить: print $this->design->resize_modifier($image_filename, 200, 200);Вариант выше работать не будет. И что, этот новый способ будет работать?Насколько я понимаю, вставлять такое в simpla/ajax/import.php - значит сделать импорт гарантированно неработоспособным... Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 1 марта, 2018 Жалоба Поделиться Опубликовано 1 марта, 2018 И что, этот новый способ будет работать?Насколько я понимаю, вставлять такое в simpla/ajax/import.php - значит сделать импорт гарантированно неработоспособным...А я нигде не писал что и где нужно "вставлять".Оставить свои глупые умозаключения при себе. Цитата Ссылка на сообщение Поделиться на другие сайты
cmssmarty Опубликовано 3 марта, 2018 Автор Жалоба Поделиться Опубликовано 3 марта, 2018 И что, неужели это будет работать?Указанную строку куда ни вставляй, результата не будет НИКАКОГО. Ибо вызываемая в этой строке функция просто формирует текстовую строку, после чего возвращает результат в НИКУДА. Результат просто теряется и выходит бесполезная работа... А вот вариант выше у меня работает (при небольших изменениях). Если, конечно, его вставить в нужное место... Можете написать подробнее о изменениях и нужном месте? Цитата Ссылка на сообщение Поделиться на другие сайты
Karabaska Опубликовано 3 марта, 2018 Жалоба Поделиться Опубликовано 3 марта, 2018 Писать полностью хороший и работоспособный код - это некоторая работа. И имеется риск получить сразу ответ - а я вот что-то такое как-то у себя делаю по рекомендации, но не выходит.Если готовы оплачивать - обращайтесь в личку... Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 5 марта, 2018 Жалоба Поделиться Опубликовано 5 марта, 2018 Писать полностью хороший и работоспособный код - это некоторая работа. И имеется риск получить сразу ответ - а я вот что-то такое как-то у себя делаю по рекомендации, но не выходит. ++ Цитата Ссылка на сообщение Поделиться на другие сайты
cmssmarty Опубликовано 5 марта, 2018 Автор Жалоба Поделиться Опубликовано 5 марта, 2018 Писать полностью хороший и работоспособный код - это некоторая работа. И имеется риск получить сразу ответ - а я вот что-то такое как-то у себя делаю по рекомендации, но не выходит.Если готовы оплачивать - обращайтесь в личку... Ну раз так то напишите мне куда и сколько требуется оплатить за решение. Но решение прошу выложить после - тут, я думаю это не только мне одному пригодится. Цитата Ссылка на сообщение Поделиться на другие сайты
cmssmarty Опубликовано 5 марта, 2018 Автор Жалоба Поделиться Опубликовано 5 марта, 2018 (изменено) Нашел решение сам.Убрал для начала токен изображения по инструкции (это сделал для себя, не знаю играет роль в данной теме или нет). После $this->image->download_image($image); Вставил file_get_contents($this->design->resize_modifier($image_filename, 120, 120)); И все работает. Создается рессайз в папке /files/products при импорте с вышеуказанными параметрами. Karabaska, у вас какое-то может быть другое решение? Я просто не думаю что вы хотели 1 строчку кода "писать" платно. Изменено 5 марта, 2018 пользователем cmssmarty Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 5 марта, 2018 Жалоба Поделиться Опубликовано 5 марта, 2018 (изменено) Нашел решение сам.Убрал для начала токен изображения по инструкции (это сделал для себя, не знаю играет роль в данной теме или нет). После $this->image->download_image($image); Вставил file_get_contents($this->design->resize_modifier($image_filename, 120, 120)); И все работает. Создается рессайз в папке /files/products при импорте с вышеуказанными параметрами. Karabaska, у вас какое-то может быть другое решение? Я просто не думаю что вы хотели 1 строчку кода "писать" платно. достаточно загрузить изображение, нарезка произойдет по запросу. просто при импорте записывается урл, при первом обращении файл сперва скачивается потом нарезается. но если все же задача в том что бы скачать и нарезать именно в импорте тогда вы все правильно сделали Изменено 5 марта, 2018 пользователем DaVinci Цитата Ссылка на сообщение Поделиться на другие сайты
cmssmarty Опубликовано 5 марта, 2018 Автор Жалоба Поделиться Опубликовано 5 марта, 2018 достаточно загрузить изображение, нарезка произойдет по запросу. просто при импорте записывается урл, при первом обращении файл сперва скачивается потом нарезается. Тут задача стоит именно в том, чтобы изображения при импорте сразу сохранялись в /files/originals и сразу нарезались нужные рессайзы в папку /files/products , а не по запросу. Цитата Ссылка на сообщение Поделиться на другие сайты
DaVinci Опубликовано 5 марта, 2018 Жалоба Поделиться Опубликовано 5 марта, 2018 Тут задача стоит именно в том, чтобы изображения при импорте сразу сохранялись в /files/originals и сразу нарезались нужные рессайзы в папку /files/products , а не по запросу. тогда все верно Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.