Контроллер (1.6) импорта товаров в ajax

Автор Pascal2019, 02 октября 2019, 12:27:32

« назад - далее »

Pascal2019

Доброе время суток, Хочу   стандартный  контроллер импорта сделать с AJAX чтобы  можно было загружать большие csv, подскажите в каком  месте  происходит
открытие csv  (чтобы  я  смог  разбить файл на части и выгружать к примеру  построчно с самим сохранением конфигурации заголовков таблицы) или  мне  в классах искать.
Готовый результ обязуюсь опубликовать.
Заранее благодарен.

Mr.Sen

Там же уже есть метод Ajax - public function ajaxProcessuploadCsv()

Adik

Загрузка файла в  ajaxProcessuploadCsv().
Обработка данных в разных функциях, см. postProcess().
Вам нужно будет переделывать функции иморта данных.

Pascal2019

функция productImport() Меня интересует как втиснутся в функцию импорта в бд?чтоб сразу не весь csv  отпавлялся  потому как получаю 502 bad gateway а отправлять к примеру по  сто  записей ну и  выводить динамически прогресс для наглядности.
Как  я  понял в переменной $line хранятся строка из  CSV
Из всего я понял что мне  нужно динамически разделить файл на части и к примеру подставлять по 100 строк отдельным файломв $handle = $this->openCsvFile();
или разбивать цикл

for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++)


Сама  суть всего того чтобы  я не  ловил 502 ошибку

Pascal2019

Ребята
вроде догнал  поправьте  если  ошибаюсь (я  не  супер прогер)
функцию openCsvFile() поправляю так чтобы передавать в нее параметр адрес файла типа file_XX.csv (file_1.csv,file_2.csv итд)
далее в productImport()
цикл запихую в цикл (приблезительная конструкия)
for ($current_file = 0; openCsvFile('file_'+$current_file+'.csv'); $current_file++)
{

for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++)
{

coder

Файл загружаете один. Из него имопртируюеьте N кол товаров и передаете указатель на последний товар+1. Запускаете цикл заново до полного импорта. Примерно так
function import(&$file, &$product_num = 0, &$limit = 0) {
    while (($raw_prod = $getNextProduct($product_num)))
{
$product_num++;

//limits for Ajax import
if ($limit)
{

Pascal2019

Ребята  подскажите  --- белый  экран  не  пишет  ошибку


    public function productImport()
{
$this->receiveTab();
$handle = $this->openCsvFile();
$default_language_id = (int)Configuration::get('PS_LANG_DEFAULT');
$id_lang = Language::getIdByIso(Tools::getValue('iso_lang'));
if (!Validate::isUnsignedId($id_lang))
$id_lang = $default_language_id;
AdminImportController::setLocale();
$shop_ids = Shop::getCompleteListOfShopsID();



$line_count = 0;
$limit = 50;
$current_steper =0;
while (count($line)  ==  $steper) {   
$limit = $post_limited + $current_line ;
for ($current_line = $current_steper ; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++) {
$i++;
if ($i > $limit) {
break;
}
else
{
$steper++;

// здесь  Цикл импорта

}

} //for
++$current_steper = $current_steper + $post_limited;
$i = 0;
}
// for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++) {}
$this->closeCsvFile($handle);
    }


mAgency

Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

Pascal2019

++$current_steper = $current_steper + $post_limited; исправил  $current_steper = $current_steper + $post_limited+1;
Но  импорт не происходит

Pascal2019

Поправил код но получаю  19 шт ошибок от модуля 
ЦитироватьГенератори BOSCH (ID: No ID) не может быть сохранен(а)
по факту импортировано  0 товаров

$limit = 50;
  $steper = 0;
while (count($line)  ==  $steper) { 
$i = 0;
for ($current_line = $steper ; $line = fgetcsv($handle, MAX_LINE_SIZE, $this->separator); $current_line++) {
if ($i > $limit) {
break;
}
else
{
$steper++;
$i++;
//Start import