Импорт / разбор XML из URL в Magento - PullRequest
1 голос
/ 05 января 2011

У меня есть URL, который содержит XML продуктов.

Я собираюсь проанализировать содержимое, а затем импортировать детали как продукты в Magento.

Возможно ли это, и если да, то какие шаги мне нужно сделать, чтобы это осуществить?

Спасибо

РЕДАКТИРОВАТЬ:

import_products.php

require_once('app/Mage.php');

class import_products extends Mage_Core_Model_Abstract
{

 public static function url_contents($url)
 {
   $crl = curl_init();
   $timeout = 5;
   curl_setopt ($crl, CURLOPT_URL,$url);
   curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
   $ret = curl_exec($crl);
   curl_close($crl);
   return $ret;
}

}

import.php

<code>require_once('import_products.php');

$app = Mage::app('default'); 
$product = Mage::getSingleton('catalog/product');

$objDOM = new DOMDocument();
$objDOM->load("http://www.example.com/products.xml");

$note = $objDOM->getElementsByTagName("car");
// for each note tag, parse the document and get values for
// tasks and details tag.

foreach( $note as $value )
{
  $car_ids = $value->getElementsByTagName("Car_ID");
  $car_id  = $car_ids->item(0)->nodeValue;

  $makes = $value->getElementsByTagName("Make");
  $make  = $makes->item(0)->nodeValue;

  $models = $value->getElementsByTagName("Model");
  $model = $models->item(0)->nodeValue;

  $descriptions = $value->getElementsByTagName("Description");
  $description = $descriptions->item(0)->nodeValue;

  $short_descriptions = $value->getElementsByTagName("Specification");
  $short_description = $short_descriptions->item(0)->nodeValue;

  $prices = $value->getElementsByTagName("Price");
  $price  = $prices->item(0)->nodeValue;

  $simple = 'simple';
  $product->setAttributeSetId(4);
  $product->setSku($task);
  $product->setName($detail);
  $product->setTypeId($simple);
  $product->setPrice($price);
  $product->setValue($price);
  $product->setDescription($description);
  $product->setShortDescription($short_description);
  $product->setWeight(100);
  $product->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE);
  $product->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
  $product->setTaxClassId(2); 
  $product->setStockData(array(
        'is_in_stock' => 1,
        'qty' => 99999
  ));

  try {
     $product->save();
 echo "Saved";
  }
  catch (Exception $ex) {
      echo "<pre>".$ex."
";} // echo" $ car_id :: $ make :: $ model :: $ description :: $ short_description :: $цена";}

1 Ответ

3 голосов
/ 05 января 2011

вы можете получить параметр в Magento и использовать простой xml, чтобы превратить строку в xml

$xmlstr = self::XML_DECLARATION . urldecode($this->getRequest()->getParam('paramName');
  try {
      $xml = simplexml_load_string($xmlstr);
  }
  catch(Exception $ex) {
      echo "Unable to process xml file because of the following error<br /><br /> $ex";
      exit;
  }

если это файл, который вы пытаетесь получить, вы можете настроить php-файл со следующим кодом, чтобы получить содержимое URL

function get_url_contents($url){
$crl = curl_init();
$timeout = 5;
curl_setopt ($crl, CURLOPT_URL,$url);
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
$ret = curl_exec($crl);
curl_close($crl);
return $ret;

}

Вы можете использовать эту функцию, а затем, где в приведенном выше у нас было

$xmlstr = self::XML_DECLARATION . urldecode($this->getRequest()->getParam('paramName');

Вы должны быть в состоянии сделать это

$xmlstr = self::XML_DECLARATION . get_url_contents('http://urlhere.com/xml');

Тогда вы могли бы использовать простой XML и назначить узлы массиву продуктов, где вы могли бы иметь коллекцию продуктов, а затем выполнить цикл по ним и программно создать продукты в Magento с чем-то вроде этого, очевидно, изменив значения, жестко запрограммировано для всего, что вам может понадобиться.

    $product = Mage::getSingleton('catalog/product');

    // Build the product
    $product->setSku($productData['sku']);
    $product->setAttributeSetId(26);
    $product->setTypeId('simple');
    $product->setName($productData['description']);
    $product->setCategoryIds(array(162)); 
    $product->setWebsiteIDs(array(1)); 
    $product->setDescription($productData['description']);
    $product->setShortDescription($productData['description']);
    $product->setPrice($productData['price']); # Set some price
    $product->setWeight(4.0000);

    $product->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE);
    $product->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
    $product->setData('is_salable', '1');
    $product->setTaxClassId(2); # My default tax class
    $product->setStockData(array(
            'is_in_stock' => 1,
            'qty' => 99999
    ));

    try {
        $product->save();
    }
    catch (Exception $ex) {
        //Handle the error
    }
...