Последние темы


CatalogFill - Как импортировать XML\JSON файл с товарами (только pagetitle и 1 tv поле(то же что и pagetitle)) по разным каталогам?

  • Ясненько =(
    В общем, я решил проблему с разделением на категории(просто с помощью python разсортировал все строки с n идентификатором в n.xml файл и импортировал по отдельности)
    Только вот с заполнением проблема.
    Старый файл был такого вида:

    <data>
      <Title>pagetitle</Title>
    </data>
    

    Вот так выглядит мой файл которым я хочу обновить импортированные ранее товары(не добавляя новых товаров а только собрав из файла нужные строки с данными и импортировав их к уже созданным старым файлом товарам):

    <data>
    <Color>
         <Color1/>
         <Color4>Brown</Color4>
         <Color5>Cloudy Gray</Color5>
      </Color>
      <Price>4.75</Price>
      <Title>Название товара</Title>
      <bonus_info>
        <bonus_info1>blabla</bonus_info1>
        <bonus_info2>blabla</bonus_info>
      </bonus_info>
    </data>
    

    Где 1 <data> на 1 строку
    Вот мой конфиг:

    <?php
    
    //разбивка по столбцам при импорте и экспорте (content|tv|category)
    $cf_config['content_row'] = array(
        //array('Title',array(3,'tv')),
        //array('Price',array(2,'tv'))
    );
    //значения по умолчанию при импорте или проверка при экспорте
    $cf_config['imp_content_default'] = array(
        'content' => array(
            'deleted' => 0,
            'published' => 1,
            'description' => '',
            'template' => 5 // ID шаблона товара
            //'createdon' => strtotime("now")
            //'publishedon' => strtotime("now")
            //'pub_date' => strtotime("now")
            //'editedby' => 1
            //'editedon' => strtotime("now")
        ),
        'tv' => array(
            //7 => 0
        )
    );
    
    //первая строка - названия полей
    $cf_config['include_captions'] = true;
    
    //число товаров импортируемых за один раз (загрузка по группам). 0 - не ограничивать.
    $cf_config['batch_import'] = 500;
    
    //разбивать по категориям
    $cf_config['include_categories'] = false;
    
    //удалять дочерние категории при очистке и обновлении каталога
    $cf_config['delete_subcategories'] = true;
    
    //по какому полю проверять соответствие товара при обновлении. false - не проверять (очистка категории при обновлении).
    $cf_config['imp_chk_field'] = 'pagetitle';
    
    //проверять соответствие товара при обновлении по значению TV. Указать ID TV. false - не проверять (очистка категории при обновлении).
    $cf_config['imp_chk_tvid_val'] = false;
    
    //Добавлять товары, которые не найдены при обновлении по TV (imp_chk_tvid_val) или полю (imp_chk_field)
    $cf_config['imp_if_not_exist'] = false;
    
    //удалять HTML-теги при экспорте
    $cf_config['exp_strip_tags'] = false;
    
    //автоматически генерировать псевдоним (alias) при импорте
    //false - выключено; true - генерировать с переводом в транслит; 'notranslit' - генерировать без перевода в транслит.
    $cf_config['imp_autoalias'] = false;
    
    //Изменить значения поля для всех вложенных товаров до начала импорта.
    //Например можно отменить публикацию для всех товаров и публиковать только те, которые есть в новом прайс-листе.
    //первый массив - какие поля и на какие значения менять, второй массив - условия которые нужно проверять (можно сделать пустым)
    $cf_config['imp_before_change'] = false;//'[{"tv.inventory":0},{}]';//'[{"published":0},{"tv.pricename":"Поставщик1"}]';//false - для отмены
    
    //удалить файл после экспорта (скачивания)
    $cf_config['exp_delete_file'] = false;
    
    //кодировка CSV-файла при экспорте
    $cf_config['exp_csv_charset'] = 'UTF-8'; //'windows-1251'
    
    //Импортировать (обновлять) пустые значения
    $cf_config['imp_empty'] = true;
    
    //Имя файла процессора, который использовать для импорта. Если пусто, используется стандартный процессор "import".
    $cf_config['imp_custom_processor'] = '';
    
    //путь (xpath) в XML структуре до товаров
    $cf_config['imp_xml_itemsparent_path'] = '';//'/catalog/shop/offers';
    
    //Структура XML файла для импорта
    $cf_config['imp_xml_structure'] = <<<EOF
    <data>
    <Color>
         <Color1>tv 10<Color1/>
         <Color2>tv11</Color2>
         <Color3>tv12</Color3>
         <Color3>tv13</Color3>
      </Color>
      <Price>tv4</Price>
      <Title>pagetitle</Title>
      <bonus_info>
        <bonus_info1>tv7</bonus_info1>
        <bonus_info2>tv8</bonus_info2>
        <bonus_info3>tv9</bonus_info3>
      </bonus_info>
    </data>
    EOF;
    
    //тестирование конфигурации (без записи в БД). Отчёты -> Журнал ошибок.
    $cf_config['imp_testmode'] = false;
    
    //функция для фильтрации значений при ИМПОРТЕ
    function filter_import($value_arr){
        $output_arr = $value_arr;
        /*
        if(isset($output_arr['content']['pagetitle']))
            $output_arr['content']['pagetitle'] = mb_strtoupper($output_arr['content']['pagetitle'], 'UTF-8');
        */
        return $output_arr;
    }
    
    
    //функция для фильтрации значений при ЭКСПОРТЕ
    function filter_export($value_arr,$doc_id=0){
        $output_arr = $value_arr;
        //var_dump($value_arr,$output_arr);
        //exit;
        /*
        if(isset($output_arr['price']))
            $output_arr[1] = floatval($output_arr[1]) - 200;
        */
        return $output_arr;
    }
    
    ?>
    
  • Когда импортирую просто нажав обновить и выбрав в целом категорию выпадет ошибка Error -1 =(

  • В итоге ошибка -1 у меня появляется когда размер импортируемого файла = 4мб+(импортировал xml) и спустя несколько часов разделения файлов и импорта у меня получилось импортировать все необходимые данные...
    ...но я не знаю как было бы правильно импортировать файл с основными данными, что бы те добавились к уже импортируемым =(

    Подскажите пожалуйста в каком формате лучше всего импортировать файл (есть xml,json, могу конвертировать в любой необходимый)
    Пример товара в файле сообщением выше.

    Под лучше всего импортировать я имею ввиду, что бы можно было, к примеру, импортировать сразу файл целиком(у меня тот 120 мегабайт размером) и по разным категориям(только обновить уже импортированные по разным каталогам не удалив никаких категорий\ресурсов а если ресурс отсутствует - пропустить)

  • Подскажите пожалуйста в каком формате лучше всего импортировать файл (есть xml,json, могу конвертировать в любой необходимый)
    Пример товара в файле сообщением выше.

    Самый легковесный формат это CSV. Но ограничения по функционалу есть только у формата XML. Выбирайте любой другой, если нужен импорт категорий.

    Под лучше всего импортировать я имею ввиду, что бы можно было, к примеру, импортировать сразу файл целиком(у меня тот 120 мегабайт размером) и по разным категориям(только обновить уже импортированные по разным каталогам не удалив никаких категорий\ресурсов а если ресурс отсутствует - пропустить)

    Думаю, 120 МБ Вы можете импортировать только, если увеличите ограничения на память и на время выполнения скрипта у себя на сервере (в настройках PHP). Но такой объем лучше всего импортировать по Крону, там не должно быть ограничений на время исполнения скрипта. Можно запустить скрипт cron.php из командной стоки (подробнее в документации).

    <Color1>tv 10<Color1/>
    

    Тут две ошибки.

  • Да, пробел случайно поставил после tv. Не подскажете какая вторая ошибка?)
    Edited:
    Понял, слеш не там)
    Пересмотрел файл, походу когда копипастил случайно передвинул

  • Появилась проблемка - не обновляются товары когда я с помощью xml импортирую (в csv не получилось конвертировать) =(
    Есть 6 больших файлов по 500 мб, поставил в .htacces корневом

    php_value max_execution_time 86400
    php_value max_input_time 86400
    php_value upload_max_filesize 550M
    php_value memory_limit 512M
    

    Но при импорте через компонент оно спустя несколько минут выдает Error -1

    Пробовал в хостинге(через Cpanel) импортировать по крону: ввел

    0 * * * * "название моего сайта"core/components/catalogfill/cron.php 24(ID каталога) item import_file.xml
    

    Но товары не обновляются =(
    Подскажите пожалуйста где может быть загвоздка (если дело в рам, то можно увеличить - на хостинге 3 гб)

  • Смотрите сообщение ошибки в логах.

    Какая версия CatalogFill у вас?

  • 2.4.10-pl

  • Если понадобится, могу разделить по 200-300 мб, но чем больше размер(и меньше файлов) тем лучше.
    Что бы по пол часа не сидеть импортируя в каждый каталог.
    Кстати, в файлах идут все данные товаров в перемешку(в 1 файле есть данные ,к примеру, товаров которые в 11\13 и 23 каталогах а в 2 есть данные о 11\ 18 и 20 и т.д. - Всего каталогов 15, если бы было меньше вручную сделал бы разделив на маленькие куски, но я попробовал 50 мб импортировать и там тоже выпала error -1, так что задал вопрос здесь =( )

  • В чём проблема посмотреть журнал ошибок? Если ошибок нет в журнале в админке, значит они есть на сервере. Если не знаете где смотреть, спросите в службе поддержки.
    Если не хватает памяти на сервере, чем я могу помочь?

  • [2019-08-21 15:01:45] (ERROR in modProcessor::run @/путь к сайту/core/model/modx/modprocessor.class.php : 177) Flat file processor support, used for action import with path /путь к сайту/core/components/catalogfill/processors/mgr/import.php, is deprecated since version 2.7.0. - В логах
    Что это может значить?

  • На сайте установлен MODX 2.7.1
    Окей, сейчас отключу

  • Что это может значить?

    В настройках системы нужно отключить "log_deprecated". Это не важно.

  • Отключил log_deprecated и в логе осталась только ошибка кэша(PHP warning: Illegal string offset 'cls')
    Значит ошибка на стороне сервера и нужно .htaccess откредактировать?

  • Я долго мучался с настройкой htaccess, но постоянно выводится либо Error -1(до чистки кеша из includes), либо Error 500(после чистки). Так же первый раз когда сегодня заполнял...

    Строки которые добавил в htaccess были такого вида:
    php_value max_execution_time 86400
    php_value max_input_time 86400
    php_value upload_max_filesize 1G
    php_value post_max_size 1G
    php_value memory_limit 256M

    ... в логах выпала такая ошибка:
    [2019-08-28 07:32:04] (ERROR @ /home/мой никнейм/название сайта/core/xpdo/om/xpdoobject.class.php : 240)
    Array
    (
    [0] => HY000
    [1] => 2006
    [2] => MySQL server has gone away
    )
    [2019-08-28 07:32:04] (ERROR @ /home/asdqwrfc/ch-top.com/core/xpdo/om/xpdoobject.class.php : 1452)
    INSERT INTO modxji_session (id, access, data) VALUES ('61a6777f592d53fe3337e8cfcf05ec80a', 1566966724, 'modx.user.0.resourceGroups|a:1:1:{s:3:"web";a:1:0;s:1:"6";}}modx.user "6";}}modx.user..attributes|a:2:{s:3:"mgr";a:5:{s:16:"modAccessContext";a:1:{s:3:"web";a:1:{i:0;a:3:{s:9:"principal";i:0;s:9:"authority";s:1:"0";s:6:"policy";a:1:{s:4:"load";b:1;}}}}s:22:"modAccessResourceGroup";a:0:{s:17:

    • здесь куча символов *

    Array
    (
    [0] => HY000
    [1] => 2006
    [2] => MySQL server has gone away
    )
    Вылет случился из-за I/O(резко повысился до 2 мб) и крашнулось все.

    Подскажите пожалуйста глупому, это ошибка моя или со стороны хостинга?

  • Подскажите пожалуйста глупому, это ошибка моя или со стороны хостинга?

    У любого хостинга есть лимиты (в том числе размер БД), возможно вы их исчерпали. Обратитесь в службу поддержки хостинга. Когда база данных ломается это похоже, что закончилось место на диске.

    php_value memory_limit 256M

    Это маловато, если каталог очень большой (больше 20 тыс. товаров).

  • Размер БД на хостинговом тарифе - безлимит, впрочем я уже обратился и жду ответа с их стороны.

        php_value memory_limit 256M
    

    Как считаете, какое будет оптимальное количество под 200 к?
    Просто когда я ставил хоть 256 хоть 512 - в админ панели хостинга все равно могло сьедатся вплоть до 2.5 гб из 3.

  • Как считаете, какое будет оптимальное количество под 200 к?

    Под 200К и гигабайт не грех взять. Но импортировать надо по кусочкам, а не всё разом.

  • Кстати, я так и не понял, у Вас вообще хоть что-то импортируется или сразу ошибка и всё стоит?

 

Последние комментарии

  • Начать нужно с документации. Потом открыть файл конфигурации. Потом можно на форуме почитать темы, связанные с CatalogFill.

    Читать далее
  • R

    А как это сделать? Прошу прощения за тупые вопросы, но как я уже писал, я в этом не разбираюсь. Там тоже нужно настраивать файл конфигурации?

    Читать далее
  • Я тоже не знаю как это сделать. Компонент на такое не рассчитан. Можно конвертировать значение в нужный вам формат через функцию "filter_import".

    Читать далее
  • R

    Вы правы я даже не пытался потому что я в этом новичок и профан, я совершенно не понимаю что нужно править в конфигурационных файлах. Я готов заплатить за то что бы вы как специалист мне помогли и настроили все что нужно. Скрин прайслиста прилагаю. Если нужно еще что то предоставить напишите пожалуйста что нужно, потому что как я уже сказал я не разбираюсь в том что вам необходимо для того что бы оказать мне помощь. 0_1568555336747_123.jpg

    Читать далее