Перейти к содержимому


Расширенный CSV импорт товаров

импорт CSV

  • Вы не можете ответить в тему
Сообщений в теме: 67

#1 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 29 February 2012 - 12:16 AM

ВЫШЛА НОВАЯ ВЕРСИЯ! Устранены баги и добавлены новые функции...
Актуально для версии ShopCMS 3.1.2

Расширенный CSV-импорт товаров 2.2

Прикрепленный файл  csv_import_v2.1.jpg   401К   193 Количество загрузок:

Список изменений:
  • Полностью сохранена изначальная функциональность импорта;
  • Добавлена возможность указания "Колонки идентификации" как "Наименование" при обновлении товаров (стандартный импорт), ранее имеющиеся в магазине товары обновлялись, если только указана колонка "Код";
  • Добавлен отчет в конце успешного импорта товаров из CSV-файла;
  • Внедрена функция обновления текущего каталога, для активации нужно поставить соответствующую галочку на странице импорта, при этом:
    • Товары и категории, присутствующие в CSV-файле и в Каталоге магазина, обновляются (на втором шаге нужно указать "Колонку идентификации" как "Код" или "Наименование", другие - не сработают);
    • Новые товары и категории (присутствующие только в CSV-файле) не импортируются, но формируется CSV-файл со списком новых товаров в виде Кодов или Наименований (в зависимости от того, какую "Колонку идентификации" вы использовали);
  • Версия 2.0: Добавлена функция управления наличием товаров, позволяющая автоматически выставлять товарам Склад на -1, если они отсутствуют в CSV-файле импорта, но имеются в текущем каталоге магазина. Сверка товаров с CSV-файлом может быть ограничена доп. характеристикой (например: Поставщик или Бренд);
  • Версия 2.1: Добавлена функция обнуления, которая выставляет товарам Склад = 0, если они не встречались в CSV-обновлениях (в том числе и в текущем CSV-импорте) и не обновлялись вручную в течении указанного периода времени. Функция работает совместно с "Управлением наличием товаров" и ограничивается указанной доп. характеристикой.
  • Версия 2.2: В финальный отчет включен вывод значений доп. характеристики, если таковая указана в "Управлении наличием товаров".
Подробное описание работы модуля 1-ой версии: в этом сообщении.
Новые функции 2-ой версии: описание.

Скачать: Модуль расширенного CSV-импорта товаров (инструкция и полное описание в архиве)

---------------------------------------------------

Что еще может быть реализовано в модуле импорта, но не попало в редакцию 2.2.:
  • Интеграция с ЧПУ - автоматическая генерация ЧПУ во время импорта товаров;
  • Интеграция с Sitemap (картой сайта для поисковиков) - автоматическая генерация карты сайта после импорта товаров;
  • Интеграция с Яндекс.Маркет - автоматический экспорт в Яндекс.Маркет после импорта товаров в соответствие с сохраненными настройками в отдельном модуле Яндекс.Маркета (обновленный вариант модуля).
Эти дополнения превращают импорт товаров в фактически единый инструмент, который совершает все необходимые действия по обновлению/добавлению ассортимента магазина. Дополнения могут быть установлены и адаптированы под ваши запросы и уже установленные компоненты в частном порядке (обращайтесь через Личные Сообщения).
  • 1

#2 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 29 February 2012 - 12:24 AM

У кого при импорте товаров на втором шаге (где можно указывать соответствия колонкам) колонке Склад не присваивалось значение "Склад", нужно открыть файл core\languages\russian.php и найти переменную:
ADMIN_PRODUCT_INSTOCK

В ней стереть значение "Склад" и написать по новой... У меня лично такая беда присутствовала изначально, видимо буква "С" в слове "Склад" была латинской ))))
  • 1

#3 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 29 February 2012 - 01:40 AM

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

фига себе, грабельки... Забибикаешься искать. Там и правда латинская буква, причем еще и в куче других мест тоже.

PS. А о чем модуль-то, собственно? Почитал ридми, но так и не понял, в чем суть, т.е. что и для чего он делает.

---------- Сообщение объединено ----------

ранее имеющиеся в магазине товары обновлялись, если только указана колонка "Код"

Хм... а как же я товары обновляю? Не по коду, а именно по наименованию, т.к. у меня у каких-то групп коды совпадают. Весь набор характеристик на тестовом сайтике так и сделан - экспорт в CSV, выдергивание из "краткого описания" характеристик, дописывание их к CSV в виде{a,b,c} и импорт обратно.

