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


Экспорт/импорт данных из таблиц пакетов MIGX db через плагин CatalogFill

  • Во-первых в настройках системы отключить "log_deprecated".
    Далее очистить журнал ошибок и смотреть новые. Если будут ошибки, то нужно больше информации, чтобы сказать в чём причина. Показать куда хотите импортировать, какой конфиг и какой файл.

  • отключил, очистил
    далее http://joxi.ru/12MEdEvtloelG2 -> http://joxi.ru/VrwXwXZt7RN7Mm
    в журнале ошибок - пусто
    код настройки

    <?php
    
    //Название класса таблицы товаров в БД
    $cf_config['className'] = 'delivery_flight';
    //Название пакета таблицы товаров в БД
    $cf_config['packageName'] = 'delivery_schedule';
    //Название поля ID родителя
    $cf_config['parent_field'] = false;
    
    //разбивка по столбцам при импорте и экспорте (content|tv|category)
    $cf_config['content_row'] = array(
        array('ID',array('id','content')),
        array('Наименование',array('name','content')),
        array('Время',array('time','content')),
        array('Откуда',array('from','content')),
        array('Время в пути',array('duration','content')),
        array('Куда',array('to','content')),
        array('Время прибытия',array('arrival_time','content')),
        array('Стоимость',array('price','content')),
        array('Тариф',array('delivery_rate_id','content')),
        array('Сортировка',array('sort','content')),
    );
    
    //значения по умолчанию при импорте или проверка при экспорте
    $cf_config['imp_content_default'] = array(
        'content' => array(
            'deleted' => 0,
            'published' => 1,
            //'template' => 9
            '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'] = 300;
    
    //разбивать по категориям
    $cf_config['include_categories'] = false;
    
    //удалять дочерние категории при очистке и обновлении каталога
    $cf_config['delete_subcategories'] = true;
    
    //по какому полю проверять соответствие товара при обновлении. false - не проверять (очистка категории при обновлении).
    $cf_config['imp_chk_field'] = false;
    
    //проверять соответствие товара при обновлении по значению 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'] = true;
    
    //удалять 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'] = '';
    
    //тестирование конфигурации (без записи в БД). Отчёты -> Журнал ошибок.
    $cf_config['imp_testmode'] = true;
    
    //функция для фильтрации значений при ИМПОРТЕ
    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;
    }
    
    
    ?>
    

    shema пакета, для которого написана настройка

    <model package="delivery_schedule" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1">
        <object class="delivery_rate" table="delivery_rates" extends="xPDOSimpleObject">
            <field key="name" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
            <field key="color" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
            <field key="desc" dbtype="text" phptype="string" null="false" default="" />
            <field key="sort" dbtype="int" precision="10" phptype="integer" null="false" default="500"/>
    
            <field key="deleted" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="0" />
            <field key="published" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="1" />
            <field key="createdon" dbtype="datetime" phptype="datetime" null="true"/>
        </object>
        <object class="delivery_flight" table="delivery_flights" extends="xPDOSimpleObject">
            <field key="name" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
            <field key="from" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
            <field key="time" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
            <field key="duration" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
            <field key="to" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
            <field key="arrival_time" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
            <field key="price" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
            <field key="sort" dbtype="int" precision="10" phptype="integer" null="false" default="500"/>
    
            <field key="delivery_rate_id" dbtype="int" precision="10" phptype="integer" null="false" default="0"/>
    
            <field key="deleted" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="0" />
            <field key="published" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="1" />
            <field key="createdon" dbtype="datetime" phptype="datetime" null="true"/>
    
            <aggregate alias="Delivery_rate" class="delivery_rate" local="delivery_rate_id" foreign="id" cardinality="one" owner="foreign" />
        </object>
    </model>
    
  • //Название поля ID родителя
    $cf_config['parent_field'] = false;
    

    Почему так? В MIGXDB документы должны иметь родителя. Иначе как вы их добавляете/редактируете в админке?

  • Участник @Andchir написал в Экспорт/импорт данных из таблиц пакетов MIGX db через плагин CatalogFill:

    MIGXDB

    какие родители в элементах migx db?
    это элементы, которые к ресурсам никак не подвязаны!
    а редактируются они через CMP

  • а редактируются они через CMP

    Покажите скриншот. Не понял что за CMP. Но если и не подвязаны, оставьте значение, которое было.
    Вот мой скриншот:
    0_1565682115311_screenshot_179.png

  • @Andchir
    http://joxi.ru/GrqZwZ5i40xlqm

    "оставьте значение, которое было"

    • это какое значение и где его оставить?
  • это какое значение и где его оставить?

    Значение, которое было по умолчанию.

    //Название поля ID родителя
    $cf_config['parent_field'] = 'resource_id';
    
  • Участник @Andchir написал в Экспорт/импорт данных из таблиц пакетов MIGX db через плагин CatalogFill:

    resource_id

    и что это должно дать?
    как была ошибка 500 - так и есть

  • Добавьте поле и обновите структуру таблицы БД

    <field key="resource_id" dbtype="int" precision="10" phptype="int" null="false" index="index" />
    

    http://joxi.ru/GrqZwZ5i40xlqm

    Как вы открываете эту страницу, по какой ссылке? Обычно создается ТВ с типом ввода migxdb, в свойствах которого указывается название конфигурации.

  • @Andchir

    Как вы открываете эту страницу, по какой ссылке? Обычно создается ТВ с типом ввода migxdb, в свойствах которого указывается название конфигурации.

    это когда нужно, что-бы данные таблицы относились к какому-либо ресурсу, а когда нужны независимые данные - делают через CMP (описано как здесь http://jonybang.blogspot.com/2015/09/migx-db-modx.html )

  • Участник @Andchir написал в Экспорт/импорт данных из таблиц пакетов MIGX db через плагин CatalogFill:

    Добавьте поле и обновите структуру таблицы БД
    <field key="resource_id" dbtype="int" precision="10" phptype="int" null="false" index="index" />

    Добавил поле, всеравно ошибка 500

  • Если есть ошибка, значит где-то в журнале должно быть сообщение. Смотрите в админке в журнале ошибок или на сервере в логе PHP-ошибок.

  • @Andchir
    [23-Aug-2019 16:30:27 Europe/Moscow] PHP Fatal error: Uncaught Error: Call to a member function get() on null in /home/a0139615/domains/new.bistriki.com/public_html/core/components/catalogfill/model/catalogfill.class.php:459
    Stack trace:
    #0 /home/a0139615/domains/new.bistriki.com/public_html/core/components/catalogfill/processors/mgr/export.php(32): Catalogfill->csv_export('web')
    #1 /home/a0139615/domains/new.bistriki.com/public_html/core/model/modx/modprocessor.class.php(361): include('/home/a0139615/...')
    #2 /home/a0139615/domains/new.bistriki.com/public_html/core/model/modx/modprocessor.class.php(177): modDeprecatedProcessor->process()
    #3 /home/a0139615/domains/new.bistriki.com/public_html/core/model/modx/modx.class.php(1764): modProcessor->run()
    #4 /home/a0139615/domains/new.bistriki.com/public_html/core/model/modx/modconnectorresponse.class.php(144): modX->runProcessor('export', Array, Array)
    #5 /home/a0139615/domains/new.bistriki.com/public_html/core/model/modx/modconnectorrequest.class.php(86): modConnectorResponse->outputContent(Array)
    #6 /home/a0139615/ in /home/a0139615/domains/new.bistriki.com/public_html/core/components/catalogfill/model/catalogfill.class.php on line 459

  • @Andchir
    Исходя из ошибки выше:

    1. в ваш плагин было бы неплохо добавить проверку на существование выбранного ресурса, что-бы исключить появление данной ошибки
    2. вы собираетесь дорабатывать плагин для работы с данными MIGX db, которые не имеют связи с ресурсами, а "живут" в отдельной таблице и редактируются через CMP?
  • Я запишу это в план. Но когда будет сделано, не известно. Компонент создавался для каталогов, у которых категории это ресурсы MODX. Поэтому там нужно выбирать родителя.

 

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

  • @Yiliy

    то есть без имени

    Видимо потому что у вас отключено, а в XML алиаса я не увидел

    //автоматически генерировать псевдоним (alias) при импорте //false - выключено; true - генерировать с переводом в транслит; 'notranslit' - генерировать без перевода в транслит. $cf_config['imp_autoalias'] = false;

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

    Проблема была оказывается в том, что оно не видело
    <Title>pagetitle</Title>
    Я поменял на
    <Title><item>pagetitle</item></Title>
    и все импортировалось успешно но теперь в каталогах вместо url ресурсов отображается /сайт/каталог/.html
    то есть без имени и после перехода на страницу товара появляется ошибка 403

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

    Поменялся дизайн.
    Новая корзина, всплывающие окна и прочие фишки сверстаны. Нужно переподключить, разобраться с возможным конфликтом JS.
    Что, где и как лежит -- покажу.

    Скайп mas_hate

    Читать далее
  • В $cf_config['imp_xml_structure'] должен быть XML, который в файле повторяется. Также нужно настроить
    параметр $cf_config['imp_xml_itemsparent_path']. Покажите полный файл, который импортируете.

    Читать далее