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


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 не создавался вовсе?

 

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

  • Если на Formit повесить хук на отправку данных (в конце списка хуков) в платежную систему и в этом хуке (сниппете) пытаться читать значения shk.id, shk.price, то они содержат значения предыдущего заказа.

    Всё в соответствии с документацией, так и задумано.

    Тоже самое, если вызывать отправку данных через плагин и событие OnSHKSaveOrder.

    А зачем в плагине читать значение плейсхолдера, если там есть переменная $order_id?

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

    Добрый день, коллеги.
    Использую MODx Rev 2.7.1, Shopkeeper 3.2.7.
    Вопрос следующий. Страница оформления заказа, вызываю FormIt, затем [[!$shopOrderFormCart]]. В форме заполняются все необходимые поля, для того чтобы передать в платежную систему. Если на Formit повесить хук на отправку данных (в конце списка хуков) в платежную систему и в этом хуке (сниппете) пытаться читать значения shk.id, shk.price, то они содержат значения предыдущего заказа. Тоже самое, если вызывать отправку данных через плагин и событие OnSHKSaveOrder. Пробовал из скрипта обновлять страницу, не помогает. Актуальная информация появляется в плейсхолдерах только если перенаправлять из страницы оформления заказа на другую html страницу и там читать эти плейсхолдеры. Как получить актуальные значения без пересылки на дополнительную страницу?
    Спасибо.

    Читать далее
  • Читать далее
  • А где скачать это чудо компонент?

    Читать далее