---------- Сообщение объединено ----------

Хм... Может, лучше таки в самом модуле поставить английскую "С" в слово "Склад"? Парсер товаров тоже выводит CSV c английской буквой, видимо, пройдя по этим же граблям и решив, что проще поменять один раз у себя, чем писать в инструкции, что каждому надо заменить англйскую "С" на русскую.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 29 February 2012 - 01:02 PM

PS. А о чем модуль-то, собственно? Почитал ридми, но так и не понял, в чем суть, т.е. что и для чего он делает.

Смысл вот в чем: в изначальном модуле можно было формировать CSV двух типов (для импорта в магазин):
  • Такой как из примера (можно скачать со страницы импорта в Админке) - с категориями и подкатегориями, т.е. полностью повторяющий структуру каталога;
  • Простой, без учета категорий - все товары просто одной простыней.
При 1-ом варианте товары обновляются нормально, т.к. изначальный скрипт ищет их в соответствующих категориях и при обнаружении перезаписывает. А при 2-ом обновление работало только если указать в качестве идентификатора "Код".

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

Получается, что менеджер обновляет существующие цены и наличие и на выходе получает список новых товаров, которые уже нужно будет полностью оформить для стандартного импорта со всеми полями по 1-ому типу.

Этот модуль существенно упрощает жизнь, если у вас основной (и единственный) каталог товаров содержится в базе ShopCMS и вы не используете Excel или 1С каталоги, которые каждый раз полностью синхронизируете с магазином. Кстати, тут есть люди, которые при каждом обновлении цен полностью стирают весь каталог магазина и затем полностью заливают новый...

---------- Сообщение объединено ----------

Я написал модуль для своего менеждера, т.к. при обновлении он действует по такой схеме:
  • Получаем прайсы от поставщиков;
  • Раскладываем их по определенным папкам на компьютере;
  • Запускаем VB-скрипт из Excel и получаем одну таблицу-простыню ото всех поставщиков, где есть только колонки: Код, Цена, Склад.
  • Сохраняем в CSV-файл и импортируем данным модулем в магазин.


---------- Сообщение объединено ----------

Хм... Может, лучше таки в самом модуле поставить английскую "С" в слово "Склад"?

В модуле нигде не присутствует никаких слов "Склад" ))) Этот кофликт возникает из-за того, что в нашем CSV для импорта колонка "Склад" написана кириллицей ))) Соответственно, если ты говоришь о парсере, встроенном в магазин, то он использует ту же переменную из russian.php или же вообще идет сразу в Базу...
  • 0

#5 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 29 February 2012 - 04:45 PM

В модуле нигде не присутствует никаких слов "Склад" ))) Этот кофликт возникает из-за того, что в нашем CSV для импорта колонка "Склад" написана кириллицей )))

"В нашем" = в твоем сторонне создаваемом?

Соответственно, если ты говоришь о парсере, встроенном в магазин, то он использует ту же переменную из russian.php или же вообще идет сразу в Базу...

Нет, я о зюзикеновском парсере, который отдельный, а не модуль. Просто полез и исправил russian.php, а потом задумался, а не исправлено ли у остальных ВНЕШНИХ приблуд это слово в соответствии с неправильным написанием в основном продукте? Внешних приблуд с ходу нашлась только одна - парсер. Проверил - опаньки! - а там тоже "Склад" написан с английской буквой :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 NLO56

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 91 сообщений
Репутация: 5
Начинающий
  • ГородСанкт-Петербург

Отправлено 16 June 2012 - 02:06 PM

Столкнулся с такой проблемой!
У меня в каталоге в разных категориях присутствуют товары с одинаковым кодом.
При импорте указываю в колонке идентификации по Коду.
Изменяется цена только на один товар. Как решить проблему?
  • 0

#7 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 16 June 2012 - 06:12 PM

Меняйте код. Код это идентификатор, он по определению не может повторяться...... а если он повторяется, то теряется вообще его природная суть ))
  • 1

#8 ale-x

    Пользователь

  • Пользователи
  • PipPip
  • 19 сообщений
Репутация: 2
Начинающий

Отправлено 16 July 2012 - 02:07 AM

