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


Фильтрация до импорта (catalogfill2)

  • Можно ли как-то сделать так, чтобы при импорте таблицы xls загружались только те товары, у которых в колонке "На складе" значение > 0.
    alt text
    Конфиг:

    <?php
    
    //разбивка по столбцам при импорте и экспорте (content|tv|category)
    $cf_config['content_row'] = array(
        array('Артикул',array(6,'tv')),
        array('Основная категория товара',array(4,'category')),
        array('Наименование',array('pagetitle','content')),
        array('Описание',array('content','content')),
        array('Производитель',array(5,'tv')),
        array('Артикул производителя',array(19,'tv')),
        array('Цена (Розница)',array(8,'tv')),
        array('Можно купить',array(15,'tv')),
        array('Размер/Цвет',array(18,'tv')),
        array('Материал',array(21,'tv')),
        array('Батарейки',array(20,'tv')),
        array('Упаковка',array(7,'tv')),
        array('Вес (брутто)',array(22,'tv')),    
        array('Фотогрфия 1',array(4,'tv')),
        array('Фотогрфия 2',array(10,'tv')),
        array('Фотогрфия 3',array(11,'tv')),
        array('Фотогрфия 4',array(12,'tv')),
        array('Фотогрфия 5',array(13,'tv'))
    );
    
    //значения по умолчанию при импорте или проверка при экспорте
    $cf_config['imp_content_default'] = array(
        'content' => array(
            'published' => 1,
            'template' => 2
            //'createdon' => strtotime("now")
        ),
        'tv' => array(
            //7 => 0
        )
    );
    
    //первая строка - названия полей
    $cf_config['include_captions'] = true;
    
    //число товаров импортируемых за один раз (загрузка по группам). 0 - не ограничивать.
    $cf_config['batch_import'] = 1000;//300
    
    //разбивать по категориям
    $cf_config['include_categories'] = true;
    
    //удалять дочерние категории при очистке и обновлении каталога
    $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'] = true;
    
    //удалять HTML-теги при экспорте
    $cf_config['exp_strip_tags'] = false;
    
    //автоматически генерировать псевдоним (alias) при импорте
    //false - выключено; true - генерировать с переводом в транслит; 'notranslit' - генерировать без перевода в транслит.
    $cf_config['imp_autoalias'] = true;
    
    //Изменить значения поля для всех вложенных товаров до начала импорта.
    //Например можно отменить публикацию для всех товаров и публиковать только те, которые есть в новом прайс-листе.
    //первый массив - какие поля и на какие значения менять, второй массив - условия которые нужно проверять (можно сделать пустым)
    $cf_config['imp_before_change'] = '[{"deleted":1},{}]';//[{"deleted":1},{}];'[{"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'] = 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');
        */
    
        /*
        $img_path = "img/photos/";
        
        if(!empty($output_arr['tv'][4])){ $output_arr['tv'][4] = $img_path.$output_arr['tv'][4]; }  
        if(!empty($output_arr['tv'][10])){ $output_arr['tv'][10] = $img_path.$output_arr['tv'][10]; }   
        if(!empty($output_arr['tv'][11])){ $output_arr['tv'][11] = $img_path.$output_arr['tv'][11]; }
        if(!empty($output_arr['tv'][12])){ $output_arr['tv'][12] = $img_path.$output_arr['tv'][12]; }
        if(!empty($output_arr['tv'][13])){ $output_arr['tv'][13] = $img_path.$output_arr['tv'][13]; }
        if(!empty($output_arr['tv'][14])){ $output_arr['tv'][14] = $img_path.$output_arr['tv'][14]; }
        */
    
    
    
    
        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;
    }
    
    ?>
    

    Еще вопрос, [{"deleted":1},{}], всегда вручную очищать корзину? Нельзя автоматизировать процесс при импорте?
    modx 2.5.8, shk 3, catalogfill2

  • Можно ли как-то сделать так, чтобы при импорте таблицы xls загружались только те товары, у которых в колонке "На складе" значение > 0.

    Можно. В функции фильтрации проверяйте значение и возвращайте пустой массив когда не нужно импортировать.
    Второй вопрос не понял.

  • Можно небольшой пример функции фильтрации?
    А по второму вопросу:
    условие

    $cf_config['imp_before_change'] = '[{"deleted":1},{}]';
    

    При импорте, товары, которых нет в новой таблице, удаляются, но не очищается корзина (ресурсы зачеркнуты красным). Вот вопрос, чтобы вручную всегда не очищать, можно ли сделать этот процесс автоматически?

  • Пример:

    //функция для фильтрации значений при ИМПОРТЕ
    function filter_import($value_arr){
        $output_arr = $value_arr;
    
        if (isset($output_arr['tv'][10]) && intval($output_arr['tv'][10]) === 0) {
            return array();
        }
        return $output_arr;
    }
    

    10 - ID поля "На складе".

    При импорте, товары, которых нет в новой таблице, удаляются, но не очищается корзина (ресурсы зачеркнуты красным). Вот вопрос, чтобы вручную всегда не очищать, можно ли сделать этот процесс автоматически?

    Корзина хранится в сесии, т.е. очищается после того как человек закрывает браузер. Функции очищения корзины после импорта нет. Иначе где-то в документации было бы про это написано.

  • Мы про одну и туже корзину говорим? Я про ту, что хранит удаленные ресурсы, а не корзина на сайте.
    alt text

  • Мы про одну и туже корзину говорим? Я про ту, что хранит удаленные ресурсы, а не корзина на сайте.

    Я про другую. Не понял в чём проблема нажать кнопочку. Тем более это для вашей безопасности, удаленные можно восстановить при необходимости.

  • В функции импорта прописал так

    if (isset($output_arr['tv'][15]) && intval($output_arr['tv'][15]) === 0) {
            return array();
        }
    

    Результат:

    alt text

  • Если Вы правите код, то за результат я не отвечаю.
    Есть такое предложение:
    http://forum.modx-shopkeeper.ru/topic/954/для-тех-кто-уверен-что-делает-всё-правильно-но-что-то-не-работает-а-должно

  • Участник @andchir написал в Фильтрация до импорта (catalogfill2):

    Пример:

    //функция для фильтрации значений при ИМПОРТЕ
    function filter_import($value_arr){
        $output_arr = $value_arr;
    
        if (isset($output_arr['tv'][10]) && intval($output_arr['tv'][10]) === 0) {
            return array();
        }
        return $output_arr;
    }
    

    10 - ID поля "На складе".

    Так вы же пример этот и дали.

 

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

  • Что нового в Shopkeeper 4.0.3:

    Исправлено некорректное определение языка по умолчанию В настройках в админке скрываются пароли. Добавлена возможность загружать картинки для категорий. shopkeeper.js - добавлена функция updateProductsPrice() для поддержки текстовых полей для цены. Twig-функции contentList() и includeContent() вынесены в отдельный класс. Добавлено событие "order.before_create". Сортировка всех полей типа контента перетаскиванием. Автоматическое сохранение сортировки полей при сохранении типа контента (не нужно нажимать на отдельную кнопку). В интерфейсе админа добавлено поле поиска для списка Composer-пакетов.

    Скачать можно на главной странице https://modx-shopkeeper.ru/

    Читать далее
  • Вот этот плагин:
    0_1550334109280_screenshot_022.png

    Вроде по умолчанию он выключен. Надо включить. Но плагин работает только на редактирование товаров, при удалении он делалать ничего не будет. Только что проверил кнопку, всё работает корректно, фильтры удаляются и добавляются, когда нужно. Но нужно очищать корзину после удаления товаров (возможно баг).

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

    @Andchir Если нажимаю кнопочку "Обновить значения", то в фильтрах появляются как раз те самые удаленные значения фильтра.. Потом приходится Ручками выбирать эти удаленные значения.
    вот так выглядит Управление фильтрами когда удаляешь ручками: https://yadi.sk/i/_zw64CGkZ_sAYg
    А вот так выглядит когда просто нажимаешь "Обновить значения": https://yadi.sk/i/7WFbXC6xV5sQAw (красным выделено, то что приходится постоянно удалять

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

    Участник @Jokerit написал в TagManager2 отображает в фильтре удаленные значения TV-полей:

    tmRefresh

    Так и не смог найти как включить

    Читать далее