Автор Тема: Обновление модуля импорта для LegoSP 6.2.8,6.2.9  (Прочитано 2159 раз)

Оффлайн RedLine

  • LegoSP developer
  • Пользователь
  • *****
  • Сообщений: 44
    • Просмотр профиля
Добрый день, коллеги и пользователи!
Множество проблем возникало, при импорте и обновлении товаров ( категорий ) при использовании стандартного модуля входящего в состав дистрибутива LegoSP 6.2.8,6.2.9. Начиная от нехватки памяти заканчивая не понятным поведением модуля. Поскольку многие пользователи остро нуждаются в регулярном обновлении номенклатуры товара предлагаю Вам тестировать альтернативный вариант модуля. В случае если модуль будет удовлетворять основным требованиям, он буде включен в релиз 6.2.9. Также его можно будет обновить и на установленных дистрибутивах.

Для начала обозначу основные особенности модуля, далее перейду к порядку обновления на работающих магазинах, после чего перейдем к структуре файла импорта и требованиям к информационным полям.

Особенности:
•   Работает с файлами xls, xlsx, csv (файл csv кодировка обязательно ср-1251, разделитель –«;», можно использовать файл сохраненный из excel).
•   Может работать с изменяемой структурой файла (описана ниже)
•   Требует шапки с названием полей (на данном этапе названия конфигурируются  из файла вручную)
•   Использует приблизительно 10 Мбайт оперативной памяти на 1000 строк.
•   Удалена поддержка баз данных в кодировке ср-1251
•   Подходит для версий LegoSP с базой данных в кодировке utf-8

Код модуля написан в процедурном стиле.

Установка
1)   Необходимо заменить файл /includes/admin/sub/catalog_import.php, аналогичным во вложениях. Не забудьте сделать резервную копию старого модуля, если вдруг захотите вернуться на предыдущую версию.
      Добавить файл import_cfg.php в папку /includes/admin/sub/.

2)   Необходимо обновить приложение PHPExcel входящее в состав LegoSP, до версии 1.8.0 (последняя стабильная ), для этого:
         a.   Скачать архив приложения с официального сайта https://phpexcel.codeplex.com/downloads/get/809026
         b.   Извлечь фалы из архива
         c.   Найти в распакованном архиве папку Classes
         d.   Скопировать папку Classes ПОВЕРХ аналогичной расположенной в корень_сайта/core/excel/ .Копируем с заменой всех файлов.

Требования к файлу импорта


Файл импорта может содержать следующий перечень столбцов:
Id – уникальный идентификатор товара(категории) в базе данных.
Наименование – название категории или товара
Цена – актуальная цена товара
Остаток – остаток товара на складе
Картинка – основная картинка товара или категории
Бфото – большая картинка товара или категории
Производитель – название или идентификатор произодителя товара
Категория – «родительская категория», название или идентификатор содержащей данную единицу импорта (товар или категория)
Полное – полное описание товара или категории
Краткое – краткое описание товара или категории
Показывать – отображать категорию на витрине
старая цена – зачеркнутая цена товара
Артикул – код товара
Оценка клиента – оценка товара
Голосов клиента – количество голосов клиентов за товар
Продано – количество проданных товаров
Meta_title, meta_decription, meta_keywords - поля значений мета тегов
Поле h1 – заполняется автоматически значением поля Наименование

Для строки описывающей товар обязательными являются столбцы Цена, Остаток, Наименование
остальные поля являются необязательными, могут не заполнятся, если соответствующие поля для товара на сайте должны быть пустыми или могут быть удалены (имеется ввиду полное отсутствие столбца в файле импорта).

Для строки описывающей категорию  столбцы Цена, Остаток должны быть обязательно пустыми, содержимое столбцов, не относящихся к описанию категории, такие как Оценка клиента, Голосов клиента, Продано, игнорируется.

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

Категории с названием, которого нет в Вашем каталоге считаются новыми и добавляются, категории, которые найдены в Вашем каталоге по названию обновляются значениям заполненных столбцов, пустые столбцы игнорируются, Для любых режимов импорта

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

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

В любом режиме импорта, модуль сначала находит товар в базе данных, а далее действует согласно выбранному режиму. Поиск товара осуществляется сначала по артикулу после по названию. Если товар не найдет то он считается новым.

В режиме "Добавить только новые товары в каталог"  модуль добавляет товары которые не удалось идентифицировать по артикулу и по названию. Найденные товары игнорируются.

