<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		
		<title>Magento-Blog von Andreas von Studnitz</title>
		<link>http://www.avs-webentwicklung.de/</link>
		<description>In diesem Blog soll mein Wissen zum Thema Magento archiviert und präsentiert werden.</description>
		<language>de</language>
		<image>
			<title>Magento-Blog von Andreas von Studnitz</title>
			<url>http://www.avs-webentwicklung.de/typo3conf/ext/tt_news/ext_icon.gif</url>
			<link>http://www.avs-webentwicklung.de/</link>
			<width>18</width>
			<height>16</height>
			<description>In diesem Blog soll mein Wissen zum Thema Magento archiviert und präsentiert werden.</description>
		</image>
		<generator>TYPO3 - get.content.right</generator>
		<docs>http://blogs.law.harvard.edu/tech/rss</docs>
		
		
		
		<lastBuildDate>Mon, 16 Aug 2010 12:07:00 +0200</lastBuildDate>
		
		
		<item>
			<title>Magento: Anzeigen von Bestellbedingungen in einem Fenster statt einer Textbox</title>
			<link>http://www.avs-webentwicklung.de/blog/artikel/magento-anzeigen-von-bestellbedingungen-in-einem-fenster-statt-einer-textbox.html</link>
			<description>Beim Bestätigen der AGB und der Widerrufsbelehrung kurz vor Bestellabschluss werden die Bedingungen...</description>
			<content:encoded><![CDATA[Hierfür wird die Javascript-Bibliothek <link http://www.p51labs.com/lightwindow/ _blank external-link-new-window "Opens external link in new window">Lightwindow</link> (Einbindung siehe mein <link http://www.avs-webentwicklung.de/blog/artikel/lightbox-fuer-magento.html - external-link-new-window "Opens external link in new window">vorheriger Eintrag</link>) eingesetzt, um den Inhalt der AGB in einer Lightbox (bzw. einem Lightwindow) anzuzeigen. Die Textbox benötigt hierfür eine eindeutige HTML-ID, die in der Template-Datei checkout/onepage/agreements.phtml gesetzt werden kann:
<pre>&lt;div id=&quot;agreement-content-&lt;?php echo $_a-&gt;getId()?&gt;&quot; class=&quot;agreement-content&quot;...</pre>
Anschließend wird ein Link an den Text hinter der Checkbox angehängt, wobei als Link die ID des darzustellenden Elements mit vorangestelltem #-Zeichen eingesetzt wird:
<pre>&lt;a href=&quot;#agreement-content-&lt;?php echo $_a-&gt;getId()?&gt;&quot; class=&quot;lightwindow&quot; params=&quot;lightwindow_width=800,lightwindow_height=600&quot;&gt;&lt;?php echo $this-&gt;__('Link') ?&gt;&lt;/a&gt;)</pre>
Dadurch wird das Textfeld automatisch versteckt und als Lightwindow bei einem Klick auf den Link wiederhergeholt.
Zusammen sieht die Datei so aus:
<pre>&lt;?php<br />/**<br /> * @see Mage_Checkout_Block_Agreements<br /> */<br />?&gt;<br /><br />&lt;?php if (!$this-&gt;getAgreements()) return; ?&gt;<br />&lt;form action=&quot;&quot; id=&quot;checkout-agreements&quot; onsubmit=&quot;return false;&quot;&gt;<br />&lt;ol class=&quot;checkout-agreements&quot;&gt;<br />&lt;?php foreach ($this-&gt;getAgreements() as $_a): ?&gt;<br />    &lt;li&gt;<br />        &lt;div id=&quot;agreement-content-&lt;?php echo $_a-&gt;getId()?&gt;&quot; class=&quot;agreement-content&quot;&lt;?php echo ($_a-&gt;getContentHeight() ? ' style=&quot;height:' . $_a-&gt;getContentHeight() . '&quot;' : '')?&gt;&gt;<br />            &lt;?php if ($_a-&gt;getIsHtml()):?&gt;<br />                &lt;?php echo $_a-&gt;getContent() ?&gt;<br />            &lt;?php else:?&gt;<br />                &lt;?php echo nl2br($this-&gt;htmlEscape($_a-&gt;getContent())) ?&gt;<br />            &lt;?php endif; ?&gt;<br />        &lt;/div&gt;<br />        &lt;p class=&quot;agree&quot;&gt;<br />            &lt;input type=&quot;checkbox&quot; id=&quot;agreement-&lt;?php echo $_a-&gt;getId()?&gt;&quot; name=&quot;agreement[&lt;?php echo $_a-&gt;getId()?&gt;]&quot; value=&quot;1&quot; title=&quot;&lt;?php echo $this-&gt;htmlEscape($_a-&gt;getCheckboxText()) ?&gt;&quot; class=&quot;checkbox&quot; /&gt;<br />            &lt;label for=&quot;agreement-&lt;?php echo $_a-&gt;getId()?&gt;&quot;&gt;&lt;?php echo $this-&gt;htmlEscape($_a-&gt;getCheckboxText()) ?&gt; (&lt;a href=&quot;#agreement-content-&lt;?php echo $_a-&gt;getId()?&gt;&quot; class=&quot;lightwindow&quot; params=&quot;lightwindow_width=800,lightwindow_height=600&quot;&gt;&lt;?php echo $this-&gt;__('Link') ?&gt;&lt;/a&gt;)&lt;/label&gt;<br />        &lt;/p&gt;<br />    &lt;/li&gt;<br />&lt;?php endforeach ?&gt;<br />&lt;/ol&gt;<br />&lt;/form&gt;</pre>
]]></content:encoded>
			
			
			<pubDate>Mon, 16 Aug 2010 12:07:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Lightbox für Magento</title>
			<link>http://www.avs-webentwicklung.de/blog/artikel/lightbox-fuer-magento.html</link>
			<description>Welche Variante, wie einbinden, wofür kann sie noch genutzt werden?</description>
			<content:encoded><![CDATA[Es gibt ja einige Lightbox-Derivate, die das Öffnen von Links in so genannten Overlay-Fenstern ermöglichen.&nbsp;
<ul><li>Die <link http://www.huddletogether.com/projects/lightbox2/ _blank external-link-new-window "Opens external link in new window">Original-Lightbox</link>. Diese kann man auch in Magento problemlos einbinden. Möglicher Nachteil: Sie unterstützt nur Bilder.</li><li>Dann gibt es das Modul <link http://www.magentocommerce.com/magento-connect/TemplatesMaster/extension/1487/magento-easy-lightbox _blank external-link-new-window "Opens external link in new window">Easy Lightbox</link>, das man bei MagentoConnect herunterladen kann. Dies ist deutlich schneller einzubinden, es funktioniert zuverlässig und ist konfigurierbar. Also eigentlich ideal.</li><li>Es gibt aber auch Fälle, in denen man mehr als Bilder verlinken will - zum Beispiel Flash-Filme oder ganze Seiten, z.B. als iFrame. Hierfür empfehle ich <link http://www.p51labs.com/lightwindow/ _blank external-link-new-window "Opens external link in new window">LightWindow</link>. Der große Vorteil gegenüber anderen Skripten: Es basiert auf Prototype und script.aculo.us, welche von Magento sowieso eingesetzt werden. Gegenüber anderen Skripten, die meist auf jQuery aufsetzen, hat man hier einen klaren Vorteil (wenn man nicht sowieso jQuery zusätzlich einsetzt).</li></ul>
Da die Einbindung von LightWindow ein paar Tücken hat, gibt es hier eine Kurzanleitung:
<ul><li>Herunterladen der Dateien unter <link http://www.p51labs.com/lightwindow/#download _blank external-link-new-window "Opens external link in new window">http://www.p51labs.com/lightwindow/#download</link></li><li>Entpacken der Dateien:<ul><li>lightwindow.js unter js/ im Template-Verzeichnis (Skin-Bereich)</li><li>lightwindow.css unter css/</li><li>alle Grafiken unter images/ </li></ul></li><li>Da JavaScript Links mit kompletter Pfadangabe zum Anzeigen der Grafiken benötigt (zum Beispiel für die &quot;loading&quot;-Grafik), muss dieser noch in die JavaScript-Datei eingebracht werden. Eine mögliche Lösung:<ul><li>Setzen einer Konstante in der Template-Datei page/html/head.phtml oder im Bereich &quot;Diverse Skripte &amp; Skriptverknüpfungen&quot; in der Konfiguration:</li></ul></li></ul>
<pre>&lt;script type=&quot;text/javascript&quot;&gt;<br />//&lt;![CDATA[<br />    var SKIN_URL = '&lt;?php echo $this-&gt;getSkinUrl() ?&gt;';<br />//]]&gt;<br />&lt;/script&gt;</pre>
<ul><li><ul><li>Ersetzen aller Vorkommnisse von &quot;images/&quot; in der lightwindow.js durch folgenden Part:</li></ul></li></ul>
<pre>'+SKIN_URL+'images/</pre>
<ul><li>Einbinden der Dateien per layout/page.xml (oder eigene XML-Datei)</li></ul>
<pre>&lt;action method=&quot;addItem&quot;&gt;&lt;type&gt;skin_js&lt;/type&gt;&lt;name&gt;js/lightwindow.js&lt;/name&gt;&lt;params/&gt;&lt;/action&gt;<br />&lt;action method=&quot;addCss&quot;&gt;&lt;stylesheet&gt;css/lightwindow.css&lt;/stylesheet&gt;&lt;/action&gt;</pre>
<ul><li>Anschließend kann man alle Funktionen von LightWindow nutzen. Und das sind einige...</li></ul>]]></content:encoded>
			
			
			<pubDate>Mon, 02 Aug 2010 15:53:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Wunsch und Wirklichkeit: Schnittstellen zwischen Magento und Warenwirtschaftssystemen</title>
			<link>http://www.avs-webentwicklung.de/blog/artikel/wunsch-und-wirklichkeit-schnittstellen-zwischen-magento-und-warenwirtschaftssystemen.html</link>
			<description>Mein Vortrag auf Meet Magento #3.10, 01.06.2010</description>
			<content:encoded><![CDATA[Bereits seit einigen Monaten geplant, stehen jetzt auch die Vortragsunterlagen zu meinem Seminar. Mein Vortrag zum Thema &quot;Wunsch und Wirklichkeit: Schnittstellen zwischen Magento und Warenwirtschaftssystemen&quot; wird wie folgt aufgebaut sein:
<ul><li>Profil Andreas von Studnitz</li><li>Definition: Schnittstelle</li><li>Wunsch: die ideale Schnittstelle</li><li>Die ideale Schnittstelle: Warum sie häufig nicht eingesetzt wird</li><li>Wirklichkeit: tatsächlich umgesetzte Schnittstellen</li><li>Wirklichkeit: Herausforderungen bei der Umsetzung</li><li>Fragen und Diskussion</li></ul>
Termin: Dienstag, dem 01.06.2010, 15:15<br />Ort: Meet Magento #3.10, GaraGe, Leipzig<br /><link http://www.meet-magento.de/programm.html _blank external-link-new-window "Opens external link in new window">Vollständiges Programm</link>

<b>Update:</b> Jetzt sind die Vortragsunterlagen online. <a title="Initiates file download" class="download" target="_blank" href="fileadmin/documents/Vortrag_MeetMagento310_Schnittstellen.pdf">Hier herunterladen</a> (PDF, 91KB)]]></content:encoded>
			
			
			<pubDate>Thu, 27 May 2010 22:04:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Magento: Aufsplitten der Warenkorb-Produkte in einzelne Zeilen</title>
			<link>http://www.avs-webentwicklung.de/blog/artikel/magento-aufsplitten-der-warenkorb-produkte-in-einzelne-zeilen.html</link>
			<description>Zugegeben eine auf den ersten Blick merkwürdige Anforderung: Wenn x (zwei oder mehr) identische...</description>
			<content:encoded><![CDATA[Zugegeben eine auf den ersten Blick merkwürdige Anforderung: Wenn x (zwei oder mehr) identische Produkte im Warenkorb sind, sollen diese nicht in einer Zeile mit der Menge x erscheinen, sondern in x einzelnen Zeilen mit jeweils der Menge 1. Der Grund dahinter: Zu jedem einzelnen Produkt soll der Kunde eine getrennte Geschenknachricht eingeben können. Das geht im Standard nur einmal pro Zeile. 
Um dies zu erreichen, wird zunächst die Methode <b>addProduct </b>der Klasse <b>Mage_Checkout_Model_Cart</b> angepasst, die für das Hinzufügen von Produkten zum Warenkorb zuständig ist:
<pre>/**<br /> * Add product to shopping cart (quote); if qty &gt; 1 create x items<br /> *<br /> * @param   int $productId<br /> * @param   int $qty<br /> * @return  Mage_Checkout_Model_Cart<br /> */<br />public function addProduct($product, $info=null)<br />{<br /><br />    $product = $this-&gt;_getProduct($product);<br />    $request = $this-&gt;_getProductRequest($info);<br /><br /><br />    if ($product-&gt;getId()) {<br /><br />        // store original quantity and set request quantity to 1 so each item line just contains 1 product        <br />        $qty = max(1, $request-&gt;getQty());<br />        $request-&gt;setQty(1);<br /><br />        // add as many item lines as products should be added<br />        for ($i = 1; $i &lt;= $qty; $i++) {<br />        <br />            $result = $this-&gt;getQuote()-&gt;addProduct($product, $request);<br /><br />            /**<br />             * String we can get if prepare process has error<br />             */<br />            if (is_string($result)) {<br /><br />                $this-&gt;getCheckoutSession()-&gt;setRedirectUrl($product-&gt;getProductUrl());<br />                if ($this-&gt;getCheckoutSession()-&gt;getUseNotice() === null) {<br />                    $this-&gt;getCheckoutSession()-&gt;setUseNotice(true);<br />                }<br />                Mage::throwException($result);<br />            }<br />        }<br />    }<br />    else {<br />        Mage::throwException(Mage::helper('checkout')-&gt;__('Product does not exist'));<br />    }<br /><br />    Mage::dispatchEvent('checkout_cart_product_add_after', array('quote_item'=&gt;$result, 'product'=&gt;$product));<br />    $this-&gt;getCheckoutSession()-&gt;setLastAddedProductId($product-&gt;getId());<br />    return $this;<br />}</pre>
Dies löst nur das halbe Problem - wenn im Warenkorb die Menge geändert wird, muss auch hier die Aufteilung auf mehrere Zeilen passieren. Dafür wird die Methode <b>setQty</b> der Klasse <b>Mage_Sales_Model_Quote_Item</b> wie folgt angepasst:
<pre>/**<br /> * Declare quote item quantity; duplicate items if qty &gt; 1<br /> *<br /> * @param float $qty<br /> * @return Mage_Sales_Model_Quote_Item<br /> */<br />public function setQty($qty)<br />{<br /><br />    $qty    = $this-&gt;_prepareQty($qty);<br /><br />    if ($qty &gt; 1) {<br />    <br />        $this-&gt;setData('qty', 1);<br />    <br />        for ($i = 1; $i &lt; $qty; $i++) {<br />        <br />            $newItem = clone $this;<br />            $this-&gt;getQuote()-&gt;addItem($newItem);<br />        }<br />    <br />    } else {<br />    <br />        $this-&gt;setData('qty', $qty);<br />    }<br /><br />    return $this;<br />}</pre>
Praktisch dabei: Diese Methode wird auch dafür verwendet, wenn zwei Warenkörbe (&quot;Quotes&quot;) vereinigt werden, z.B. wenn der Kunde sich erst einloggt, nachdem er schon Produkte in den Warenkorb gelegt hat.]]></content:encoded>
			
			
			<pubDate>Mon, 24 May 2010 14:11:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Magento: Anlegen einer Rechnung zu einer Bestellung</title>
			<link>http://www.avs-webentwicklung.de/blog/artikel/magento-anlegen-einer-rechnung-zu-einer-bestellung.html</link>
			<description>Mit der folgenden Funktion kann zu einer Magento-Bestellung per Skript eine Rechnung ausgelöst...</description>
			<content:encoded><![CDATA[Mit der folgenden Funktion kann zu einer Magento-Bestellung per Skript eine Rechnung ausgelöst werden. Hier werden alle Produkte berechnet - sollte das nicht gewünscht sein, muss die Funktion angepasst werden. Anhand des Parameters $pay kann noch bestimmt werden, ob die Rechnung als &quot;offen&quot; oder als &quot;bezahlt&quot; markiert werden soll. Nur mit einer bezahlten Rechnung stellt sich der Bestellstatus auf &quot;vollständig&quot; - und natürlich muss auch der Versand dafür erfolgt sein.

<pre>/**<br /> * creates an invoice for an order, regarding all ordered products<br /> *<br /> * @param Mage_Sales_Model_Order $order<br /> * @param boolean $pay decides whether the invoice should be markes as &quot;paid&quot;<br /> * @return Mage_Sales_Model_Order_Invoice<br /> */<br />protected function createInvoice($order, $pay = false) {<br /><br />    // create invoice<br />    $convertOrderObj = Mage::getSingleton('sales/convert_order');<br />    $invoice = $convertOrderObj-&gt;toInvoice($order);<br /><br />    // add all order items (products) to invoice<br />    foreach ($order-&gt;getAllItems() as $item) {<br /><br />        $invoiceItem = $convertOrderObj-&gt;itemToInvoiceItem($item);<br /><br />        if ($item-&gt;getParentItem()) {<br />            $invoiceItem-&gt;setParentItem($invoice-&gt;getItemById($item-&gt;getParentItem()-&gt;getId()));<br />        }<br />        $invoiceItem-&gt;setQty($item-&gt;getQtyToInvoice());<br />        $invoice-&gt;addItem($invoiceItem);<br />    }<br /><br />    // calculate totals<br />    $invoice-&gt;collectTotals();<br />    $invoice-&gt;register();<br /><br /><br />    $orderPayment = $order-&gt;getPayment();<br />    $orderPayment-&gt;pay($invoice);<br /><br />    if ($pay) {<br /><br />        // mark invoice as &quot;paid&quot;<br />        $invoice-&gt;pay();<br />    }<br /><br />    // save order and invoice<br />    $order-&gt;setIsInProcess(true);<br />    $transactionObj = Mage::getModel('core/resource_transaction');<br />    $transactionObj-&gt;addObject($invoice);<br />    $transactionObj-&gt;addObject($invoice-&gt;getOrder());<br />    $transactionObj-&gt;save();<br /><br />    $invoiceId = $invoice-&gt;getId();<br /><br />    return $invoice;<br />}</pre>]]></content:encoded>
			
			
			<pubDate>Fri, 14 May 2010 09:21:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Magento: Versand zu einer Bestellung per Quellcode erzeugen</title>
			<link>http://www.avs-webentwicklung.de/blog/artikel/magento-versand-zu-einer-bestellung-per-quellcode-erzeugen.html</link>
			<description>Vor allem beim Zusammenspiel mit Schnittstellen kommt es immer wieder vor, dass ein Versand zu...</description>
			<content:encoded><![CDATA[Vor allem beim Zusammenspiel mit Schnittstellen kommt es immer wieder vor, dass ein Versand zu einer Bestellung per Skript ausgelöst werden soll. Hierbei hilft folgender Code:

<pre>/**<br /> * Creates a shipment for an order<br /> *<br /> * @param Mage_Sales_Model_Order $order<br /> * @return Mage_Sales_Model_Order_Shipment<br /> */<br />protected function createShipment($order) {<br /><br />    $convertor = Mage::getModel('sales/convert_order');<br />    $shipment = $convertor-&gt;toShipment($order);<br /><br />    // count items<br />    $savedQtys = array();<br />    $items = $order-&gt;getAllItems();<br />    foreach($items as $item) {<br /><br />        $savedQtys[$item-&gt;getId()] = $item-&gt;getQtyOrdered();<br />    }<br /><br />    // add items to shipment<br />    foreach ($order-&gt;getAllItems() as $orderItem) {<br />        if (!$orderItem-&gt;isDummy(true) &amp;&amp; !$orderItem-&gt;getQtyToShip()) {<br />            continue;<br />        }<br />        if ($orderItem-&gt;isDummy(true) &amp;&amp; !$this-&gt;_needToAddDummy($orderItem, $savedQtys)) {<br />            continue;<br />        }<br />        if ($orderItem-&gt;getIsVirtual()) {<br />            continue;<br />        }<br />        $item = $convertor-&gt;itemToShipmentItem($orderItem);<br />        if (isset($savedQtys[$orderItem-&gt;getId()])) {<br />            if ($savedQtys[$orderItem-&gt;getId()] &gt; 0) {<br />                $qty = $savedQtys[$orderItem-&gt;getId()];<br />            } else {<br />                continue;<br />            }<br />        }<br />        else {<br />            if ($orderItem-&gt;isDummy(true)) {<br />                $qty = 1;<br />            } else {<br />                $qty = $orderItem-&gt;getQtyToShip();<br />            }<br />        }<br />        $item-&gt;setQty($qty);<br />        $shipment-&gt;addItem($item);<br />    }<br />    $shipment-&gt;register();<br />    $shipment-&gt;setEmailSent(true);<br /><br />    // save shipment and order<br />    $order-&gt;setCustomerNoteNotify(true);<br />    $order-&gt;setIsInProcess(true);<br /><br />    $transactionSave = Mage::getModel('core/resource_transaction')<br />        -&gt;addObject($shipment)<br />        -&gt;addObject($order)<br />        -&gt;save();<br /><br />    // send email<br />    $shipment-&gt;sendEmail(true, '');<br /><br />    return $shipment;<br />}</pre>]]></content:encoded>
			
			
			<pubDate>Tue, 11 May 2010 00:04:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Anlegen neuer Magento-Bestellungen per Quellcode</title>
			<link>http://www.avs-webentwicklung.de/blog/artikel/anlegen-neuer-magento-bestellungen-per-quellcode.html</link>
			<description>Im Rahmen der Erstellung eines Abonnement-Systems für Magento stellte sich mir auch die Aufgabe,...</description>
			<content:encoded><![CDATA[Im Rahmen der Erstellung eines Abonnement-Systems für Magento stellte sich mir auch die Aufgabe, automatisiert neue Bestellungen anzulegen, die auf einer bestehenden Bestellung basieren. Der Vorgang ist dabei wie folgt:
<ol><li>Neues &quot;Quote&quot;-Objekt anlegen (dieses repräsentiert eine Bestellung vor der Bestätigung)</li><li>Hinzufügen von Adressdaten, Zahlungs- und Versandinformationen und den entsprechenden Produkten auf Basis der alten Bestellung</li><li>Automatisches Konvertieren des Quote-Objektes in ein Order-Objekt</li><li>Versenden der Bestellbestätigung</li></ol>
Der dazugehörige Quellcode sieht wie folgt aus:

<pre>protected function copyOrder($baseOrder) {<br />    if ($quote = $this-&gt;prepareOrder($baseOrder)) {<br /><br />        $service = Mage::getModel('sales/service_quote', $quote);<br />        $order = $service-&gt;submit();<br />        $order-&gt;sendNewOrderEmail();<br /><br />        return $order;<br />    }<br />}<br /><br />protected function prepareOrder($baseOrder) {<br /><br />    // create quote<br />    $quote=Mage::getModel('sales/quote');<br /><br />    // assign customer<br />    $customer=Mage::getModel('customer/customer')-&gt;load($baseOrder-&gt;getCustomerId());<br />    $storeId=$customer-&gt;getStoreId();<br />    $quote-&gt;assignCustomer($customer); //sets ship/bill address<br /><br />    // add billing address<br />    $quoteBillingAddress = Mage::getModel('sales/quote_address')-&gt;importOrderAddress($baseOrder-&gt;getBillingAddress());<br />    $quote-&gt;setBillingAddress($quoteBillingAddress);<br /><br />    // add shipping address<br />    $quoteShippingAddress = Mage::getModel('sales/quote_address')-&gt;importOrderAddress($baseOrder-&gt;getShippingAddress());<br />    $quote-&gt;setShippingAddress($quoteShippingAddress);<br /><br />    // define store<br />    $store=$quote-&gt;getStore()-&gt;load($storeId);<br />    $quote-&gt;setStore($store);<br /><br />    // add products<br />    foreach($baseOrder-&gt;getAllItems() as $baseOrderItem) {<br /><br />        if ($baseOrderItem-&gt;getParentItem()) continue;<br /><br />        $product = Mage::getModel('catalog/product')-&gt;load($baseOrderItem-&gt;getProductId());<br />        $productOptions = $baseOrderItem-&gt;getProductOptions();<br /><br />        $request = array('qty' =&gt; $baseOrderItem-&gt;getOrderedQty());<br /><br />        // manage configurable products<br />        if (isset($productOptions['info_buyRequest']['super_attribute'])) {<br /><br />            foreach($productOptions['info_buyRequest']['super_attribute'] as $attributeKey =&gt; $attributeValue) {<br /><br />                $request['super_attribute'][$attributeKey] = $attributeValue;<br />            }<br />        }<br />        try {<br /><br />            $quote-&gt;addProduct($product, new Varien_Object($request));<br />        }<br />        catch (Exception $e) {<br /><br />            // TODO: send notification mail<br />            return false;<br />        }<br />    }<br /><br />    // set shipping method<br />    $quote-&gt;getShippingAddress()-&gt;setShippingMethod($baseOrder-&gt;getShippingMethod());<br />    $quote-&gt;getShippingAddress()-&gt;setCollectShippingRates(true)-&gt;save();<br /><br />    // set payment method<br />    $quote-&gt;getPayment()-&gt;addData($baseOrder-&gt;getPayment()-&gt;getData());<br /><br />    // calculate totals<br />    $quote-&gt;collectTotals();<br /><br />    $quote-&gt;save();<br />    return $quote;<br />}</pre>]]></content:encoded>
			
			
			<pubDate>Mon, 10 May 2010 21:01:00 +0200</pubDate>
			
		</item>
		
		<item>
			<title>Neuer Magento-Blog</title>
			<link>http://www.avs-webentwicklung.de/blog/artikel/neuer-magento-blog.html</link>
			<description>In diesem Blog soll mein Wissen zum Thema Magento archiviert und präsentiert werden. 
In...</description>
			<content:encoded><![CDATA[In diesem Blog soll mein Wissen zum Thema Magento archiviert und präsentiert werden.&nbsp;
In meiner täglichen Arbeit als Magento-Entwickler und -Berater fallen immer wieder neue Herausforderungen an. Manche Lösungen, die dabei entwickelt werden, sind zu schade, um Sie anschließend in Vergessenheit geraten zu lassen.&nbsp;
Hier werden also verschiedenste Codeschnipsel, Konzepte, aber auch Projekte vorgstellt.]]></content:encoded>
			
			
			<pubDate>Sat, 08 May 2010 20:52:00 +0200</pubDate>
			
		</item>
		
	</channel>
</rss>