В следующих версиях планируется: Определять товары, которые присутствуют в Каталоге магазина, но отсутствуют в прайсе от поставщика. Таким образом некоторые поставщики "убирают" товар из продажи (он просто перестает фигурировать в прайсах). Наша задача - на уровне импорта определить такие товары и предложить менеджеру отключить их (выставить Склад = 0) или перевести в товары под заказ (Склад = -1).

Подскажите, это уже реализовано?
  • 0

#9 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 30 July 2012 - 10:17 PM

Подскажите, это уже реализовано?

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

Дополнение от 20.11.2012: функциональность реализована в модуле версии 2 - http://vsupport.club...dpost__p__23776
  • 0

#10 ale-x

    Пользователь

  • Пользователи
  • PipPip
  • 19 сообщений
Репутация: 2
Начинающий

Отправлено 06 August 2012 - 08:15 PM

Пока отключаю товары, которых нет в прайсе вручную:
UPDATE `%PREFIX%_products` SET `enabled`="0" WHERE `product_code` NOT IN (список кодов которые есть в прайсе);
А макрос правильно называет категории и подкатегории, чтобы новые товары не лезли в главную.
Также хочу сделать кнопочки - "показать отключенные товары" и "удалить выключенные товары".
  • 0

#11 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 07 August 2012 - 10:34 AM

Пока отключаю товары, которых нет в прайсе вручную:

Когда есть список товаров, которых нет в прайсе (вышедшие из продажи), то с ними уже можно делать что угодно, главное этот список автоматически получить...

Также хочу сделать кнопочки - "показать отключенные товары" и "удалить выключенные товары"

Уже тысячу раз это обсуждали... Лучше товары не удалять/отключать, а переводить в "группу" со статусом "нет в наличии", чтобы все ссылки оставались рабочими и работал поиск по таким товарам.
  • 0

#12 ale-x

    Пользователь

  • Пользователи
  • PipPip
  • 19 сообщений
Репутация: 2
Начинающий

Отправлено 07 August 2012 - 12:26 PM

Уже тысячу раз это обсуждали... Лучше товары не удалять/отключать, а переводить в "группу" со статусом "нет в наличии", чтобы все ссылки оставались рабочими и работал поиск по таким товарам.

Согласен, не подумал. Но может по полю date_modified определять очень старые товары и чистить их, ведь когда база большая и за год она может разрастись в два-три раза?
  • 0

#13 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 07 August 2012 - 09:57 PM

Но может по полю date_modified определять очень старые товары и чистить их

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

Вообще, подобные логистические моменты математически не учтены в ShopCMS, или учтены, но они не автоматизированы или требуют доработки. К примеру, пакетное выделение товаров как новинки при CSV-импорте, т.к. часто поставщих (мой например) пихает их в общем списке совершенно в нелогичной и независимой от реальной новизны этого товара (например заграницей) форме и в следующих прайсах эти товары например перестают быть новинками (тоже иногда по прихоти поставщика).

Если грамотно, то лучше всего делать для каждого случая - свой атрибут. Поступил новый товар - дата в поле новинка, ушел из прайса - отдельная отметка об этом плюс автоматом склад на -1. А так, получается, что у тебя и товары которые просто временно закончились склад = -1 и те, которые вообще 100 лет как пропали из продажи тоже склад = -1.

UPD: может сделать склад = -2 для товаров, которые вышли из продажи с отдельным комментом в юзер-части типа "Товар вышел из продажи, смотрите ниже новые версии товара". Тогда и можно будет удалять их по принципу: ЕСЛИ склад = -2 И date_modified < xxxx-xx-xx.
  • 0

#14 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 19 November 2012 - 05:45 AM

Вышла новая версия дополнения. Файлы и скриншоты перезалиты - см. первое сообщение.

Описание новых функций:

(Версия 2.0) Функция управления наличием товаров, позволяющая автоматически выставлять товарам Склад на -1, если они отсутствуют в CSV-файле импорта, но имеются в текущем каталоге магазина. Сверка товаров с CSV-файлом может быть ограничена доп. характеристикой (например: Поставщик или Бренд).

Пример: вы импортируете CSV-файл с обновлением цен и наличия от одного из поставщиков, который посталяет вам только определенные бренды, при этом у вас в ShopCMS есть доп. характеристика "Бренд" и у всех товаров проставлено ее значение. Вы должны активировать данную функцию импорта, указав доп. характеристику как "Бренд", после чего Склад будет высталяться на -1 только у товаров, которые имеют значения характеристики "Бренд" такие же как и у товаров в CSV-файле, но не присутствуют в обновлении (при этом в CSV-файле может присутствовать только лишь "Колонка идентификации" и, например, "Цена").

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

