Импорт любых данных из xml в Opencart

Небольшой разбор - скрипт как можно считать xml файл и импортировать его в Opencart

сентябрь 16 , 2018

XML (eXtensible Markup Language) - это очень популярный формат передачи данных. Преимущество это в того что все данные идут как вложенные элементы. Это похоже на html верстку.

Этот формат любят все агрегаторы, его используют для импорта/экспорта данных и т.д.

Преимущество XML в том что для его разбора со стороны php не надо никаких дополнительных библиотек, как это требует тот же xls формат. Что бы прочитать файл необходимо:

$xmlString = file_get_contents(DIR_SYSTEM . "filename.xml"); //считывание содержимого файла в переменную.

Далее с помощью SimpleXMLElement забираем весь xml в массив с которым уже очень удобно работать.

$xml = new SimpleXMLElement($xmlString); //в переменной $xml содержиться массив с данными xml файла

Далее с этими данными можно делать все что угодно.

Например недавно я публиковал статью как сделать выгрузку в розетку для Opencart. Так вот теперь есть задача прочитать этот же сгенерированный файл что бы забрать артикулы в массив для сравнения. Специфическая задача. Но разбор xml все тот же.

Весь код скрипта вот:

$rozetka_ids = array();
$xmlString = file_get_contents(DIR_SYSTEM . "rozetka_old.xml");
$xml = new SimpleXMLElement($xmlString);
foreach($xml->shop->offers->offer as $offer){
  foreach($offer->attributes() as $key => $off){
    if($key == "id"){
      $rozetka_ids[(string)$offer->name] = (string)$off;
    }
  }
}

Что еще мне нравится это скорость работы. Файл в 2.5МБ заходил в массив мгновенно. По задействованию оперативной памяти нет данных т.к. все отлично работает, не было нужны.

По сути, если делать импортирование то надо создать пару запросов в базу данных. Это не сложно. Опять же можно подготовить данные и загрузить через стандартные методы Opencart. Например, использовать $this->model_catalog_product->addProduct($data); посмотрите как сделано в админке при добавлении товара.

Если будет интерес к теме могу показать как делать импорт или обновление остатков или цен.

Расскажи друзьям!