Перейти к содержанию
smarteg

[Доработка] Загрузка изображений (админка)

Рекомендуемые сообщения

Доброго времени суток, уважаемые!

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

В моем понимании (по крайней мере на своих проектах, которые делал с нуля) загрузка изображений ДОЛЖНА быть такой (алгоритм):

1) сервер принимает изображение складирует его во временную папку с временным именем (как обычно вобщем-то)

2) всякие валидации (размер, тип ... что-то еще)

3) генерация рандома, переименование загруженного изображения, перемещение его в папку назначения под новым именем (т.е. _рандом_.jpg или _рандом_юзер.jpg чтоб наверняка)

4) запись в базу id (автоинкремент), старое имя, новое имя ... чего-то еще по вкусу

Итог: при такой организации файловой загрузки отсутствует необходимость прямой работы с файловой системы, все можно делать через скуль, 99,9% вероятность что нужный файл который у пользователя назывался 11.jpg и был загружен пол года назад не будет случайно перезаписан новым файлом 11.jpg который он загрузил из соседней папки, можно по крону чистить "старые картинки" и еще кучу всего делать что делать не удобно при прямой работе с файловой системой.

Однако в опенкарте как я понял все сделано с точностью до наоборот. После импорта я получил жостко вешающийся файловый менеджер на ~5000 изображений в папке с картинками, 3 действия вместо одного когда мне нужно для товара добавить изображение ... ну думаю дальше продолжать не имеет смысла. Всё все поняли о чем я.

Не, прошу не подумайте что я начал ныть о том как все плохо, ни в коем случае, я выбрал опенкарт именно по тому что там в глобальном смысле все более-менее хорошо, но вот это узкое место меня откровенно поставило в тупик. Я полностью разделяю мнение you need it -- you write it, но все же хочу обратиться к тем, у кого стояла аналогичная проблема, вкратце формулируемая так: невозможно работать с картинками на большой базе. Как вы с этим боролись?

Конечно поставить костыли вроде создать кучу папок с именами как id у категорий, а дальше написать скрипты которые поперекидают картинки туда согласно купленным билетам базы данных и я получу на выходе не более 500 картинок в одной папке -- это не особо большая проблема, оно все пишется на пхп максимум за 40 минут, но все же хотелось бы решить проблему на корню. Впрочем изобретать велосипед тоже не хочется.

Кто что может сказать по этому поводу?

  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть такой косяк, если кто хорошо разбирается в OpenCart и готов исправить это - могу выступить в роли спонсора.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, полностью поддерживаю... вообще прямо не удобно! всё очень нравиться, кроме загрузки изображений... когда много товара - вешаешься просто... Может кто перепишет скрипт загрузки картинки-превью, и фотографии товара?

Буду очень благодарен! Сам не силён в джаве

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

когда много картинок их можно грузить через FTP(предварительно раскидав по папкам) - в этом и прелесть отсутствия связки с базой данных.

5000 картинок в одной папке?! да тут не только файловая система тормозить будет, тут сам админ тормозить начнет, пытаясь выбрать нужную картинку.

палка о 2х концах: много картинок в 1 папке - с БД конечно выгоднее, мало картинок - с БД это лишние запросы и пресекается возможность закачивать через FTP.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

когда много картинок их можно грузить через FTP(предварительно раскидав по папкам) - в этом и прелесть отсутствия связки с базой данных.

5000 картинок в одной папке?! да тут не только файловая система тормозить будет, тут сам админ тормозить начнет, пытаясь выбрать нужную картинку.

+

...палка о 2х концах: много картинок в 1 папке - с БД конечно выгоднее, мало картинок - с БД это лишние запросы и пресекается возможность закачивать через FTP.

поиск файла в файловой системе (по имени файла, дате или еще чему / можно постраничный вывод какой-то вставить) и "прикрепление" его к товару.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

когда много картинок их можно грузить через FTP(предварительно раскидав по папкам) - в этом и прелесть отсутствия связки с базой данных.

5000 картинок в одной папке?! да тут не только файловая система тормозить будет, тут сам админ тормозить начнет, пытаясь выбрать нужную картинку.

