Импорт любых данных из xml в Opencart
Небольшой разбор - скрипт как можно считать xml файл и импортировать его в Opencart
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); посмотрите как сделано в админке при добавлении товара.
Если будет интерес к теме могу показать как делать импорт или обновление остатков или цен.