Автор Тема: Контроллер (1.6) импорта товаров в ajax  (Прочитано 500 раз)

02 Октябрь 2019, 12:27:32
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Доброе время суток, Хочу   стандартный  контроллер импорта сделать с AJAX чтобы  можно было загружать большие csv, подскажите в каком  месте  происходит
открытие csv  (чтобы  я  смог  разбить файл на части и выгружать к примеру  построчно с самим сохранением конфигурации заголовков таблицы) или  мне  в классах искать.
Готовый результ обязуюсь опубликовать.
Заранее благодарен.
02 Октябрь 2019, 13:44:40
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Там же уже есть метод Ajax - public function ajaxProcessuploadCsv()
02 Октябрь 2019, 13:48:29
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 16672
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Загрузка файла в  ajaxProcessuploadCsv().
Обработка данных в разных функциях, см. postProcess().
Вам нужно будет переделывать функции иморта данных.
02 Октябрь 2019, 14:40:17
Ответ #3
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
функция 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 ошибку
02 Октябрь 2019, 15:04:06
Ответ #4
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Ребята
вроде догнал  поправьте  если  ошибаюсь (я  не  супер прогер)
функцию 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++)
{
02 Октябрь 2019, 15:40:09
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Файл загружаете один. Из него имопртируюеьте N кол товаров и передаете указатель на последний товар+1. Запускаете цикл заново до полного импорта. Примерно так
function import(&$file, &$product_num = 0, &$limit = 0) {
    while (($raw_prod = $getNextProduct($product_num)))
{
$product_num++;

//limits for Ajax import
if ($limit)
{
04 Октябрь 2019, 16:04:02
Ответ #6
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Ребята  подскажите  --- белый  экран  не  пишет  ошибку

    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);
    }

04 Октябрь 2019, 17:21:25
Ответ #7
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
04 Октябрь 2019, 17:23:33
Ответ #8
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
++$current_steper = $current_steper + $post_limited; исправил  $current_steper = $current_steper + $post_limited+1;
Но  импорт не происходит
04 Октябрь 2019, 17:50:28
Ответ #9
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Поправил код но получаю  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