Синхронизация xml выгрузки с каталогом сайта (Битрикс)

Тема в разделе "PHP", создана пользователем Jusper1, 13 дек 2015.

Модераторы: latteo
  1. Jusper1

    Jusper1 Постоялец

    Регистр.:
    27 фев 2015
    Сообщения:
    106
    Симпатии:
    44
    Собственно, есть xml выгрузка с товарами, у каждого товара есть уникальный айди, есть каталог сайта, в котором есть эти уникальные айди, нужно синхронизировать. Вопрос как сложно и сколько примерно стоит?
     
  2. tankisto

    tankisto

    Регистр.:
    5 окт 2010
    Сообщения:
    219
    Симпатии:
    202
    Загружаете файл на ftp, пишите разбор файла и загрузку его в битрикс.
    Вешаете этот импорт на cron.

    Загружаете данные из файла в массив и потом для каждого товара в битриксе заполняете поля NAME, DETAIL_TEXT, DETAIL_PICTURE и так далее + созданные пользовательские поля.
    Например у вас в $nabor данные из файла, тогда пишем:
    PHP:
    $item['NAME'] = $nabor[1]; // название
    $item["XML_ID"] = $nabor[2]; // артикул
    $item["ACTIVE"] = "Y"// устанавливаем активным

    // устанавливаем описание и краткое описание
    $item['DETAIL_TEXT_TYPE'] = "html";
    $item['DETAIL_TEXT'] = $nabor[11];
    $item['PREVIEW_TEXT_TYPE'] = "html";
    $item['PREVIEW_TEXT'] = $nabor[12];

    //устанавливаем пользовательские поля, если есть
    $prop[21] = $nabor[15]; // например, бренд
    $prop[22] = $nabor[16]; // еще какое-то поле

    //устанавливаем картинки товаров, которые вы залили в папку images
    if (strlen($nabor[31])>0)
            {
                
    $arPicture CFile::MakeFileArray($destDir."images/{$nabor[25]}");
                
    $item["DETAIL_PICTURE"] = $arPicture;
            }
    ну и так далее по аналогии
     
    Последнее редактирование: 13 дек 2015
    Jusper1 нравится это.
  3. udjin123

    udjin123

    Регистр.:
    26 дек 2014
    Сообщения:
    155
    Симпатии:
    111
    Вы подробней распишите условия.
    Синхронизация только остатков по айди. Или удаление добавление элементов? Что с разделами?
    1с-ный импорт тоже xml обрабатывает в формате cml2 и много умеет еще для примера - добавлять цены, свойства и тд и тп.
     
    hevoc нравится это.
  4. tankisto

    tankisto

    Регистр.:
    5 окт 2010
    Сообщения:
    219
    Симпатии:
    202
    Я привел лишь 1 из множества алгоритмов выгрузки из 1С на сайт. Если в гоняете из 1С на сайт каждый раз всю базу, то это одно дело, если только изменившиеся позиции, то и выгрузка другая.
    Если конфигурация в 1С типовая и не переписанная, то воспользуйтесь стандартным импортом.

    Если не хотите заморачиваться - в маркетплейс есть типовые решения по выгрузке из 1С.
     
    hevoc и udjin123 нравится это.
  5. udjin123

    udjin123

    Регистр.:
    26 дек 2014
    Сообщения:
    155
    Симпатии:
    111
    Да все правильно - самый простой вариант, но мой пост был адресован топик стартеру, так как наверняка все сложнее. Многие магазины сейчас работают по остаткам поставщиков, и задача стала очень востребована и по опыту советую ему написать подробнее.
     
    hevoc нравится это.
  6. Jusper1

    Jusper1 Постоялец

    Регистр.:
    27 фев 2015
    Сообщения:
    106
    Симпатии:
    44
    Есть фтп поставщика, с логином и паролем, там лежит xml выгрузка с товарами.
    Конкретная выгрузка занимает один из разделов каталога, который формировался на сайте изначально в ручную и статичен (вся выгрузка всех товаров конкретного поставщика со всеми айди товаров). Синхронизация происходит только по трем полям - айди товара, цена и кол-во. Разделы, названия, изображения и вообще структура не затрагивается, так как есть свои ньюансы с этим. При этом, синхронизация выполняется частично скриптом, а загрузка на сайт, в ручную, средствами самого битрикса - импорт csv. Я пока не зарбирлся с тем, как сделать загрузку сразу в битрикс автоматически
     
  7. udjin123

    udjin123

    Регистр.:
    26 дек 2014
    Сообщения:
    155
    Симпатии:
    111
    Сколько товаров тоже надо упоминать, от это зависит как его обрабатывать агентом через битриксовые события или кроном за один шаг или пошагово. А то 1000-2000 товаров не проблема на хостинге пропустить за раз, а вот уже 30000 проблематично, надо пошагово.
     
    hevoc нравится это.
  8. Jusper1

    Jusper1 Постоялец

    Регистр.:
    27 фев 2015
    Сообщения:
    106
    Симпатии:
    44
    30000 товаров.
    У вас есть какое-то готовое решение или вы можете развернуто объяснить, наиболее оптимальный, с вашей точки зрения, метод решения в конкретном случаи, на основе исходных данных? К примеру, пункт первый, делаем то-то, пункт второй делаем так, пункт третий возможны несколько вариантов и тд
    А то на днях собираюсь плотно заняться вопросом полноценной синхронизации, начну с предложения tankisto. Если сделаю, выложу тут решение
     
    Последнее редактирование: 25 дек 2015
  9. udjin123

    udjin123

    Регистр.:
    26 дек 2014
    Сообщения:
    155
    Симпатии:
    111
    Ну я же не просто так задаю наводящие вопросы от этого и зависит решение. Попробую на последнем своем примере пояснить, вот есть штатный экспорт из 1с, он берет файл xml который получил от 1ски и загоняет его в базу и потому уже обрабатывает. Файлик xml около 200мб. Это в базу в таблицу b_xml_tree миллионы записей. Сделано так битриксойдами чтобы работало даже на зачуханом хостинге, долго но работало. Но у меня то под задачу сервер с рейдом на ссд и 32 гб памяти. Мне не надо что он несколько десятков!!!! часов загонял его в базу. Мне проще его залить в целиком в память и обработать.

    К чему я это, что универсальное решение не всегда хорошо. И лучше знать все входящие параметры задачи, чтобы ее оптимально решить, ну или посоветовать как делать.
     
    hevoc нравится это.
  10. Андрей Шпак

    Андрей Шпак Создатель

    Регистр.:
    11 фев 2013
    Сообщения:
    43
    Симпатии:
    7
    1) как часто происходит выгрузка? Это плановое событие, или когда угодно? 30000 проверок только на цену и остаток-не так и много, просто на слабом хостинге ,быть может, придется разбить на куски по нескольку тысяч записей
    2) возможно ли назначить синхронизацию ночью, на непродажное время? минут 5 потормозит - и все дела(если хост не совсем мертвый)
    3) встает ли вопрос партионного учета на вашей стороне? в смысле : остаток одной номенклатуры: 5 шт по 1000 р , 10 шт по 1200, или просто все по одной цене на вашем портале, с ориентацией только на следующую синхронизацию?