Итак, есть интернет-магазин и необходимо решить задачи по управлению каталогом товаров.
Вопрос ко мне поступил в таком виде:
Техзадание
Платформа: OpenCart 1.5.1.3 и OpenCart 1.5.5.1.2
Что необходимо: Модуль для импорта категорий, товаров и их свойств с функциями обновлений.
Поддерживаемые форматы прайсов: CSV и XML
Добрый вечер.
Пишу в продолжение темы: https://velibekov.ru/blog/portfolio-proekt-dzhaga-dzhaga/#comment-129
По сайтам сейчас ситуация такая что один переделывается, а второй только создаётся (версии: OpenCart 1.5.1.3 и 1.5.5.1.2), поэтому ссылок пока нет.
Пример прайсов XML-файлов из магазинов на OpenCart (к этим магазинам я никакого отношения не имею): http://likanta.ru/index.php?route=feed/yandex_market http://kupi-kupi.net/index.php?route=feed/yandex_market
и не на OpenCart http://www.morecolor.ru/market/yandex.php
В приложении описание что конкретно ищу и для каких задач.
Если знаете готовые решения для таких задач, буду рад помощи. И вообще любой консультации.
Спасибо.
Что необходимо:
• Поля для прайсов на импорт: загрузка файла с компьютера и поле для вставки url файла xml
• Возможность выбирать какие категории импортировать, а какие нет
• Возможность выбирать какие товары импортировать, а какие нет
• Указывать какое поле в прайсе соответствует полю в магазине
• Выбирать какие именно свойства (поля) необходимо обновлять (например, обновлять только поля наличие: да/нет), игнорируя изменения в остальных полях
• При каждом обновлении помечать изменения по сравнению с предыдущим обновлением по выбранным свойствам (например, изменилась оптовая цена пометить спад или рост, изменилось состояние наличия)
• Отмечать пропавшие (удалённые) свойства (либо же полное исчезновения товара) и выставлять статус наличия товара: «нет в наличии»
• Сопоставление (привязка) имеющихся в базе магазина товаров с товарами из прайсов поставщика (если какой-либо товар уже есть на сайте, то указывать с каким товаром у поставщика его сопоставить и отслеживать. Например: на сайт добавлен товар А с полным набором свойств (его описание, ценой, фотографиями и т.д.), необходимо его сопоставить с товаров Б у поставщика (названия могу и описание могут как совпадать, так и не совпадать) и отслеживать определённые свойства. У поставщика товар Б в наличии и в магазине товар А в наличии, если у товара Б это свойство меняется, то соответственно в магазине меняется это свойства у товара А)
• При больших прайсах загружать их поэтапно, чтобы не загружать сайт при больших файлах (желательно как-то отображать процесс загрузки, чтобы определять его работу, прогресс и не повисло ли всё)
• Выбирать время обновления прайсов (раз в час, раз в сутки в определённое время) по XML ссылке и указывать путь для CSV файла (хранение на сайте)
• Отображать всевозможные ошибки
• Сообщать о успешном завершении обновлений (возможно с отправкой на почту)
Как должно работать на примере:
Интернет магазин (ИМ) имеет уже свои категории, свои товары. При появлении новых поставщиков (с новыми товарами, либо же с аналогичными) они предоставляют свои прайсы (CSV или XML), эти прайсы добавляются в ИМ и уже выбирается какая группа товаров (или же отдельный товар) будет добавлена на сайт и какие поля необходимо будет отслеживать. Каждому новому товару необходима возможность выбирать категорию в ИМ (если он загружается отдельно), а каждой категории необходима возможность привязывать её к уже существующей в ИМ. Если же товар уже и так есть в ИМ, то необходима сопоставление (склейка, привязка) его к определённой позиции из прайса поставщика с отслеживание определённых полей.
Пример: ИМ очков имеет ассортимент из следующих категорий:
• Солнцезащитные очки
o Мужские: М1,М2,М3,М4
o Женские: Ж1,Ж2,Ж3,Ж4
• Медицинские очки
o Мужские
Очки на + : ММ1+,ММ2+,ММ3+
Очки на — : ММ1-,ММ2-,ММ3-
o Женские
Очки на +: ЖМ1+,ЖМ2+,ЖМ3+
Очки на –: ЖМ1-,ЖМ2-,ЖМ3-
o Детские очки
Очки на +: ДМ1+,ДМ2+,ДМ3+
Очки на –: ДМ1-,ДМ2-,ДМ3-
• Комплектующие и уход
Подключается новый поставщик. Из его ассортимента будет добавлена новая категория: детские солнцезащитные очки, в которую войдут следующие модели: Д1,Д2,Д3. Так же у поставщика имеются модели очков из категории мужских медицинских ММ4+ и ММ4-, они будет добавлены в соответственно категории: Медицинские очки – Мужские – Очки на + и Медицинские очки – Мужские – Очки на -. У поставщика так же имеются очки модели ЖМ1+ и ДМ2-, они должны быть сопоставлены (склеены) с соответствующими из ассортимента ИМ. Ещё у поставщика есть очки марки Ж5, но они полностью совпадают с товаром Ж4 в ИМ и должны быть склеены с ними.
На выходе получаем следующее:
• Солнцезащитные очки
o Мужские: М1,М2,М3,М4
o Женские: Ж1,Ж2,Ж3,Ж4
o Детские: Д1,Д2,Д3
• Медицинские очки
o Мужские
Очки на + : ММ1+,ММ2+,ММ3+,ММ4+
Очки на — : ММ1-,ММ2-,ММ3-,ММ4-
o Женские
Очки на +: ЖМ1+,ЖМ2+,ЖМ3+
Очки на –: ЖМ1-,ЖМ2-,ЖМ3-
o Детские очки
Очки на +: ДМ1+,ДМ2+,ДМ3+
Очки на –: ДМ1-,ДМ2-,ДМ3-
• Комплектующие и уход
После всех этих процедур, настраиваем обновление прайсов по расписанию: ежедневно в 02:00 по МСК. Обновление настраивается таким образом, чтобы:
• отражалось изменение оптовой цены у позиций представленных поставщиком
• проверялся статус в наличии/не в наличии по товарам: Д1, Д2, Д3, ММ4+, ММ4-, ЖМ1+, ДМ2- и Ж5 и в случаи изменения так же менялись и на сайте эти свойства у позиций: Д1, Д2, Д3, ММ4+, ММ4-, ЖМ1+, ДМ2- и Ж4
• Если какой-то из товаров пропадал из прайса он отмечался цветом, статус в ИМ для этого товара «нет в наличии».
• Ничего не менять в других позициях!
Почитал я это дело. Подумал. Почитал вновь. Подумал. После третьего прочтения что-то начало проявляться). Затем начал изучать по фрагментам.
«По сайтам сейчас ситуация такая что один переделывается, а второй только создаётся (версии: OpenCart 1.5.1.3 и 1.5.5.1.2), поэтому ссылок пока нет.»
= на дворе первое Ноября, так что лучше ставить версию 1.5.6.х, в данной версии имеется поддержка MySQLi, что дает дополнительные удобства и преимущества при разработке, чем MySQL. http://ru.m.wikipedia.org/wiki/MySQLi
Дальше: «Сопоставление (привязка) имеющихся в базе магазина товаров с товарами из прайсов поставщика (если какой-либо товар уже есть на сайте, то указывать с каким товаром у поставщика его сопоставить и отслеживать. Например: на сайт добавлен товар А с полным набором свойств (его описание, ценой, фотографиями и т.д.), необходимо его сопоставить с товаров Б у поставщика (названия могу и описание могут как совпадать, так и не совпадать) и отслеживать определённые свойства. У поставщика товар Б в наличии и в магазине товар А в наличии, если у товара Б это свойство меняется, то соответственно в магазине меняется это свойства у товара А)»
= и вот здесь уже серьезный затык. Ведь бывает так, что у двух разных поставщиков один и тот же товар может различаться в наименовании, при чем как незначительно, так и сильно, следовательно, для сравнения товаров и понимания, одинаковые ли это товары, придется создавать дополнительно механизмы сопоставления на основе регулярных выражений, а также иных параметрах. А еще, система должна показать, какие товары она сопоставила, а в каких сомневается, чтобы вы потом сопоставили их вручную.
И потом, я все скомкал, выбросил и стал с нуля решать задачу.
1. Вытаскиваем данные из YML
http://likanta.ru/index.php?route=feed/yandex_market
Все делается просто: заказываем программисту конвертер YML – XLS
Программист может вам создать php приложение, которое будет подсасываться к YML, выкачивать его, конвертировать в XLS и отдавать вам экселевский файл. Приложение будет работать на вашем хостинге.
Дополнительно можно доработать его так, что оно будет в определенное время выкачивать с сайта, конвертировать и отправлять вам готовый файл на емейл, либо в админке вашего сайта делается кнопочка, при клике на которую вам через несколько секунд будет предложено указать, куда сохранить XLS файл. Либо и то и другое. Срок разработки 2-5 дней на первый сайт и примерно по 1-2 дня на все дополнительные сайты.
2. Покупаем лицензию Etrade Pricelist Importer.
Если у вас уже есть товары на сайте, то настраиваем подключение и выкачиваем в вашу программу весь имеющийся у вас каталог товаров.
3. Добавляем скачанный вами из YML и сконвертированный в XLS прайс-лист.
При настройке прайс-листа обязательно заполните колонку «Артикул производителя», в ней должен быть id товара в магазине, из YML которого вы выкачали прайс. Она в будущем нам понадобится.
По сути, все, больше мне дописывать нечего. Все остальные функции дописаны в документации к Etrade Pricelist Importer http://elbuz.com/ETradeDocs/PLI/index.html
Далее, вы будете иметь на сайте много наименований товаров.
Именно что наименований (ну, вместе со статусом наличия и ценой). Но при этом, у товаров не будет ни фоток, ни описаний.
Для этой задачи пинаем парсер.
Дело в том, что каждая карточка товара на вашем сайте будет иметь дополнительные поля, в которых будет информация:
— название поставщика;
— id товара поставщика.
Пишем к сайту парсер, под каждого поставщика свой.
При этом, запускаете в админке кнопку «Парсер Likanta», после чего парсер:
— понимает сразу, что его задача вытянуть инфу из YML поставщика Likanta;
— делает выборку по всем товарам, у которых в бд прописан поставщик Likanta;
— по прописанному нами id поставщика, находит товар в YML, откуда переходит на страницу карточки товара и выкачивает всю инфу.
Остальные парсеры иных поставщиков будут работать по той же схеме.
Ну, для понимания, в программе Etrade примерно 40% программного кода — это именно те функции, которые вам нужны.
Пишется программа с 2006 года. Уже вторая версия, скоро должна быть третья.
Таким образом, вам сперва год будут этот файли писать. Затем поймете, что все не так и надо по новой переписать.
Затем еще полтора года будут писать вторую версию «файлика».
Как найдете программиста, который выполнит ваши пожелания, при этом возьмет с вас менее 100 тыс. руб., дайте знать, я готов у вас выкупить контакты этого программиста за 100 тыс. руб.)
Писал файлик быстро, на коленке, может подскажите что непонятно было (раз только с тетьего раза понятно стало что я имел ввиду)? А-то чувствую программисты не будут так вчитываться, а потом сам виноват буду что упустил что-то или неточно написал.
Ну, дык я ведь не программист, поэтому и пришлось 3 раза вчитываться)
Динатоль
9 лет назад
Интересно у вас в портфолио:
2011-2012 / ООО «Объединенные Системы»
Соучредитель / Директор по развитию http://www.cosystem.ru
На сайте системы уж довольно интересно объединённые.
Судя по всему компании уже нет. Просто ссылка на сайт с проституками как то не красит портфолио.
Это как наблюдение, изучал ваш сайт и нашёл такую ссылку.
Да вот как раз хотел что-то одно, один модуль для всего этого…
А в чем разница, это один модуль будет делать, или несколько?
Простота выполнения. Загрузил данные в один модуль и всё, ничего никуда конвертировать и импортировать не надо.
Попробую на Фрилансе у программистов поспрашивать, почситаю что выгодней и удобней будет.
Спасибо за столь подробный ответ.
Ну, для понимания, в программе Etrade примерно 40% программного кода — это именно те функции, которые вам нужны.
Пишется программа с 2006 года. Уже вторая версия, скоро должна быть третья.
Таким образом, вам сперва год будут этот файли писать. Затем поймете, что все не так и надо по новой переписать.
Затем еще полтора года будут писать вторую версию «файлика».
Как найдете программиста, который выполнит ваши пожелания, при этом возьмет с вас менее 100 тыс. руб., дайте знать, я готов у вас выкупить контакты этого программиста за 100 тыс. руб.)
Обязательно.
Писал файлик быстро, на коленке, может подскажите что непонятно было (раз только с тетьего раза понятно стало что я имел ввиду)? А-то чувствую программисты не будут так вчитываться, а потом сам виноват буду что упустил что-то или неточно написал.
Ну, дык я ведь не программист, поэтому и пришлось 3 раза вчитываться)
Интересно у вас в портфолио:
2011-2012 / ООО «Объединенные Системы»
Соучредитель / Директор по развитию
http://www.cosystem.ru
На сайте системы уж довольно интересно объединённые.
Можете не публиковать комментарий.
С компанией был связан с 2011 по 2012 год.
На дворе сейчас конец 2014 года.
Не понимаю, что-то не так?)
Судя по всему компании уже нет. Просто ссылка на сайт с проституками как то не красит портфолио.
Это как наблюдение, изучал ваш сайт и нашёл такую ссылку.
Ну….. да…. верно, что-то у них пошло не так)).
Спасибо за подсказку, уберу-ка я пока что ссылку на тот сайт)))