|
|
|
| здравствуйте,
подскажите как быть
есть exel с товаром 20 000 позиций
это все сохраняем как csv и грузим в БД
а как быть с изображениями?
учитывая что 1 позиция может иметь множество изображений
и картинки записываются в отдельную таблицу. | |
|
|
|
|
|
|
|
для: moonfox
(30.05.2014 в 14:37)
| | Ну наверное не картинки в таблицу, а их имена. Решений может быть несколько, а какие, это зависит от того как хранятся изображения и их соответствий записям. | |
|
|
|
|
|
|
|
для: confirm
(31.05.2014 в 06:32)
| | таблица для картинок это таблица в БД
есть таблица товар и есть таблица картинки
связь картинок по id товара
проблема в том, что пока не вставлен товар нет идентификатора связи с картинками
а так же картинки должны оказаться на сервере и быть обработаны, превьюшки там....
то есть походу без заливки напрямую через фтп не обойтись + при первом обращении к необработанному фото - ресайзить его и выводить....
алгоритм загрузки есть типа "рациональный" какой то?
или самому придумывать?))) | |
|
|
|
|
|
|
|
для: moonfox
(31.05.2014 в 08:41)
| | Еще раз - таблица содержит имена у вас, а не таблица картинок, в смысле BLOB.
Связь по id, это понятно, но хранить то можно и без упоминания в базе, а просто именовать изображения как id_номер, и все. Если это по каким либо причинам не приемлемо, то имя в базе. Но имена не могут повторяться, да если еще изображений много, то сваливать их все в одну кучу, это и накладно будет в дальнейшем, и есть риск повторения имен.
То есть, возможно нужен не только id записи, но и идентификатор каталога, куда будут помещены изображения.
Ну а идентификаторы записей при загрузке данных можно хранить в таблице изображений, вы же туда заносите имена. Внесли запись, получили ее id, внесли имена изображений этой записи и принадлежащему им id таблицу. Как непосредственно сделать, это смотря какая структура CSV.
Что касается FTP, ну тут смотря для кого это все, если "из под браузера", это не обязательное условие, то можно обойтись и без FTP. | |
|
|
|
|
|
|
|
для: confirm
(31.05.2014 в 09:17)
| | так для меня таблица картинок это оно самое
зачем там блоб по определению....
из под браузера не выйдет - там по 40-50 тыс изображений к разоой заливке | |
|
|
|
|
|
|
|
для: moonfox
(31.05.2014 в 20:20)
| | Я написал не "из под браузера", а если это не обязательное условие. Другими словами, можно написать не веб-страницу, а приложение, отдали ему на вход файл, если пути в нем не прописаны, то указать, иначе сам по путям грузит и изображения, и данные. Серверу только принять и разместить.
Blob не нужен, это к тому, что чего у вас там на самом деле из "так для меня таблица картинок это оно самое" определить не возможно. | |
|
|
|
|
|
|
|
для: confirm
(31.05.2014 в 20:37)
| | :D | |
|
|
|
|
|
|
|
для: moonfox
(31.05.2014 в 20:46)
| | Что юморно? С сервером может общаться не только браузер, так что, если эта загрузка чья-то помесячная обязанность, то лучше это выполнить вне рамок интернет страницы. | |
|
|
|
|
|
|
|
для: confirm
(31.05.2014 в 22:17)
| | я вот просто интересуюсь
а в готовых движах типа во всяких надстройках на джумлу там... wp, даталайф и прочей ...
как они реализовали сие, али там тупо загрузка по 1 позиции? | |
|
|
|
|
|
|
|
для: moonfox
(31.05.2014 в 22:25)
| | Через интерфейс html-страницы вы можете выбрать для загрузки только посредством поля file, и не обязательно по одному, в рамках HTML5 это поле может загружать и несколько файлов, ограничение будет со стороны сервера.
Вне рамок html-страницы, ограничений с файловой системой клиента не будет, и можно это дело автоматизировать. | |
|
|
|
|
|
|
|
для: confirm
(31.05.2014 в 22:31)
| | это я понял то
вы хотите сказать что multiple работает только в html5?
это не проблема грузить через http кучу файлов
проблема в количестве обращений
за один проход 40 тыщ не уейдет через форму
а вот ежели через софтину какую по фтп, так просто закинул все и гуляй | |
|
|
|
|
|
|
|
для: moonfox
(31.05.2014 в 22:58)
| | Да, только в HTML5.
Дело не в том как закинуть, а как обработать это. Вам в любом случае надо привязать изображения к ID, которые еще только будут получены, так что "закинуть" 40000 сразу, это не означает, что все сразу и будет готово.
У вас есть скрипт, который выполняется на клиенте. Есть список в котором указаны данные и пути к файлам. Скрипт отправляет на сервер изображения порциями, для каждой их записи, получает отчет сервера об операциях, и так далее.
Завалить на сервер 40000, а потом с этим со всем разбираться, это тоже время. | |
|
|
|
|
|
|
|
для: confirm
(31.05.2014 в 23:06)
| | ну я представляю это так
клиент хранит данные в екселе
есть поле "порядковый номер" - folder_id оно обязательно
с таким же именем как порядковый номер у клиента по папкам лежат картинки относящиеся к той или иной позиции в списке екселя.
парсим csv в БД
затем заливаем все изображения через фтп на сервак в определенную папку
итого путь мы знаем - uploads/{folder_id}
сейчас картинки залиты "как есть"
но у ресайзенных картинок есть определенные имена, например суффикс
big_
small_
etc.
у товара есть поле в ДБ check по умолчанию = 0 и поле folder_id
далее админ запускает файл resize.php
в файле нечто такое:
- получить массив id_folder всех товаров с check = 0 - поместить в сессию
- пройти по массиву по каждой папке uploads/{folder_id} - resize.php?folder=1
- выбрать массив имен файлов в имени которых нет суффикса в текущей папке
- перейти по resize.php?folder=1&file_name={name[$i]} создать превьюшки и удалить исходник
выполнять location resize.php?folder=1&file_name={name[$i]} по массиву до его окончания
- вернуться в session['folder_array']
- перейти к следующей папке location resize.php?folder=2
|
при возникновении ошибки выдать имя файла и папку.
ограничения на файлы соблюдает пользователь, то есть файлы входные не должны быть, скажем более 1000 пикселей по ширине.
извините если гоню.... это первое что пришло в голову | |
|
|
|
|
|
|
|
для: moonfox
(01.06.2014 в 00:02)
| | Если хранить по папкам номерным как на клиенте, то не дай бог это номер будет использован вновь клиентом, это раз.
Если бы передо мной стояла задача создания административного раздела с такой загрузкой, то уж точно бы ни зач то не стал такого делать. Даже по простому, можно задействовать тот же HTML, но вырваться из рамок html-страницы, и все операции в реальном режиме времени, без всякого "десантирования отдельного контингента", а только потом боевые действия. | |
|
|
|
|
|
|
|
для: confirm
(01.06.2014 в 00:08)
| | насчет задействования папки вновь это тоже решаемо
а насчет вашего алгоритма не понял)
не хочется чтоб юзер после парсинга данных csv
еще и порциями что-то куда заливал.
а хочется так чтоб запустил.... и готово)))))))) ну максимально автоматизировать.
спасибо за дискуссию | |
|
|
|
|
|
|
|
для: moonfox
(01.06.2014 в 00:14)
| | Решаемо, это значит создать трудности, а потом бороться с ними.
Я об алгоритме ничего не говорил, хотя говорил, ранее, чтобы как раз не создавать трудности.
У хозяина сервиса, конечно будет доступ по FTP, а вот чтобы у каких-то юзеров... Причем грузить часть по HTTP, а другую часть по FTP, потом что-то запускать, разбираться с мусором, это не есть автоматизация.
Например, в ручном режиме добавления товара какие есть условия - наличие изображений товара, это обязательное условие или нет? Если это обязательное условие, то надо ли производить добавление характеристик товара в базу, если при загрузке изображений произошла ошибка, и они не загружены? Вот каков смысл в "загрузка части".
Для того чтобы управлять интернет-магазином или некой витриной, совсем не обязательно нужен веб интерфейс. Гораздо большие возможности будут у клиентского ПО, от сервера же нужны только данные. Вот в этом случае и можно говорить о полной автоматизации - нажали копку Загрузка, и все, без всяких FTP, а только реакция сервера и действия оператора на нее.
Кроме этого, если речь идет о синхронизации данных клиента и сервера, то копить десятки тысяч, чтобы потом добавлять это кучей на сервер, это ни к чему, так как на клиенте можно будет реагировать на события, и по событиям производить добавления/обновления сервера. | |
|
|
|
|
|
|
|
для: moonfox
(30.05.2014 в 14:37)
| | Ну, насколько я понял проблему, имеем файлы изображений, проименованных в определенном порядке, находящихся в определенной директории и имеющие определенное расширение, так?
К примеру, 20 000 файлов .jpg в директории /thumbs (превьюшки).
Кидаем всю эту директорию через ftp на сервер (к примеру в img/commodity/thumbs/).
И достаем из рукава функцию glob(): http://www.php.su/glob%28%29
<?php
$i=1;
foreach (glob("img/commodity/thumbs/*.jpg") as $filename) {
// UPDATE `tovar` SET `thumb_path`='img/commodity/thumbs/'.$filename WHERE `id` = $i;
$i++;
}
// где "`tovar" - таблица товаров; "thumb_path" - столбец путей к превьюшкам.
?>
|
Аналогично и для полноразмерных изображений.
Массовое переименование файлов выполняют все современные вьюверы изображений. Я пользуюсь IrfanView - в нем лучшая, на мой взгляд, реализация batch-функции. Но это уже дело вкуса. | |
|
|
|
|
|
|
|
для: Deed
(31.05.2014 в 21:34)
| | спс | |
|
|
|