Es geht immer wieder darum, von Magento-Produktdaten einen Export zu machen und diese dann auf externen Domains oder Systemen anzuzeigen. Ich möchte heute zeigen, wie man Produktdaten von Magento live auf externen Systemen anzeigen kann.
Wir generieren auf dem Magento-Server über eine SQL-Abfrage den Output, der im JSON-Format ausgegeben wird. Auf dem externen System werden diese Daten eingelesen, formatiert und zur Anzeige gebracht.

Beispiel:
Toysonline.ch hat in seinem Shop eine Artikelgruppe zur Verwaltung der Produkte für die Startseite. Die Ausgabe im JSON-Format erreichen wir über sas Script json_data.php. Zum Test habe ich eine simple Ausgabe auf unserer Website über das Script Store_data.php realisiert.

Bitte beachten: Dies funktioniert nicht für Subdomains wie z.B. demo.ihredomain.de.


Umsetzung:

Wir beginnen mit der Formatierung der Produktdaten auf unserem Magento-Store.

<?php

  $JSON = $_GET['jsonp_callback'];
  $catID = 100; // Die 100 mit der gewünschten Artikelgruppen-ID ersetzen

	require_once 'app/Mage.php';

  Mage::app();
  Mage::getSingleton('core/session', array('name'=>'frontend'));

  $_category = Mage::getModel('catalog/category')->load($catID);
  $product = Mage::getModel('catalog/product');
  $helper = Mage::helper('catalog/image');

  $_productCollection = $product->getCollection()
    ->addAttributeToSelect('*')
    ->addCategoryFilter($_category)
    ->load();

  // Produktdaten für JSON-Format vorbereiten
  $json_products = array();
  foreach ($_productCollection as $_product) {
    $_product->getData();
    $json_products[] = array('name' => ''.$helper->htmlEscape($_product->getName()).'',
                             'url' => ''.$_product->getProductUrl().'',
                             'image' => ''.$helper->init($_product, 'small_image')->resize(148, 148).'',
                             'description' => ''.nl2br($_product->getShortDescription()).'',
                             'price' => ''.$_product->getFormatedPrice().'');
  }

  $items = array();
  // Headerdaten erstellen
  $items['title'] = 'Magento - Produktdaten';
  $items['link'] = 'http://www.ihrshop.de';
  $items['description'] = 'Ihre Beschreibung';
  // Produktdaten einfügen
  $items['items'] = $json_products;
	// Daten ins JSON-Format kodieren
  $data = json_encode($items);
  // Daten ausgeben
  echo $JSON . '(' . $data . ');';
?>

Wir lesen die Daten einer Artikelgruppe ($catID = 100) aus und formatieren diese im JSON-Format. Wir können dies in Form von PHP-Arrays, da PHP über die Funktion json_encode verfügt.
Weiter Informationen zur JSON gibt es auf der Website http://www.json.org/.
Die Daten werden in folgendem Format ausgegeben:

({
		"title": "Magento - Produktdaten",
		"link": "http://www.ihrshop.de",
		"description": "Ihre Beschreibung",
		"items": [
	   {
			"name": "Produktname 1",
			"url": "URL 1",
			...
	   },

     ...

	   {
			"name": "Produktname 2",
			"url": "URL 2",			...
	   }
        ]
})

Als nächstes erstellen wir die HTML-Datei für die Ausgabe auf einem externen System. Ich benutze für die Verarbeitung von JSON jQuery. Dafür gibt es verschiedene Ansätze – ich verwende die Funktione $.ajax.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <script type="text/javascript" src="jquery.js"></script>
    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />

    <script type="text/javascript">

    $(document).ready(function()
      {
        $('body').append('<h1>Daten von externem Magento-Shop lesen...</h1>');
        $('body').append('<dl />');

        $.ajax({
  				dataType: 'jsonp',
  				jsonp: 'jsonp_callback',
  				url: 'http://ihredomain.de/json_data.php',
 				  success: function (data) {

            $.each(data.items, function(i,item){
              var name = item.name;
              var url = item.url;
              var description = item.description;
              var imageurl = item.image;
              var price = item.price;

              html = '<dt> <img class="bookImage" alt="" height="148" src="' + imageurl + '" /> </dt>';
              html += '<dd> <span class="loadingPic" alt="Loading" />';
              html += '<p class="title"><A href="' +url+'" target="_blank">' + name + '</A></p>';
              html += '<p class="price">Preis: <b>' + price + '</b></p>';
              html += '<p> ' + description + '</p>' ;
              html += '</dd>';

              $('dl').append($(html));
              $('.loadingPic').fadeOut(1400);

            });

  				} // Ende success
			  }); // Ende $.ajax
			}); // Ende .ready

    </script>
  </head>
  <body>
  </body>
 </html>

Funktionsweise:
Zuerst erstelle ich via jQuery die Headline und den Container für die Produktdaten. Über $.ajax lesen wir den Output der Datei json_data.php des Magentoshops. Die Variable “data” beinhaltet unsere Daten in Form von Objekten. So kann man die einzelnen Attribute sehr einfach ansprechen. Die Produktbezeichnung zum Beispiel mit item.name.
Mit $(‘dl’).append($(html)) werden die Daten unserem Container hinzugefügt – das war es schon. Die CSS-Datei zu erklären spare ich mir an dieser Stelle.

Die kompletten Daten wir Bilder und CSS finden Sie hier zum Download.
http://www.mxperts.de/wp-content/uploads/2009/06/mag_exchange.zip