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


Catalogfil не импортировать если нет в наличии

  • Подскажите как настроить импорт только тех товаров, которые есть в наличии. Второе: как настроить импорт, что бы товары в наличии публиковались, те которых нет, не публиковались.

  • Подскажите как настроить импорт только тех товаров, которые есть в наличии.

    В функции filter_import() проверять значение и возвращать null, если нет в наличии.

    Второе: как настроить импорт, что бы товары в наличии публиковались, те которых нет, не публиковались.

    Документацию читали? Там про это написано.

    Отмена публикации или изменение значения TV для товаров, которых нет в новом прайс-листе
    
    Пример:
    
    $cf_config['imp_before_change'] = '[{"published":0},{}]';
    
  • @andchir
    не публиковать с tv.available = 1.

    $cf_config['imp_before_change'] = '[{"published":0},{"tv.available":"1"}]';
    

    Всё равно публикует...

    Участник @andchir написал в Catalogfil не импортировать если нет в наличии:

    В функции filter_import() проверять значение и возвращать null, если нет в наличии.

    function filter_import($value_arr){
       $output_arr = $value_arr;
    
       if($output_arr['content']['available'] = "1")
       	$output_arr = null;
           return;
    }
    Попробовал так, не получилось.
  • Попробовал так, не получилось.

    А проверить код, погуглить - это слишком сложно? Я стараюсь давать только направление, чтобы человек сам что-то делал и это было бы более полезно для него.

    Вот пример:

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

    10 - это ID параметра наличия, который указан в конфигурации в параметре $cf_config['content_row'].

  • Участник @andchir написал в Catalogfil не импортировать если нет в наличии:

    Попробовал так, не получилось.

    А проверить код, погуглить - это слишком сложно? Я стараюсь давать только направление, чтобы человек сам что-то делал и это было бы более полезно для него.

    С первого дня использования Shopkeeper только и приходиться что то гуглить, ждать исправлений и.т.п. В итоге на протяжении всего своего существования Shopkeeper не представляет готовый продукт. Последний раз когда я спросил почему крошки цепляют названия из соседних категорий, мне сказали гуглить, смотреть демо сайт и.т.п., оказалось баг. В итоге работа не была сдана вовремя. Как только большинство багов было исправлено, появился Shopkeeper 4, т.е. на протяжении всего времени существования Shopkeeper 3 не был полноценным интернет-магазином. Shopkeeper 3 - это некий недоделанный конструктор.
    Дело в том, что стандартный функционал или простейшие готовые решения, надо вынести в отдельный раздел документации.

    И вот эта настройка не работает. 0 - в наличии, 1 - нет в наличии. Публикует всё.

    $cf_config['imp_before_change'] = '[{"published":0},{"tv.available":1}]';
    

    P.S.: Эта критика будет полезна и поможет делать интернет-магазин более качественным.

  • Последний раз когда я спросил почему крошки цепляют названия из соседних категорий, мне сказали гуглить, смотреть демо сайт и.т.п., оказалось баг.

    Как связаны хлебные крошки с шопкипером?

    Дело в том, что стандартный функционал или простейшие готовые решения, надо вынести в отдельный раздел документации.

    Не хотите этим заняться? Ждите доброго дядю. Хотя есть люди, которые помогают.

    И вот эта настройка не работает. 0 - в наличии, 1 - нет в наличии. Публикует всё.

    $cf_config['imp_before_change'] = '[{"published":0},{"tv.available":1}]';
    

    Нужны подробности. Покажите полный конфиг и файл, который импортируете.

    Эта критика будет полезна и поможет делать интернет-магазин более качественным.

    Критика полезна когда есть что-то конкретное. А лучше не критиковать, а сделать самому и поделиться решением. Именно из-за такого отношения Shopkeeper 3 заброшен. Большинство считает, что им кто-то должен.
    Кстати, специально для таких как вы создана такая страничка:
    http://forum.modx-shopkeeper.ru/topic/954/для-тех-кто-уверен-что-делает-всё-правильно-но-что-то-не-работает-а-должно

  • @andchir

    <?php
    
    //Название класса таблицы товаров в БД
    $cf_config['className'] = 'shopContent';
    //Название пакета таблицы товаров в БД
    $cf_config['packageName'] = 'shop';
    //Название поля ID родителя
    $cf_config['parent_field'] = 'resource_id';
    
    //разбивка по столбцам при импорте и экспорте (content|tv|category)
    $cf_config['content_row'] = array(
        array('Артикул',array('articul','content')),
        array('Наименование',array('pagetitle','content')),
        array('Цена',array('price','content')),
    	array('Страна',array('country','content')),
    	array('Состав',array('consist','content')),
    	array('Длина',array('size','content')),
    	array('Ширина',array('width','content')),
    	array('Высота',array('height','content')),
    	array('В наличии',array('available','content')),
    	array('Вес',array('weight','content'))
    );
    
    //значения по умолчанию при импорте или проверка при экспорте
    $cf_config['imp_content_default'] = array(
        'content' => array(
            'deleted' => 0,
            'published' => 1,
            'template' => 808
            //'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'] = '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'] = '[{"published":0},{"tv.available":"1"}]'; //'[{"published":1},{"tv.available":0}]';//'[{"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');
        */
        return $output_arr;
    }
    
    
    
    ?>
    

    0_1541545594374_e7c7fa8e-2527-48b7-b42b-ec36b0125466-image.png
    Наименование Цена Страна Состав Длина Ширина Высота В наличии
    Шоколад Алёнка 500 Россия Какао 0 0 0 1

    Шоколада нет в наличии, но он всё равно публикуется.

  • Шоколада нет в наличии, но он всё равно публикуется.

    Как у вас определяется, что его нет в наличии? Если про Алёнку, то наличие вижу - 1.

    Параметр $cf_config['imp_before_change'] работает для товаров, которых НЕТ В ПРАЙС-ЛИСТЕ. Об этом написано в комментарии.

    //Изменить значения поля для всех вложенных товаров до начала импорта.
    //Например можно отменить публикацию для всех товаров и публиковать только те, которые есть в новом прайс-листе.
    //первый массив - какие поля и на какие значения менять, второй массив - условия которые нужно проверять (можно сделать пустым)
    

    Поэтому нужно это симулировать, проверять наличие в функции и возвращать null. Но у вас в конфиге этого почему-то нет.

  • @andchir
    0 в наличии, 1 - нет в наличии

    '[{"published":0},{"tv.available":"1"}]'
    

    не публиковать, если available 1. Не так работает? Если их нет в прайс листе, то что с чем сравнивает этот параметр?

    Участник @andchir написал в Catalogfil не импортировать если нет в наличии:

    Поэтому нужно это симулировать, проверять наличие в функции и возвращать null. Но у вас в конфиге этого почему-то нет.

    Потому что, я так понимаю, это необходимо написать самостоятельно, т.к. готового решения нет?

  • Если их нет в прайс листе, то что с чем сравнивает этот параметр?

    Вы же дали скриншот и написали, что там есть товары, которых нет в наличии.

    Потому что, я так понимаю, это необходимо написать самостоятельно, т.к. готового решения нет?

    Да, вам надо писать самостоятельно, раз вы ничего не понимаете, что я пишу.

  • Участник @andchir написал в Catalogfil не импортировать если нет в наличии:

    Если их нет в прайс листе, то что с чем сравнивает этот параметр?

    Вы же дали скриншот и написали, что там есть товары, которых нет в наличии.

    Ну и почему он товары с 1 (tv.available:1)(нет в наличии) не делает published":0 - не опубликовано.

    Участник @andchir написал в Catalogfil не импортировать если нет в наличии:

    Да, вам надо писать самостоятельно, раз вы ничего не понимаете, что я пишу.

    function filter_import($value_arr){
        $output_arr = $value_arr;
        
        if(empty($output_arr['tv'][10])) {
            return null;
        }
        
        return $output_arr;
    }
    

    Вот это у меня не работает, я объяснил ведь, что он должен проверять на значение 1 или 0. Вы так объясняете, что легко запутаться. Я уж не говорю, что я не могу выгрузку сделать 3 день, пока мы тут общаемся, даже интересно сколько это продлиться. А вообще скачал книгу по php, что бы разобраться. Я так понимаю вам же это нужно, что бы я сам разобрался, ну ок.

  • Попробуйте такой конфиг.

    <?php
    
    //Название класса таблицы товаров в БД
    $cf_config['className'] = 'shopContent';
    //Название пакета таблицы товаров в БД
    $cf_config['packageName'] = 'shop';
    //Название поля ID родителя
    $cf_config['parent_field'] = 'resource_id';
    
    //разбивка по столбцам при импорте и экспорте (content|tv|category)
    $cf_config['content_row'] = array(
        array('Артикул',array('articul','content')),
        array('Наименование',array('pagetitle','content')),
        array('Цена',array('price','content')),
        array('Страна',array('country','content')),
        array('Состав',array('consist','content')),
        array('Длина',array('size','content')),
        array('Ширина',array('width','content')),
        array('Высота',array('height','content')),
        array('В наличии',array('available','content')),
        array('Вес',array('weight','content'))
    );
    
    //значения по умолчанию при импорте или проверка при экспорте
    $cf_config['imp_content_default'] = array(
        'content' => array(
            'deleted' => 0,
            'published' => 1,
            'template' => 808
            //'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'] = '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'] = '[{"published":0},{"available":"1"}]'; //'[{"published":1},{"tv.available":0}]';//'[{"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;
        
        // Импортируем, если наличие = 0 (0 = есть в наличии)
        if(!empty($output_arr['content']['available'])) {
             return null;
        }
    
        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;
    }
    
 

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

  • M

    @Andchir , спасибо. Проблема и правда была в одном из плагинов, который на другом сайте нормально работает

    Читать далее
  • Что нового в 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 (красным выделено, то что приходится постоянно удалять

    Читать далее