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


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;
    }
    
 

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

  • A

    @Andchir у меня не переходит к оплате после переделки. Я заявку в Яндекс сделал как у них в инструкции написано, что мне работа по старому протоколу нужна. В течении суток уже изменение произойдет, буду в итоге paykeeper2 использовать.

    Читать далее
  • Тут человек написал как переделать модуль оплаты от Яндекса на Shopkeeper 3
    http://forum.modx-shopkeeper.ru/topic/1261/paykeeper2-и-новый-api-яндекс-кассы/4

    Читать далее
  • Будет ли переписан модуль paykeeper2 для работы с Яндекс Кассой по новому API?

    Бесплатно нет. Я уже говорил, что Shopkeeper 3 (и всё что с ним связано) не будет развиваться. Компонент оплаты уже не продается. Но можете попробовать организовать сбор средств на эту работу. Нужно 5000 руб.

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

    Участник @Andchir написал в Подключение через Paykeeper2:

    В это компоненте нет поддержки кассовых аппаратов для Яндекс.Кассы. Поэтому он уже убран с продажи.

    А так же Яндекс Касса теперь стала работать по новому API по умолчанию, модуль для Omnipay новый API не поддерживает я так понял. @Andchir Будет ли переписан модуль paykeeper2 для работы с Яндекс Кассой по новому API?

    Читать далее