Про функцию обнуления см. следующее сообщение...
  • 0

#15 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 19 November 2012 - 10:46 PM

(Версия 2.1) Функция обнуления товаров, при активации которой товарам высталяется Склад = 0, если они не встречались в CSV-обновлениях (в том числе и в текущем CSV-импорте) и не обновлялись вручную в течении указанного периода времени.
Функция работает только с параметром Склад, что более предпочтительно, чем использование параметра Enabled, который отключает товар и закрывает доступ к нему (ссылка становится нерабочей). При постановке Склад = 0, товар только исчезает из Каталога, Поиска, Карты сайта и т.д., но при этом ссылка на него остается действующей, что позволяет переходить к товару по прямой ссылке из поисковых систем.

ЕСЛИ (!) товар впервые был добавлен в каталог магазина ранее указанного в функции периода времени и при этом никогда не менялся и не обновлялся, он тоже подпадает под обнуление! Функция работает только при включенном "Управлении наличием товаров" и ограничивается выбранной доп. характеристикой. ЕСЛИ (!) указать значение доп. характеристики "Все товары", то обнуляться будут все товары во всех категориях магазина!
  • 0

#16 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 20 November 2012 - 12:30 AM

Мысли вслух: хотел сделать полностью автоматизированное обновление наличия и цен от поставщиков (соответствующий отдельный управляемый из админки модуль), т.к. большинство из них имеют на своих сайтах постоянно обновляемый XML-файл с товарами, но эти уроды (как оказалось) экспортируют туда неправильные данные, у одних только наличие там верное, а цены - нет, у других вообще все вкривь и вкось и т.д. Совок останется совком, мля... Буду пытаться выбить дурь из их админов, но скорее всего дело тухлое...
  • 0

#17 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 23 November 2012 - 10:40 PM

Небольшие изменения в версии 2.2: в финальный отчет включен вывод значений доп. характеристики, если таковая указана в "Управлении наличием товаров".
  • 0

#18 boss

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 38 сообщений
Репутация: 0
Начинающий

Отправлено 30 December 2012 - 11:52 PM

Вот такая ошибка

как её можно исправить?

WARNING: set_time_limit() [<a href='function.set-time-limit'>function.set-time-limit</a>]: Cannot set time limit in safe mode
Line: 119
File: /home/xxxxxx/domains/xxxxxxx/public_html/core/includes/admin/sub/catalog_excel_import.php
Link: /admin.php
Date: 30.12.12 - 22:34:23
Dump:
array(0) {
}
array(53) {
  ["column_name_0"]=>
  string(10) "Сортировка"
  ["db_association_0"]=>
  string(10) "sort_order"
  ["column_name_1"]=>
  string(3) "Код"
  ["db_association_1"]=>
  string(12) "product_code"
  ["column_name_2"]=>
  string(12) "Наименование"
  ["db_association_2"]=>
  string(4) "name"
  ["column_name_3"]=>
  string(16) "Загол-ок (title)"
  ["db_association_3"]=>
  string(5) "title"
  ["column_name_4"]=>
  string(18) "Подробное описание"
  ["db_association_4"]=>
  string(11) "description"
  ["column_name_5"]=>
  string(16) "Краткое описание"
  ["db_association_5"]=>
.......................................
  string(1) "1"
  ["filename"]=>
  string(18) "core/temp/file.csv"
}
---

  • 0

#19 micehide

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 359 сообщений
Репутация: 124
Мастер

Отправлено 02 January 2013 - 11:26 PM

как её можно исправить?


Смотрите в Общих настройках админки:

Прикрепленный файл  safemode.jpg   36.55К   84 Количество загрузок:
  • 0

#20 boss

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 38 сообщений
Репутация: 0
Начинающий

Отправлено 04 January 2013 - 05:34 PM

как её можно исправить?


Смотрите в Общих настройках админки:

Прикрепленный файл  safemode.jpg   36.55К   84 Количество загрузок:


Безопасном режим у меня не стоит, хотите сказать из-за этого ошибка?
Но тогда сайт будет как демо версия
  • 0