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


CatalogFill импорт xml

  • Хочу импортировать товары сайта партнера (на битриксе) на свой (modx revo). Товары предоставляют в формате xml. Пытаюсь настроить $cf_config['imp_xml_structure'] и прописать схему для импорта, но ничего не выходит. Сейчас схема такая:
    <<<EOF

    <offer id="{$id}" available="true">
    <url>{$id}</url>
    <tvprice>tv52</tvprice>
    <currencyId>BYN</currencyId>
    <categoryId>{$parent}</categoryId>
    <tvimg_service>tv4</tvimg_service>
    <name>{$pagetitle}</name>
    <description>{$description}</description>
    <stock_shipper>0</stock_shipper>
    <stock_minsk>0</stock_minsk>
    <param name="Размеры">tv55</param>
    <param name="Цвет">tv56</param>
    <param name="Бренды">tv57</param>
    <param name="Артикул">tv53</param>
    <param name="Поставщик">tv58</param>
    <param name="Материал">tv59</param>
    <param name="Тип нанесения">tv60</param>
    </offer>
    EOF;

    Ошибка в логе /catalogfill/model/catalogfill.class.php : 1529) PHP warning: Invalid argument supplied for foreach()

    При импорте через xls никаких проблем нет. НО товаров много и с таблицами возиться очень долго. А импортировать xml никак не выходит.

  • @santfather а зачем делать в xml? если вы можете открыть xml в формате csv через Miscrosoft Office и залить как обычный файл

  • @atrox пока вопрос стоит в xml. если ничего не выйдет - буду смотреть другие варианты

  • Участник @santfather написал в CatalogFill импорт xml:

    <description>{$description}</description>

    Это Вы сами придумали? Читайте документацию, смотрите примеры конфигурации.

    Должно быть так:

    <description>description</description>
    

    Но нужно видеть ваш исходный XML. Ещё нужно настроить параметр $cf_config['imp_xml_itemsparent_path'] - путь (xpath) в XML структуре до товаров.

  • @Andchir исходный xml товара на моем сайте или того что я получаю от партнера?

  • Участник @santfather написал в CatalogFill импорт xml:

    @Andchir исходный xml товара на моем сайте или того что я получаю от партнера?

    Желательно оба, но хотя бы тот который от партнера.

  • <?xml version="1.0" encoding="utf-8"?>
    
    <xml_catalog>
    	<shop>
    		<categories>
    			<category id="1367">Флешки и электроника</category>
    			<category id="1370" parentId="1367">Компьютерные и мобильные аксессуары</category>
    			<category id="1450" parentId="1367">Портативная аккустика</category>
    			<category id="1369" parentId="1367">Прочее</category>
    			<category id="1368" parentId="1367">Универсальные аккумуляторы</category>
    			<category id="1371" parentId="1367">Флешки</category>
    			
    		</categories>
    		<offers>
    			<offer id="354778" available="true">
    				<url>/catalog/ruchka-sharikovaya-1507049946/</url>
    				<price>1.74</price>
    				<currencyId>BYN</currencyId>
    				<categoryId>1373</categoryId>
    				<picture>b8d48b461d96a2b37ee5ffa28eda8c6.jpg</picture>
    				<name>Ручка шариковая</name>
    				<description>Ручка шариковая</description>
    				<stock_shipper>26255</stock_shipper>
    				<stock_minsk>0</stock_minsk>
    				<param name="Размеры">14 x ? 1 cm</param>
    				<param name="Цвет">03(Чёрный)</param>
    				<param name="Артикул">1008603</param>
    				<param name="Поставщик">Look in! (Macma)</param>
    				<param name="Материал">mеталл</param>
    				<param name="Тип нанесения">L2 (лазерная гравировка)</param>
    				<param name="Картинки">jpg1,jpg3... </param>
    			</offer>
    		</offers>
    	</shop>
    	</xml_catalog>
    
  • не добавляется ничего. только файл лога пухнет

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

  • @Andchir

    <?php
    
    //разбивка по столбцам при импорте и экспорте (content|tv|category)
    $cf_config['content_row'] = array(
    array('Цена',array(52,'tv')),
    array('Картинка',array(4,'tv')),
    array('Наименование',array('pagetitle','content')),
    array('Детальное описание',array('content','content')),
    array('На складе в Европе',array(4,'tv')),
    array('На складе в Минске',array(4,'tv')),
    array('Размеры',array(55,'tv')),
    array('Цвет',array(56,'tv')),
    array('Брэнд',array(57,'tv')),
    array('Артикул',array(53,'tv')),
    array('Производитель',array(58,'tv')),
    array('Материал',array(59,'tv')),
    array('Тип нанесения',array(60,'tv'))
    );
    
    //значения по умолчанию при импорте или проверка при экспорте
    $cf_config['imp_content_default'] = array(
        'content' => array(
            'published' => 1,
            'template' => 33
            //'createdon' => strtotime("now")
        ),
        'tv' => array(
            //7 => 0
        )
    );
    
    //первая строка - названия полей
    $cf_config['include_captions'] = true;
    
    //число товаров импортируемых за один раз (загрузка по группам). 0 - не ограничивать.
    $cf_config['batch_import'] = 0;
    
    //разбивать по категориям
    $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'] = 'tv53';
    
    //Добавлять товары, которые не найдены при обновлении по 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'] = false;//'[{"tv.inventory":0},{}]';//'[{"published":0},{"tv.pricename":"Поставщик1"}]';//false - для отмены
    
    //удалить файл после экспорта (скачивания)
    $cf_config['exp_delete_file'] = false;
    
    //кодировка CSV-файла при экспорте
    $cf_config['exp_csv_charset'] = 'windows-1251';//'UTF-8'
    
    //Импортировать (обновлять) пустые значения
    $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'] = 
    <<<EOF
    
    <offer id="{$id}" available="true">
    <url>id</url>
    <tvprice>tv52</tvprice>
    <currencyId>BYN</currencyId>
    <categoryId>parent</categoryId>
    <tvimg_service>tv4</tvimg_service>
    <name>pagetitle</name>
    <description>description</description>
    <stock_shipper>0</stock_shipper>
    <stock_minsk>0</stock_minsk>
    <param name="Размеры">tv55</param>
    <param name="Цвет">tv56</param>
    <param name="Бренды">tv57</param>
    <param name="Артикул">tv53</param>
    <param name="Поставщик">tv58</param>
    <param name="Материал">tv59</param>
    <param name="Тип нанесения">tv60</param>
    </offer>
    
    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;
    }
    
    ?>
    
  • @Andchir структуру каталога я загружу(хоть из xls). главное что бы товары из xml попадали в нужные категории...а для начала что бы хоть что то приходило, кроме ошибок в логфайл

  • <categoryId>parent</categoryId>
    

    Это работать будет только, если у вас в новой БД будут такие же ID как в файле.

    Почему не настроили параметр $cf_config['imp_xml_itemsparent_path']?

    Должно быть как-то так:

    //путь (xpath) в XML структуре до товаров
    $cf_config['imp_xml_itemsparent_path'] = '/xml_catalog/shop/offers';
    
 

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

  • Начать нужно с документации. Потом открыть файл конфигурации. Потом можно на форуме почитать темы, связанные с CatalogFill.

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

    А как это сделать? Прошу прощения за тупые вопросы, но как я уже писал, я в этом не разбираюсь. Там тоже нужно настраивать файл конфигурации?

    Читать далее
  • Я тоже не знаю как это сделать. Компонент на такое не рассчитан. Можно конвертировать значение в нужный вам формат через функцию "filter_import".

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

    Вы правы я даже не пытался потому что я в этом новичок и профан, я совершенно не понимаю что нужно править в конфигурационных файлах. Я готов заплатить за то что бы вы как специалист мне помогли и настроили все что нужно. Скрин прайслиста прилагаю. Если нужно еще что то предоставить напишите пожалуйста что нужно, потому что как я уже сказал я не разбираюсь в том что вам необходимо для того что бы оказать мне помощь. 0_1568555336747_123.jpg

    Читать далее