Автоматический импорт csv

#
Re: Автоматический импорт csv
В последнее время импорт  (который ранее работал, примерно как во втором сообщении) перестал работать? Не пойму в чем дело.  Можно актуальный скрипт показать?

Товар заводится новый, но цена не проставляется и количество тоже. Хотя склад указывается (как было и раньше)
#
Re: Автоматический импорт csv
Вероятно вы не выполняете проводки после импорта $Shop_Item_Import_Csv_Controller->postAll();
«Не выходи из комнаты, не совершай ошибку…»
#
Re: Автоматический импорт csv
Да. Дело в этом.
После $Shop_Item_Import_Csv_Controller->import();

Нужно было добавить  $Shop_Item_Import_Csv_Controller->postAll();

Спасибо техподдержке.
#
Re: Автоматический импорт csv
В последнем сообщении на предыдущей странице пример перехода по шагам, редирект работает только в браузере. В cron не работает. Останавливается на первой сотне.
#
Re: Автоматический импорт csv
да, у меня так же стало что возможно делать? В автомате обрабатывает только то количество, которое указано в переменной step
Модератор
#
Re: Автоматический импорт csv
SlavaRom,
Dremlin,
а как он у вас в cron должен работать? какие вы там подразумеваете редиректы?
#
Re: Автоматический импорт csv
Ну я брал это скрипт, который автоматически импортирует CSV  и запускал его через строку планировщика. Он регулярно обновлял остатки и товары.
Через обращение по адресу
Модератор
#
Re: Автоматический импорт csv
Dremlin,
запускали - это отлично, но никаких редиректов там не будет. Указывайте заведомо большое значение в step
#
Re: Автоматический импорт csv
Выводит в итоге
Key 'count_insert_item' in 'ru' language does not exist for model 'shop_item'. — 0
Key 'count_update_item' in 'ru' language does not exist for model 'shop_item'. — 0
Key 'create_catalog' in 'ru' language does not exist for model 'shop_item'. — 0
Key 'update_catalog' in 'ru' language does not exist for model 'shop_item'. — 0


как понять, что и где идет не так, файл простой, сделал из двух строк, поля артикул и количество, файл открывается, работает, ничего не обновляет, нужно обновить остатки товаров.


Сам код
<?php
@ini_set('display_errors', 1);
error_reporting(E_ALL);

@set_time_limit(90000);

/* Подключаем основные классы */
require_once(dirname(__FILE__) .'/'.'bootstrap.php');

// Проверка авторизации
Core_Auth::authorization('Shop'); // Если скрипт будет запускаться только из браузера - желательно расскоментировать эту строку. Для крона строка должна быть закомментирована!

if (!defined('CURRENT_SITE')){
   $oShop = Core_Entity::factory('Shop', Core_Array::getRequest('shop_id', 0));
   define('CURRENT_SITE', $oShop->site_id);
   $oSite = Core_Entity::factory('Site', CURRENT_SITE);
   Core::initConstants($oSite);
}
if (!defined('SITE_LOCAL')){
   $oSite = Core_Entity::factory('Site', CURRENT_SITE);
   define('SITE_LOCAL', $oSite->locale);
}

if(!isset($argv[1])){   
   define("AUTO_IMPORT", true);// идет запуск через браузер   
   $import_price_max_count = 100;
}
else{   
   define("AUTO_IMPORT_CRON", true);// идет запуск через крон
   $import_price_max_count = 9999999;// устанавливаем количество товара импортируемого за один (единственный) проход
}

// Инициализация переменных
$_REQUEST['shop_id'] = 1;
$_REQUEST['locale'] = 'UTF-8';
$_REQUEST['hostcms']['action'] = 'start_import';


