Достаточно часто требуется настроить автоматический импорт каталогов из csv файлов, от поставщиков. В 1С-Битрикс, уже есть весь необходимый функционал. Требуется лишь настроить и обеспечить выполнение по расписанию.
Выполняется это в несколько шагов. Предположим, что все реализуется на Битрикс веб окружении. Но легко воспроизводиться на любом, нормальном хостинге. Итак:
Тут все просто: Поставщик ежедневно выкладывает csv файл по постоянному адресу http://example.com/catalog.csv. Мы будем получать его с помощью команды wget и cron задания.
Если wget не установлен на сервере выполняем установку, в терминале
yum install wget
Сайт находится в директории /home/bitrix/www. Просто открываем файл cron (/etc/crontab) заданий и добавляем, новой строкой команду:
30 21 * * * bitrix wget -O /home/bitrix/www/upload/catalog.csv http://example.com/catalog.csv
— 30 21 * * * Каждый день в 21:30
— bitrix wget -O Пользователем bitrix получаем и перезаписываем файл
— /home/bitrix/www/upload/catalog.csv в директории upload сайта
— http://example.com/catalog.csv адрес с csv файлом поставщика
Теперь создадим профиль импорта. на сайте проходим в
Администрирование -> Магазин -> Настройки -> Импорт данных
И добавляем новый профиль Import CSV (new)
Тут просто, пошагово, настраиваем соответствие полей: В какой инфоблок записывать данные, в какие поля и настройки обработки элементов
Сохраняем. И в списке профилей, напротив свеже созданного, выбираем в выпадающей менюшке "Привязать к cron"
В следующем окне оставляем все поля пустыми, если что-то будет прописано- удаляем и нажимаем "Установить"
Запоминаем ID профиля, в моем случае "1"
Для того, что бы импорт из csv заработал на cron по расписанию, сначала копируем файл
/bitrix/php_interface/include/catalog_import/cron_frame.php
прямо в эту же директорию, называем import_catalog.php и открываем на редактирование.
Удаляем все что касается php интерпритатора (первые строчки) и заменяем путь к корневой директории на:
$_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/../../../..");
И указываем ID своего сайта в переменной $siteID
На всякий скрин, должно получиться вот так. Все остальное не трогаем
Дальше, заходим в терминал на сервере, пользователем bitrix и проходим в директорию с этим файлом
cd /home/bitrix/www/bitrix/php_interface/include/catalog_import
И делаем файл import_catalog.php исполняемым
chmod +x import_catalog.php
Дело осталось за малым: Добавить выполнение этого скрипта в cron задание:
10 1 * * * bitrix /usr/bin/php -f /ПУТЬ_К_САЙТУ/bitrix/php_interface/include/catalog_import/import_catalog.php 1
— 10 1 * * * Каждый день в 01:10
— bitrix /usr/bin/php -f Пользователем bitrix и интерпритатором php
— /home/.../import_catalog.php запускаем скрипт импорта
— 1 ID профиля импорта - 1
Если импортов несколько, не нужно постоянно копировать файл import_catalog.php, просто, в каждом cron задании, указывает ID нужного профиля в аргумент
Если понадобятся логи, дабы отладить и отслеживать процесс импорта каталога из csv. Можно добавить аргументом, в cron задание путь до файла логгирования. Пример:
10 1 * * * bitrix /usr/bin/php -f /ПУТЬ_К_САЙТУ/bitrix/php_interface/include/catalog_import/import_catalog.php 1 > /home/bitrix/www/php_interface/include/catalog_import/log/prof1.txt
![]()
Dmitriy Ivanov
|
Подскажите пожалуйста, почему выводит ошибку "Language id is absent - defined site is bad" в log файле
$siteID = 's2'; так же пробывать 'ru'; в чем может быть проблема? |
![]()
aramania
|
Здравствуйте Михаил.
Вы неправильно указали путь! пропустили папку bitrix 10 1 * * * bitrix /usr/bin/php -f /home/bitrix/www/php_interface/include/catalog_import/import Должно быть 10 1 * * * bitrix /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/include/catalog_import/import_catalog.php 1 |
![]()
Михаил Базаров
|
||
|
||
На нем, уже много видеоуроков по 1С-Битрикс. Как одиночные видео так и серии видеоуроков Перейти на канал
Совсем скоро выйдет видеокурс по разработке доски объявлений с мобильным приложением. Подписывайтесь и будьте в курсе: