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


CatalogFill и filter_export

  • Добрый день, нужно соединить 3 тв поля в поле pagetitle, пытаюсь делать через filter_export, но не хочет работать, глянул как делать для импорта

    tv 11 - Вес
    tv 6 - Цена
    подскажите в чем проблема, спасибо заранее, уже поразному вписывал значение и через $output_arr['tv']['6'] и просто название $output_arr['price'] вообще не хочет работать
    modx 2.7.1
    catalogfill 2.4.10-pl

    //функция для фильтрации значений при ЭКСПОРТЕ
    function filter_export($value_arr,$doc_id=0){
    	
        $output_arr = $value_arr;
        //var_dump($value_arr,$output_arr);
        //exit;
    	  if(isset($output_arr['pagetitle'])) {
    $output_arr['pagetitle'] = $output_arr['pagetitle'] . ' '. $output_arr[11]  . ' '. $output_arr[6];
    	 }
        return $output_arr;
    } 
    
  • При экспорте поля и значения ТВ параметров разделены, поэтому соединить можно только поля или ТВ отдельно. Поля с ТВ нельзя.

  • @Andchir спасибо за ответ, а никак их соединить нельзя будет? если например прямой sql запрос попробовать сделать?
    П.С., а где смотреть весь код который делаешь? например через print_r или var_dump?

  • Вы первый, кто хочет соединить при экспорте. Обычно соединяют и т.п. при импорте. Там есть возможность соединить поля и ТВ.

    П.С., а где смотреть весь код который делаешь? например через print_r или var_dump?

    Открывайте файл catalogfill.class.php в текстовом редакторе и ищите где вызывается функция filter_export().

  • @Andchir еще хотел спросить, как можно реализовать разделение столбцов при экспорте тип ввода ТВ param-edit, в экселе выводит видalt text нужно через разделитель || сделать 2 столбца и т.д., я понимаю что нужно через filter_export, можете подсказать, спасибо

  • нужно через разделитель || сделать 2 столбца и т.д.

    Создаете дополнительную колонку (можно несколько) после ТВ, значение которого нужно разделить. ID ТВ для такой колонки можно указать, тот которого не существует.

    //разбивка по столбцам при импорте и экспорте (content|tv|category)
    $cf_config['content_row'] = array(
        ...
        array('Параметры товара', array(2, 'tv')),
        array('Параметры товара - вторая колонка', array(2000, 'tv'))// Дополнительная колонка в экселе
    );
    

    Далее в конфигурационном файле разделяете с помощью функции filter_export().

    //функция для фильтрации значений при ЭКСПОРТЕ
    function filter_export($value_arr, $doc_id=0){
        $output_arr = $value_arr;
        if(!empty($output_arr[2])) {
            $tmp = explode('||', $output_arr[2]);// Разделяем строку, получаем массив
            if (count($tmp) >= 2) {
                $output_arr[2] = $tmp[0];
                $output_arr[2000] = $tmp[1];
            }
        }
        return $output_arr;
    }
    
  • Участник @Andchir написал в CatalogFill и filter_export:

    нужно через разделитель || сделать 2 столбца и т.д.

    Создаете дополнительную колонку (можно несколько) после ТВ, значение которого нужно разделить. ID ТВ для такой колонки можно указать, тот которого не существует.

    //разбивка по столбцам при импорте и экспорте (content|tv|category)
    $cf_config['content_row'] = array(
        ...
        array('Параметры товара', array(2, 'tv')),
        array('Параметры товара - вторая колонка', array(2000, 'tv'))// Дополнительная колонка в экселе
    );
    

    Далее в конфигурационном файле разделяете с помощью функции filter_export().

    //функция для фильтрации значений при ЭКСПОРТЕ
    function filter_export($value_arr, $doc_id=0){
        $output_arr = $value_arr;
        if(!empty($output_arr[2])) {
            $tmp = explode('||', $output_arr[2]);// Разделяем строку, получаем массив
            if (count($tmp) >= 2) {
                $output_arr[2] = $tmp[0];
                $output_arr[2000] = $tmp[1];
            }
        }
        return $output_arr;
    }
    

    работает отлично, спасибо

 

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

  • Я запишу это в план. Но когда будет сделано, не известно. Компонент создавался для каталогов, у которых категории это ресурсы MODX. Поэтому там нужно выбирать родителя.

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

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

    в ваш плагин было бы неплохо добавить проверку на существование выбранного ресурса, что-бы исключить появление данной ошибки вы собираетесь дорабатывать плагин для работы с данными MIGX db, которые не имеют связи с ресурсами, а "живут" в отдельной таблице и редактируются через CMP?

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

    @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

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

    @Dolce подскажите, как решили проблему? у меня тоже самое

    Читать далее