// ВНИМАНИЕ! Оставьте в этом массиве только нужные Вам поля!
$aGetParam = array(
   // идентификатор родительской директории для выгрузки данных
   'shop_groups_parent_id' => 0,
   // дополнительный путь для изображений
   'import_price_load_files_path' => '',
   // максимальное время загрузки данных за один проход
   'import_price_max_time' => 20,
   // что делать со старыми картинками? 0 - не удалять, 1 - удалять
   'import_price_action_delete_image' => 0,
   // максимальное количество товаров, импортируемых за один проход
   'import_price_max_count' => $import_price_max_count,
   // первая строка - название полей?
   'firstlineheader' => 1,
   // входной файл
   'csv_filename' => 'ost_resanta.csv',
   // разделитель данных
   'import_price_separator' => ';',
   // ограничитель данных
   'import_price_stop' => '"',
   // действия над существующими товарами, 1 - обновить
   'import_price_action_items' => Core_Array::getGet('importAction', 1),
   // использовать событийную индексацию
   'search_event_indexation' => 0,
   
   // Основные свойства товаров, групп, а так же сервисные данные (ярлыки, дополнительные группы и прочее)
   
   // Название группы товаров
    //      'field0' => 'shop_groups_value',
   // CML идентификатор группы
    // 'field1' => 'shop_groups_cml_id',
   // CML идентификатор родительской группы
   //   'field2' => 'shop_shop_groups_parent_cml_id',
   // SEO Title для группы
   //   'field3' => 'shop_groups_seo_title',
   // SEO Description для группы
   //   'field4' => 'shop_groups_seo_description',
   // SEO Keywords для группы
   //   'field5' => 'shop_groups_seo_keywords',
   // Описание группы
   //   'field6' => 'shop_groups_description',
   // Путь для группы
   //   'field7' => 'shop_groups_path',
   // Название товара
   //   'field8' => 'shop_items_catalog_name',
   // Описание товара
   //   'field9' => 'shop_items_catalog_description',
   // Артикул товара
      'field10' => 'shop_items_catalog_marking',
   // Артикул родительского товара
   //   'field11' => 'shop_item_parent_mark',
   // Текст товара
   //   'field12' => 'shop_items_catalog_text',
   // Вес товара
   //   'field13' => 'shop_items_catalog_weight',
   // Тип товара
   //   'field14' => 'shop_shop_items_catalog_type',
   // Остаток товара на складе (Количество по старому)
   //'field15' => 'shop_items_catalog_rest',
   // Цена товара
   //   'field16' => 'shop_items_catalog_price',
   // Активность товара
   //   'field17' => 'shop_items_catalog_is_active',
   // Порядок сортировки товара
   //   'field18' => 'shop_items_catalog_order',
   // Путь для товара
   //   'field19' => 'shop_items_catalog_path',
   // Идентификатор налога товара
   //   'field20' => 'shop_tax_id',
   // Идентификатор валюты товара
   //   'field21' => 'shop_currency_id',
   // Название продавца товара
   //   'field22' => 'shop_sallers_name',
   // Название производителя товара
   //   'field23' => 'shop_producers_list_value',
   // Идентификатор единицы измерения товара
   //   'field24' => 'shop_mesures_id',
   // SEO Title товара
   //   'field25' => 'shop_items_catalog_seo_title',
   // SEO Description товара
   //   'field26' => 'shop_items_catalog_seo_description',
   // SEO Keywords товара
   //   'field27' => 'shop_items_catalog_seo_keywords',
   // Флаг "Индексировать" для товара
   //   'field28' => 'shop_items_catalog_indexation',
   // Флаг "Выгружать в Яндекс.Маркет" для товара
   //   'field29' => 'shop_shop_items_catalog_yandex_market_allow',
   // Флаг "Выгружать в Рамблер.Покупки" для товара
   //   'field30' => 'shop_shop_items_catalog_rambler_pokupki_allow',
   // Яндекс.Маркет BID
   //   'field31' => 'shop_shop_items_catalog_yandex_market_bid',
   // Яндекс.Маркет CID
   //   'field32' => 'shop_shop_items_catalog_yandex_market_cid',
   // Дата создания товара
   //   'field33' => 'shop_shop_items_catalog_date_time',
   // Дата начала публикации товара
   //   'field34' => 'shop_shop_items_catalog_putoff_date',
   // Дата окончания публикации товара
   //   'field35' => 'shop_shop_items_catalog_putend_date',
   // Изображение группы
   //   'field36' => 'shop_groups_image',
   // CML идентификатор товара
   //   'field37' => 'shop_items_cml_id',
   // артикул родительского товара (модификация)
   //   'field38' => 'shop_item_parent_mark',
   /* // Доп. Изображение товара 1
   //   'field39' => 'prop-218',
   // Доп. Малое Изображение товара 1
   //   'field40' => 'propsmall-218',
   // Доп. Изображение товара 2
   //   'field41' => 'prop-219',
   // Доп. Малое Изображение товара 2
   //   'field42' => 'propsmall-219',
   // Доп. Изображение товара 3
   //   'field43' => 'prop-220',
   // Доп. Малое Изображение товара 3
   //   'field44' => 'propsmall-220', */
   // Остаток товара на складе - Основной (Количество товара по новому)
      'field45' => 'warehouse-1'
);

$Shop_Item_Import_Csv_Controller = new Shop_Item_Import_Csv_Controller(Core_Array::getRequest('shop_id', 0), Core_Array::get($aGetParam, 'shop_groups_parent_id', 0));

$aConformity = array();

foreach ($aGetParam as $iKey => $sValue){
   if(mb_strpos($iKey, "field") === 0){
      $aConformity[] = $sValue;
   }
}



