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


CatalogFill + MIGX (не shopkeeper)

  • Доброго времени суток!

    Прошу помощи в настройке catalogFill. Купил сие дополнение, разбираюсь с конфигурацией. Что качается обычных полей - тут все просто и ясно. Возникла проблема с экспортом/импортом поля MIGX.

    Задача и суть проблемы: у меня есть сайт со списков ресурсов (не shopkeeper), у каждого ресурса есть множество полей. Раньше это были простые TV, но скорость загрузки сайта оставляла желать лучшего (особенно страницы каталога с pdoResources). Сейчас все перевел в MIGX - создал новое поле "object_profile" с типом "migx" и в него, соответственно, добавил все остальные поля.

    Подскажите, как должен выглядеть файл конфигурации, чтобы был импорт/экспорт полей из MIGX-поля (не MIGXDB) и при этом файл на выходе разбивался на столбцы? Тут у меня 2 догадки: 1) собирать конфиг на базе "migx_catalog", 2) на базе default, но тогда по-идее нужны фильтры для импорта и экспорта.

    Буду признателен за ответы. Спасибо.

  • Подскажите, как должен выглядеть файл конфигурации, чтобы был импорт/экспорт полей из MIGX-поля (не MIGXDB) и при этом файл на выходе разбивался на столбцы?

    Поля MIGX в базе данных сохраняются как JSON-строка. Импортировать тоже нужно как JSON. Если в файле нужно чтобы это выглядело красиво, то нужно написать фильтр в функции "filter_import()" в конфиге. Так же для экспорта.

  • @Andchi, т.е., как я понимаю, за основу нужно брать файл конфига default?

    Если у меня поле MIGX имеет id 40, то файл будет выглядеть примерно так?

    <?php
    
    $cf_config['content_row'] = array(
        array('ID',array('pagetitle','content')),
        array('MIGX',array(40,'tv'))
    );
    
    $cf_config['imp_content_default'] = array(
        'content' => array(
            'template' => 4
        ),
        'tv' => array()
    );
    
    $cf_config['include_captions'] = true;
    $cf_config['batch_import'] = 0;
    $cf_config['include_categories'] = false;
    $cf_config['delete_subcategories'] = true;
    $cf_config['imp_chk_field'] = 'pagetitle';
    $cf_config['imp_chk_tvid_val'] = false;
    $cf_config['imp_if_not_exist'] = true;
    $cf_config['exp_strip_tags'] = false;
    $cf_config['imp_autoalias'] = true;
    $cf_config['imp_before_change'] = false;
    $cf_config['exp_delete_file'] = false;
    $cf_config['exp_csv_charset'] = 'UTF-8';
    $cf_config['imp_empty'] = true;
    $cf_config['imp_custom_processor'] = '';
    $cf_config['imp_xml_itemsparent_path'] = '';
    $cf_config['imp_xml_structure'] = <<<EOF
    <Good>
        <Kod>tv8</Kod>
        <Name>pagetitle</Name>
        <Options>
            <Stock>tv5</Stock>
            <Image>tv2</Image>
        </Options>
        <Prices>
            <RegularPrice>tv1</RegularPrice>
            <OldPrice>tv20</OldPrice>
        </Prices>
    </Good>
    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;
    }
    
    ?>
    

    А в фильтрах уже добавляю обработчики?

  • Я нашел на форуме такое решение:

    //функция для фильтрации значений при ЭКСПОРТЕ
    function filter_export($value_arr,$doc_id=0){
    $output_arr = $value_arr;    
    if(!function_exists("clearMIGX")) {
    function clearMIGX($input){
        $items = json_decode($input, true);
            foreach($items as $item){
    	$image = $item['image'];
    	$title = $item['title'];
    	$out .= $image.'||'.$title.',';
            }
        return mb_substr($out, 0, -1);
    }
    }
    //применяем функцию к TV с ID=37:
    if(isset($output_arr[37])) $output_arr[37] = clearMIGX($output_arr[37]);    
    return $output_arr;
    }
    

    Но оно добавляет все поля MIGX в один столбец с заголовком "MIGX" (берет из array('MIGX',array(40,'tv'))), с разделением ||, а каким образом можно под каждое TV создать свой столбец, при этом столбец MIGX не создавался вовсе?

 

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

  • Документация: https://modx-shopkeeper.ru/docs/shopkeeper-3/shopkeeper-3
    Там написано какие плейсхолдеры доступны.
    Если имеется ввиду цена одного товара, то [[+price]] - это цена без доп. параметров.

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

    Такой вопрос: как вывести цену без дополнительных атрибутов? В мини-корзине.

    Читать далее
  • в категорию assets/catalogfill/files/ экспорт происходит нормально.

    Что-то в вашем сообщении всё перемешано. Папки или категории? А если папки (с файлами), то какие у них могут быть id...
    Если появляется сообщение про категорию, то это имеется ввиду категория каталога (документ MODX).

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

    Добрый день!

    Искал такой функционал в настройках или в конфигах, найти не получилось. Суть такая: клиент может загружать файлы только в media/ (Источник файлов 1 Filesystem, но есть еще один с полным доступом в корень id 4), таким образом, при загрузке файлов CatalogFill не видит файлы. Возникакет ошибка о том что нет такого каталога. Создаю его в ФС. Загрузка не происходит. в категорию assets/catalogfill/files/ экспорт происходит нормально. Есть какие-то возможности переключить именно для catalogfill возможность загрузить в четверый источник без модификации самого компонента?

    Версия последняя, производил обновление сегодня.

    Заранее благодарен.

    Читать далее