В режимах
Обновить все товары в каталоге
Обновить поля у существующих товаров (Отметьте поля, которые требуют обновления)

Товары не идентифицированные в базе данных не добавляются, обновляются только существующие товары.

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

Оффлайн Юрий

  • Старожил
  • ****
  • Сообщений: 322
    • Просмотр профиля
    • Во-Сток
Re: Обновление модуля импорта для LegoSP 6.2.8,6.2.9
« Ответ #1 : Февраля 29, 2016, 10:36:37 pm »
Совет по категориям:
удалить то что сейчас и сделать у товара колонки для categoryID и category name.

Как будем искать категорию:
с categoryId - думаю все понятно

Category name - розделять по какому то символу. Пример:
"Категория1/Категория2/категория3" и в итоге выискивать от конечного пока не будет полного совпадения (пока по другому - не доступно)

То выше предложенный вариант сильно ограничивает расположение строк для товара.

я бы так сделал. Но тут уже кому как удобней...

Оффлайн RedLine

  • LegoSP developer
  • Пользователь
  • *****
  • Сообщений: 44
    • Просмотр профиля
Re: Обновление модуля импорта для LegoSP 6.2.8,6.2.9
« Ответ #2 : Марта 01, 2016, 10:04:50 pm »
В принципе, порядок импорта товаров в формате "категория за категорией" можно нарушить, указав в поле Категория название или айди категории, в которую следует поместить импортируемй товар , также при обновлении товара можно его  таким образом переместить в другую категорию. Кажись, в инструкции это я не указал.
Хорошее предложение по способу поиска категории, надо будет реализовать.
По поводу удобней, да уж, тут  не угадаешь, разные пользователи, разные прайсы, разные требования. Если есть идеи как сделать импорт более гибким, предлагайте, по возможности буду дописывать.

Оффлайн figvam

  • Пользователь
  • **
  • Сообщений: 73
    • Просмотр профиля
Re: Обновление модуля импорта для LegoSP 6.2.8,6.2.9
« Ответ #3 : Марта 01, 2016, 11:00:35 pm »
Ну вот как пользователь, навскидку, мне было бы практичней и удобней использовать выбор категории для загрузки определенной группы товаров в оную(на примере как в карточке товара), думаю вывести поле для категорий в импорте не проблема и задать айди для сохранения. Или усложнив процесс, указав от какой строки до какой, в какую категорию(опять же, уже существующую).
PS/Подобная практика вполне себе удобна, проверено.
« Последнее редактирование: Марта 02, 2016, 12:38:13 am от figvam »

Оффлайн Юрий

  • Старожил
  • ****
  • Сообщений: 322
    • Просмотр профиля
    • Во-Сток
Re: Обновление модуля импорта для LegoSP 6.2.8,6.2.9
« Ответ #4 : Марта 01, 2016, 11:51:00 pm »
Ну если нужны предложения - то вот пару есть:

1) Пересадить импорт на аякс. Немного разгрузит загрузку больших файлов. CSV - вообще можно будет любой грузить через построчное чтение.  XLS - может еще кое как расслабит, а вот xlsx - увы. Он вроде бы полностью грузится в ОЗУ при открытии.

2) конф файл импорта -> в папку cfg и в нем прописывать не структуру колонок, а ассоциацию поля БД с именем колонки.  пример конфига:
"Ид_товара"=>"productID",
"Товар"=>"name",
"Имя"=>"name",
"Категория"=>"categoryID"
Далее при импорте - читаем колонки 1й или Nй строки файла(импорта) и пробегаемся по конфигу для ассоциации с полем БД. Далее уже исходя их результат делать импорт (естественно прописать наличие обязательных колонок в файле). Данный вариант позволит юзерам постоянно делать удобный для себя файл из 3х или 10и колонок (уже не важно).


Оффлайн RedLine

  • LegoSP developer
  • Пользователь
  • *****
  • Сообщений: 44
    • Просмотр профиля
Re: Обновление модуля импорта для LegoSP 6.2.8,6.2.9
« Ответ #5 : Марта 02, 2016, 03:32:38 pm »
figvam, Юрий, спасибо, по свободе доработаю. Тут уже придется переделать, саму форму с настройками импорта.
Добавить туда и конфигурацию импорта, которая  сейчас в файле, скрытым блоком, чтоб не маячило перед глазами. А то пользователю как-то не очень время от времени править конфиги.
Добавлю выбор конкретной категории для импорта, по совету figvam.
Ну и пару плюшек с аяксомю
Еще раз спасибо коллеги!  :)