$iNextSeekPosition = Core_Array::getGet('seek', 0);

$Shop_Item_Import_Csv_Controller
   ->file(Core_Array::get($aGetParam, 'csv_filename'))
   ->encoding(Core_Array::get($aGetParam, 'locale', 'UTF-8'))
   ->csv_fields($aConformity)
   ->time(Core_Array::get($aGetParam, 'import_price_max_time'))
   ->step(Core_Array::get($aGetParam, 'import_price_max_count'))
   ->separator(Core_Array::get($aGetParam, 'import_price_separator'))
   ->limiter(Core_Array::get($aGetParam, 'import_price_stop'))
   ->imagesPath(Core_Array::get($aGetParam, 'import_price_load_files_path'))
   ->importAction(Core_Array::get($aGetParam, 'import_price_action_items'))
   ->deletePropertyValues(true)
   ->searchIndexation(Core_Array::get($aGetParam, 'search_event_indexation'))
;




if(!$iNextSeekPosition && Core_Array::get($aGetParam, 'firstlineheader', 0)){
   $fInputFile = fopen(Core_Array::get($aGetParam, 'csv_filename'), 'rb');
   @fgetcsv($fInputFile, 0, Core_Array::get($aGetParam, 'import_price_separator'), Core_Array::get($aGetParam, 'import_price_stop'));
   $iNextSeekPosition = ftell($fInputFile);
   fclose($fInputFile);
}


$Shop_Item_Import_Csv_Controller->seek = $iNextSeekPosition;
ob_start();

if(($iNextSeekPosition = $Shop_Item_Import_Csv_Controller->import()) !== FALSE){
   if($Shop_Item_Import_Csv_Controller->importAction == 0){
      $Shop_Item_Import_Csv_Controller->importAction = 1;
   }

   $iRedirectTime = 10;
   $InsertedItemsCount = Core_Array::getRequest('InsertedItemsCount', 0) + $Shop_Item_Import_Csv_Controller->getInsertedItemsCount();
   $UpdatedItemsCount = Core_Array::getRequest('UpdatedItemsCount', 0) + $Shop_Item_Import_Csv_Controller->getUpdatedItemsCount();
   $InsertedGroupsCount = Core_Array::getRequest('InsertedGroupsCount', 0) + $Shop_Item_Import_Csv_Controller->getInsertedGroupsCount();
   $UpdatedGroupsCount = Core_Array::getRequest('UpdatedGroupsCount', 0) + $Shop_Item_Import_Csv_Controller->getUpdatedGroupsCount();
   @header('Refresh: '.$iRedirectTime.'; URL=/auto_import_csv_resanta.php?'."shop_id=".Core_Array::getRequest('shop_id', 0)."&shop_group_id=".Core_Array::get($aGetParam, 'shop_groups_parent_id', 0)."&importAction=".$Shop_Item_Import_Csv_Controller->importAction."&seek=".$iNextSeekPosition."&InsertedItemsCount={$InsertedItemsCount}&UpdatedItemsCount={$UpdatedItemsCount}&InsertedGroupsCount={$InsertedGroupsCount}&UpdatedGroupsCount={$UpdatedGroupsCount}");
   
   showStat($Shop_Item_Import_Csv_Controller);
}
else{
   Core_Message::show(Core::_('Shop_Item.msg_download_price_complete'));
   showStat($Shop_Item_Import_Csv_Controller);
}

exit(ob_get_clean());

function showStat($Shop_Item_Import_Csv_Controller)
{
   echo Core::_('Shop_Item.count_insert_item') . ' &#151; <b>' . (Core_Array::getRequest('InsertedItemsCount', 0) + $Shop_Item_Import_Csv_Controller->getInsertedItemsCount()) . '</b><br/>';
   echo Core::_('Shop_Item.count_update_item') . ' &#151; <b>' . (Core_Array::getRequest('UpdatedItemsCount', 0) + $Shop_Item_Import_Csv_Controller->getUpdatedItemsCount()) . '</b><br/>';
   echo Core::_('Shop_Item.create_catalog') . ' &#151; <b>' . (Core_Array::getRequest('InsertedGroupsCount', 0) + $Shop_Item_Import_Csv_Controller->getInsertedGroupsCount()) . '</b><br/>';
   echo Core::_('Shop_Item.update_catalog') . ' &#151; <b>' . (Core_Array::getRequest('UpdatedGroupsCount', 0) + $Shop_Item_Import_Csv_Controller->getUpdatedGroupsCount()) . '</b><br/>';
}
?>
#
Re: Автоматический импорт csv
Как минимум не видим у вас выполнения проводок в конце импорта    $Shop_Item_Import_Csv_Controller->postAll();
«Не выходи из комнаты, не совершай ошибку…»
Авторизация