палка о 2х концах: много картинок в 1 папке - с БД конечно выгоднее, мало картинок - с БД это лишние запросы и пресекается возможность закачивать через FTP.

У меня именно так и сделано - куча папок по категориям. а толку? файловый менеджер их просто не отображает. Отображал до какого-то момента, а потом перестал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

палка о 2х концах: много картинок в 1 папке - с БД конечно выгоднее, мало картинок - с БД это лишние запросы и пресекается возможность закачивать через FTP.

Да никакой тут нету палки о 2-х концах. Я летом делал сайт для фотостудии, суть сайта в том чтобы пользователь мог загрузить фотографии и оформить заказ на печать, там требования были в разы жостче чем тут, так вот что я вам скажу:

1) Лишний запрос к скулю - это фигня (конечно если это не SELECT * FROM _таблица_где_много_записей_ мускуль очень быстр даже если не особо вдаваться в процессы оптимизации БД. Тут даже не надо быть КЭП`ом. Но зато решается проблема поиска фоток "Моя мусечка.jpg" потому что FreeBSD будет такими керпичами складывать, что даже апачу достанется. А тут переименовал, записал в базу старое и новое имя и не паришся.

2) ФТП уже лет 10 как пора закапывать. Опять-же возвращаясь к сданному летом сайту, там я сделал мультизагрузку фоток без всякого ФТП, через jquery плагин. Конечно на моем компэ это вешалось, но я тогда работал на 1400-м целерончике (ноуте) с видяхой радеон R200 и убунтой 9.04 на борту. На более шустром железе оно нормально работало (ибо часть плагина - флэш). Причем тут фтп? А при том что толку от него в техпроцессах кроме сделать бэкап вообще никакого. Если лишить возможности заливать фотки по фтп лично я бы не растроился.

3) Мне лично наплевать на трудности веб-мастеров, которые не в состоянии написать простенький скрипт, который сможет пропарсить вывод файловой системы и из-за этого начинают ныть о том как все плохо. Назвался груздем как говорится ... Для того чтобы импортировать базу в 5000 товаров с картинками я воспользовался модулем, НО картинки из папки где 25000 фоток в перемешку руками разбирать не стал и копировать полностью тоже, ведь мне нужно было скопировать около 5000 всего-то (в старом движке ресайз делался туда-же где и все остальное, плюс халатные предщественники не особо парились уборкой мусора), для этого был за полчаса написан скрипт, который сделал выборку по базе старого магазина, а дальше в цикле скопировал из одной папки в другую эти 5000 фоток. Все просто. Руками ЭТО разбирать, особенно когда тебя взяли на разовую работу - сами понимаете ...

4) А если по хорошему, можно обойтись и без таблицы в БД путем нехитрого действия: переименовать файл по шаблону img-_ид_продукта_-рандом.jpg. Рандом только с одной целью - чтобы когда несколько фоток на один продукт и пересекаются имена - избежать перезаписи. Просто рандом сгенерить быстрее чем обратится к файловой системе/базе или еще чему-то. На базе > 1000 товаров уже реально будет пофик как картинка называется, её проще перезалить чем искать по названию.

P.S. а костыль свой я все таки написал потому что нужно работать) Крепитесь, люди, днями чуть по свободней буду - выложу)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

эх, так хочется с Вами поспорить, да не буду разводить холиварчег)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну давайте поспорим в привате, я буду только за выслушать в чем я ошибаюсь, честно )

жду )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И так товарищи! Налетаем@разбираем) альтернативная загрузка изображений!

В 2-х словах как работает: грузит файл, переименовывает по шаблону, ложит в каталог с именем cat_номер, где номер - id категории. Если категории нет - создает. Если основного изображения нет - прописывает первое загруженное основным, если есть - дописывает в раздел "фото".

Интеграции "изкаропке" НЕТ. Тоесть скопировав скрипты у Вас не появится кнопка "загрузить изображение как надо". Потому что я считаю что не моего ума дело вставлять это дело в шаблон админки, пусть это каждый вставит туда, куда ему удобнее, по сути нужно вставить ссылку вида:

_http://_ваш_домен_/admin/index.php?route=tool/imgupload&token=_какой-то_длинный_токен_&category_id=ИД-категории&product_id=ИД-продукта
в ридми все же есть пример того, что и как можно добавить в контроллер и вьювер.

Сразу предупреждаю, "я его слепила из того что было (с)" буквально за день не задумываясь особо о красоте кода и стиле программирования. Если оно будет востребовано - обещаю навести марафет и сделать поддержку локализации (сейчас все тупо прописано во вьювере), а так же может найдется какое-то удобное и универсальное красивое решение интегрировать в админку)

Жду замечаний и предложений)

Пользуйтесь ;)

P.S. у меня есть дурная привычка писать скрипты прямо на боевых серверах, поэтому если я что-то забыл положить в архив или будет ругаться - пишите все сюда, разберемся.

P.P.S. работает и тестировалось на версии 1.4.9.3

simple_img_upload.zip

Изменено пользователем afwollis
  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть такой косяк, если кто хорошо разбирается в OpenCart и готов исправить это - могу выступить в роли спонсора.

Я привык за слова отвечать, поэтому скиньте в личку куда и сколько перечислить.

Если оно будет востребовано - обещаю навести марафет и сделать поддержку локализации (сейчас все тупо прописано во вьювере), а так же может найдется какое-то удобное и универсальное красивое решение интегрировать в админку)Жду замечаний и предложений)Пользуйтесь ;)

Это хорошо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Установил загрузку изображений из архива simple_img_upload.zip. Потестировал и заметил, что загрузка работает для уже существующих товаров, то есть когда заходишь в редактирование товара, ссылка формируется такая: <a href="http://[website]/admin/index.php?route=tool/imgupload&token=65f59a8665601a74c0c45c3ad933b654&category_id=35&product_id=70">Download</a>

Когда я создаю новый товар, то эта же ссылка принимает вот такой "испорченный" вид (в исходном тексте страницы):

<a href="<b>Notice</b>: Undefined variable: cat_id in <b>/var/www/vhosts/[website]/httpdocs/admin/view/template/catalog/product_form.tpl</b> on line <b>166</b><b>Notice</b>: Undefined variable: imguploadtool_pr_id in <b>/var/www/vhosts/[website]/httpdocs/admin/view/template/catalog/product_form.tpl</b> on line <b>166</b>http://[website]/admin/index.php?route=tool/imgupload&token=65f59a8665601a74c0c45c3ad933b654&category_id=&product_id=">Download</a>

В шаблоне ссылка выглядит так: <a href="<?php echo $imguploadtool.'&category_id='.$cat_id['0'].'&product_id='.$imguploadtool_pr_id; ?>">Download</a>

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

В меню Система-Журнал ошибок обнаружил те же ошибки (PHP Notice: Undefined variable: cat_id и imguploadtool_pr_id)

Версия OpenCart v1.4.9.3

А вообще, ваш вариант загрузки гораздо приятнее, чем стандартный :) В целом мне OpenCart понравился, но от стандартного Менеджера изображений я пришел в ужас и захотелось убить автора ап стену :angry:

ЗЫ: Из пожеланий хотелось бы, чтобы фотографии загружались не отходя от кассы, то есть без перехода на отдельную страничку и сразу же после загрузки отображались чуть выше кнопки Загрузить... Примерно так же, как реализовано здесь, на этом форуме при написании сообщений

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день. Установил эту загрузку. Но видимо что-то не так сделал. Я новичок в этом деле. При выборе картинки и нажатии кнопки загрузить выскакивает ошибка:

Error: Table 'ocStore.oc_' doesn't exist

Error No: 1146

SELECT image FROM oc_ product WHERE product_id = '51'

Я понимаю, что нет таблицы. Где я допустил ошибку?

У меня стоит ocStore V 0.1.7

P.S. Директория с именем категории создается, файлы в нее загружаются, но не прикрепляются к товару.

Разобрался! Спасибо за загрузку.

В файле admin/model/tool/imgupload.php лишний пробел в 5-ой строке перед product.

$query = $this->db->query("SELECT image FROM " . DB_PREFIX . " product WHERE product_id = '" . (int)$data['product_id'] . "'");

Убрал и все заработало. Еще раз спасибо.

Изменено пользователем SAlex

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помогите, пожалуйста, не знаю на что грешить. В общем ситуация такая: ставлю ocStore 0.1.7, ставлю модуль opencart-1-4-9-18-export-import. Пробую экспорт - все отлично, все товары выгружаются. Ставлю эту загрузку, удаляю демо-товары, добавляю свой товар (один). Экспорт работает. Добавляю еще несколько, и в файле экспорта только первый товар заполнен полностью, а у остальных нет ни названий ни описаний, только id, цена и еще несколько полей. У первого товара в файле в поле дополнительных картинок пишет какую-то абракадабру вместо путей к фалам картинок. Пробовал устанавливать дважды - первый раз были натуральные иероглифы, а во второй раз - ?o?r?d?e?r?-?c?o?l?o?r?:? ?i?n?i?t?i?a?l?;? ?f?o?n?t?-?s?i?z?e?:? ?1?2?p?x?;? ?m?a?r?g?i?n?-?t?o?

Что у меня не так?

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

ТОЧНО! Это из-за изменений в структуре базы.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно сделать альтернативный менеджер изображений, чтобы просматривать уже загруженные изображения в папку /домен/www/image/data (и под папки), выбирать изображения для использования, удалять и т.д.?

Когда я создаю новый товар, то эта же ссылка принимает вот такой "испорченный" вид (в исходном тексте страницы):

<a href="<b>Notice</b>: Undefined variable: cat_id in <b>/var/www/vhosts/[website]/httpdocs/admin/view/template/catalog/product_form.tpl</b> on line <b>166</b><b>Notice</b>: Undefined variable: imguploadtool_pr_id in <b>/var/www/vhosts/[website]/httpdocs/admin/view/template/catalog/product_form.tpl</b> on line <b>166</b>http://[website]/admin/index.php?route=tool/imgupload&token=65f59a8665601a74c0c45c3ad933b654&category_id=&product_id=">Download</a>

Выдаёт такую же ошибку, даже если редактирую существующий товар. Как поправить? Изменено пользователем afwollis
есть кнопка "изменить". объединил сообщения

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если оно будет востребовано - обещаю навести марафет и сделать поддержку локализации (сейчас все тупо прописано во вьювере), а так же может найдется какое-то удобное и универсальное красивое решение интегрировать в админку)

оно востребовано, окажите поддержку своим пользователям :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прошу прощения что долго не отвечал, вечером вдумчиво прочитаю и всем отвечу, был очень занят )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем что я хочу сказать, да действительно эта загрузка работает ТОЛЬКО для уже существующих в базе товаров. Дело все в том, что она не столько удобный интерфейс, сколько логичный вариант администрирования файлов и файловой структуры. И при работе этого, ну пе поворачивается у меня язык назвать его модулем, костыля краеугольный камень это УЖЕ существующие ID продукта и ID категории. Моя цель была разгрузить вешающийся менеджер изображений -- это раз, внедрить логичную структуру, которую в случае чего было бы удобно парсить напрямую скриптами -- это два, и просто чтобы в случае чего можно было руками разобраться -- это три. По этому на данном этапе это то что я могу предложить.

Конечно можно сделать загрузку к еще не добавленным товарам, но тогда придется лезть в код самого движка и лихо в него врезаться. Я этого делать не хочу потому что потом придется поддерживать последующие версии, писать патчи и т.д. чем создам дополнительные трудности всем, поэтому прошу понять меня правильно причину по которой лучше пусть оно работает так. Вы при обновлении потом когда слетит проклянете все и вся ;) а так нужно всего-то пару вьювов поправить. Кстати именно по этой причине я НЕ ДАЛ исправленные файлы, а лишь привел описание как можно вклиниться в движок.

Что дальше? Я лично глубоко убежден что магазину не хватает мастера добавления товара, состоящего из 2-3 шагов. Я думаю что у меня будет время им заняться и я его сделаю, и вот там уже можно будет реализовать то что нельзя сделать сейчас. Но ничего обещать сейчас не буду. Просто скажу что есть желание сделать его таким образом чтобы по времени добавление занимало столько-же, а по степени человекопонятности внедренцу не пришлось бы долго объяснять куда прописывать мета теги, а куда синонимы. Это замечательно что есть страничка где можно отредактировать все что угодно, но должна быть и кнопка "сделай это за меня по шаблону, а я если что подправлю".

В любом случае благодарю вас за использование)

Мне очень радостно что смог внести свои 5 копеек на пользу общества, а то первые 2 недели когда было < 10 загрузок я едва не впал в чОрнуд депрессию :unsure:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет всем!

С начала я добавил картинки товара с разрешением 800 на 600.Но сайт притормаживал (и очень долго открывалось увеличенное изображение) и я решил изменить разрешение на 500 на 500.И через фтп перезалил картинки в папку image/data - Притормаживания остались.Ещё я удалил всё из папки image/cache/data - и она так и остаётся пустой.

В чём проблема?

Как мне избавиться от притормаживаний?

Спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

очистил кэш-картинки вроде быстро открываются но сайт тормозит всё равно ,ставлю шаблон default вместо sport-всё летает

ставлю

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Загрузка изображений тут точно не причем.

ставлю шаблон default вместо sport-всё летает

Ну типа вы ответили на свой вопрос) Если по другому -- разбирайтесь что именно тормозит в вашем случае в шаблоне и будет вам счастье.

P.S. а тема вообще-то про альтернативный загрузчик, а не о проблемах притормаживания сайта от изображений 800x600 если что.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Создал свой первый магазин. Начал добавлять товары ... легче повеситься :) больше всего занимает время загрузки изображений. Возможно ли как-то подправить так чтобы дополнительные изображения загружать скажем выделив 3 шт. одним кликом добавить? Я создал в папке Images подпапку Goods, а в ней подпапки по категориям (Тупо но легко разобраться при добавлении\редактировании, в отличии от того еслибы все было свалено в одну папку) и каждый раз в проводнике залазить в нужную подпапку чтобы добавить изображение ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На днях задался такой же целью, и уже было думал начинать писать, и случайно решил поискать по форуму ))

Ну во первых большое спасибо Smarteg, за твой вклад, а во вторых хотелось бы узнать не шлифовал ли ты свой фич? или может написал мастер добавления товара?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну во первых большое спасибо Smarteg, за твой вклад, а во вторых хотелось бы узнать не шлифовал ли ты свой фич? или может написал мастер добавления товара?

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

Оффтопик!

А что касается мастера - я написал быстрое редактирование всяких там названий, мета тегов и т.д. на легковесном аяксике, чтобы сократить количетсво переходов, когда нужно много товара отредактировать или включать-выключать и т.д. К теме конечно не относится, но если кому надо - пишите я периодически сюда захожу, может так выложу, как модуль, может за небольшую плату. Дело все в том, что там надо чуть чуть дописать его чтобы в нескольких местах не в скрипте проставлять переменные, а брать из настроек, тобишь из базы. Вобщем я знаю что оно нужно, но не понимаю насколько, только бодрящие напоминания могут заставить меня допилить ^__^ поэтому и обращаюсь, стучитесь и вам откроют (с)

Ну а мастер если раньше меня никто не сделает, то сделаю как только возьму на 1.5.x проектик. Тот что веду на треть переписан, поэтому апгрейдить до 1.5 и снова перtписывать -- нереал.

Конец оффтопика!

P.S. А на 1.5.x работает модуль? Кто нибуть ставил? Есть замечания?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем привет!

Есть небольшая доработка: можно грабить корованы грузить фотки по несколько штук за раз.

Качаем@тестируем; замечания высказываем.

"Баги" которые обсуждались выше я не фиксил, т.е. оно как раньше работало по такой же схеме, так и сейчас ничего не поменялось принципиально.

Желающие сказать спасибо чуть громче остальных - Яндекс.Деньги 41001275236952 )))

UPDATE: для тех кто будет обновляться - достаточно просто перезаписать файлы из архива, а точнее контроллер, и отображение.

simple_img_upload_mu.zip

Изменено пользователем smarteg
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.