Добрый день! Проблема следующая, есть выгрузка из 1С, которая формирует csv файл и кладёт его в определённое место на фтп.
Каждый раз приходится запускать импорт со стороны магенты вручную. Неудобно... Может кто подскажет как запускать это импорт по расписанию
или сразу после обновления csv файла на фтп?
Как запустить стандартный профиль импорта по расписанию?
Как запустить стандартный профиль импорта по расписанию?
06.05.2010 14:46
Я использовал указанный ниже скрипт.
Сохраните его с именем Cron_Import.php и затем вызывайте с командной строки так:
wget -O - http://<ваш сайт>/Cron_Import.php/?files=<файл для импорта>.csv
Сохраните его с именем Cron_Import.php и затем вызывайте с командной строки так:
wget -O - http://<ваш сайт>/Cron_Import.php/?files=<файл для импорта>.csv
<?php //uncomment when moved to server - to ensure this page is not accessed from anywhere else //if ($_SERVER['REMOTE_ADDR'] !== '<your server ip address') { // die("You are not a cron job!"); //} require_once 'app/Mage.php'; umask(0); //$_SERVER['SERVER_PORT']='443'; Mage::app(); $profileId = 3; //put your profile id here $filename = Mage::app()->getRequest()->getParam('files'); // set the filename that is to be imported - file needs to be present in var/import directory if (!isset($filename)) { die("No file has been set!"); } $logFileName= $filename.'.log'; $recordCount = 0; Mage::log("Import Started",null,$logFileName); $profile = Mage::getModel('dataflow/profile'); $userModel = Mage::getModel('admin/user'); $userModel->setUserId(0); Mage::getSingleton('admin/session')->setUser($userModel); if ($profileId) { $profile->load($profileId); if (!$profile->getId()) { Mage::getSingleton('adminhtml/session')->addError('The profile you are trying to save no longer exists'); } } Mage::register('current_convert_profile', $profile); $profile->run(); $batchModel = Mage::getSingleton('dataflow/batch'); if ($batchModel->getId()) { if ($batchModel->getAdapter()) { $batchId = $batchModel->getId(); $batchImportModel = $batchModel->getBatchImportModel(); $importIds = $batchImportModel->getIdCollection(); $batchModel = Mage::getModel('dataflow/batch')->load($batchId); $adapter = Mage::getModel($batchModel->getAdapter()); foreach ($importIds as $importId) { $recordCount++; try{ $batchImportModel->load($importId); if (!$batchImportModel->getId()) { $errors[] = Mage::helper('dataflow')->__('Skip undefined row'); continue; } $importData = $batchImportModel->getBatchData(); try { $adapter->saveRow($importData); } catch (Exception $e) { Mage::log($e->getMessage(),null,$logFileName); continue; } if ($recordCount%20 == 0) { Mage::log($recordCount . ' - Completed!!',null,$logFileName); } } catch(Exception $ex) { Mage::log('Record# ' . $recordCount . ' - SKU = ' . $importData['sku']. ' - Error - ' . $ex->getMessage(),null,$logFileName); } } foreach ($profile->getExceptions() as $e) { Mage::log($e->getMessage(),null,$logFileName); } } } echo 'Import Completed'; Mage::log("Import Completed",null,$logFileName);
06.05.2010 16:52
К сожалению из-за своей технической безграмотности, так и не понял, как запустить импорт из командной строки:
(да и какой? магазин на вирт. хостинге, доступа по ssh нет).
Есть вариант запуска скрипта из командной строки браузера, если не сложно, приведите пример.
(да и какой? магазин на вирт. хостинге, доступа по ssh нет).
Есть вариант запуска скрипта из командной строки браузера, если не сложно, приведите пример.
06.05.2010 16:56
Например, csv файл находится у меня в папке /media/import/upload.csv
Скрипт в данным кодом и названием Cron_Import.php был создан в корне магазина.
Дальнейшие действия?
Скрипт в данным кодом и названием Cron_Import.php был создан в корне магазина.
Дальнейшие действия?
06.05.2010 18:10
Ничего не происходит увы... То есть поразительно быстро появляется надпись Import Completed.
А эффект нулевой (для эксперимента все наименования в файле были заменены на 3333, 4444 и т.д.)
Похоже не работает...
А эффект нулевой (для эксперимента все наименования в файле были заменены на 3333, 4444 и т.д.)
Похоже не работает...
06.05.2010 18:15
Может кто поможет на конкретном магазине всё это настроить? В долгу не останемся )))
06.05.2010 18:18
Скрипт в процессе работы делает записи в системный журнал Magento. Из анализа этих записей можно понять, на каком шаге происходит сбой скрипта.
06.05.2010 18:22
tburdin (06.05.2010 18:15) писал:
Может кто поможет на конкретном магазине всё это настроить? В долгу не останемся )))
Если через административную панель Magento импорт проводится успешно и без ошибок, могу настроить и импорт по расписанию. Будет стоить $100 и выполнено в течение дня. Контакты на личной странице.
16.05.2010 11:54
Импорт из панели администратора проходит отлично, без всяких ошибок и записи обновляются.
А скрипт добавляет только первую запись из .csv файла, а на остальные пишет в лог ошибку:
Если запустить повторно, то даже первую запись не обновляет, а в лог пишется ошибка:
Полный лог работы скрипта:
А скрипт добавляет только первую запись из .csv файла, а на остальные пишет в лог ошибку:
SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1
Если запустить повторно, то даже первую запись не обновляет, а в лог пишется ошибка:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '3-55641' for key 1
Полный лог работы скрипта:
2010-05-16T08:52:29+00:00 DEBUG (7): Import Started 2010-05-16T08:52:33+00:00 DEBUG (7): SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1 2010-05-16T08:52:33+00:00 DEBUG (7): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '3-55662' for key 1 2010-05-16T08:52:33+00:00 DEBUG (7): SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1 2010-05-16T08:52:34+00:00 DEBUG (7): SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1 2010-05-16T08:52:34+00:00 DEBUG (7): SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1 2010-05-16T08:52:34+00:00 DEBUG (7): Starting Mage_Dataflow_Model_Convert_Adapter_Io :: load 2010-05-16T08:52:34+00:00 DEBUG (7): Loaded successfully: "/home/domen/docs/var/import/import.csv" 2010-05-16T08:52:34+00:00 DEBUG (7): Starting Mage_Dataflow_Model_Convert_Parser_Csv :: parse 2010-05-16T08:52:34+00:00 DEBUG (7): Found 5 rows 2010-05-16T08:52:34+00:00 DEBUG (7): Starting catalog/convert_adapter_product :: parse 2010-05-16T08:52:34+00:00 DEBUG (7): Import Completed
22.05.2010 17:36
В скрипте действительно были ошибки (правда, диагностические сообщения были не такие, какие вы указали).
Новая версия скрипта здесь: Magento: модуль импорта товаров через cron
Попробуйте её - может, поможет.
Если нет - могу решить проблему на платной основе в индивидуальном порядке.
Новая версия скрипта здесь: Magento: модуль импорта товаров через cron
Попробуйте её - может, поможет.
Если нет - могу решить проблему на платной основе в индивидуальном порядке.