Magento: Get Product by SKU

Hier mal ein kleines Snippet um ein Produkt mittels der SKU zu laden:

$sku = "microsoftnatural";
$product = Mage::getModel('catalog/product')
            ->loadByAttribute('sku', $sku);
             

print_r($product->getData());

Oder wenn nur die Id gefragt ist:

$productIdBySku = Mage::getModel('catalog/product')
                    ->getIdBySku('Product Sku');
                     
echo $productIdBySku;

Online-Gutschriften über das Backend an Paypal senden

Um über das Backend Gutschriften für widerrufene Artikel zu erstellen bedarf es wenige Klicks. Hat der Kunde via Paypal gezahlt, so kann der zu erstattende Betrag direkt zurück auf das Paypal-Konto des Kunden zurückgebucht werden. Hat der Kunde Mehrere Artikel bestellt, aber nur einen Teil widerrufen, so können diese in die Lagerverwaltung wieder aufgenommen werden.

Hier eine kurze Anleitung:

  • Im Backend die Bestellung unter "Verkäufe" -> "Bestellungen" aufrufen.
  • In der linken Navigation "Rechnungen" wählen.
  • Entsprechende Rechnung auswählen.
  • Hier den "Gutschrift"-Button betätigen (WICHTIG: Der Gutschrift-Button muss auf der Rechnungsseite ausgelöst werden).
  • In der Tabelle "zu erstattende Artikel" die erforderliche Stückzahl zu dem entsprechendem Artikel eintragen und den Haken bei "zurück ins Lager" setzen wenn die Lagerverwaltung von Magento genutzt wird.
  • Nun die Stückzahl aller Artikel, die nicht erstattet werden, auf 0 setzen.
  • Unter der Tabelle befindet sich der ausgegraute Button "Mengen aktualisieren". Diesen betätigen.
  • Jetzt beträgt die Zwischensumme den Wert der zu erstattenden Artikel. Sollen die Versandkosten ebenfalls erstattet werden, so kann der vorausgefüllte Wert bestehen bleiben. Ansonsten die 0 eintragen.
  • Zuletzt den (rechten) "Erstatten"-Button betätigen (WICHTIG: NICHT den "Erstatten (offline)"-Button).
  • Der Kunde bekommt nun automatisch den Betrag auf sein Paypal-Konto gutgeschrieben.
  • Soll der Kunde über den Vorgang benachrichtigt werden, so muss der Button "Gutschriften" in der linken Navigation betätigt werden.
  • Hier die gewünschte Gutschrift auswählen.
  • Auf der Seite befindet sich oben rechts ein Button "Sende E-Mail", den auslösen und alles ist erledigt.

Zu den Feldern Berichtigungserstattung und Berichtigungszuschlag:

Berichtigungserstattung:
Hier kann ein Betrag eingegeben werden, der zusätzlich zu den Versandkosten gutgeschrieben werden kann. Der Betrag bezieht sich nicht auf einen Posten sondern wird pauschal zum Erstattungsbetrag hinzugerechnet. Dieser kann nicht höher sein als der gesamte, bereits bezahlte, Betrag.

Berichtigungszuschlag:
Der Berichtigungszuschlag ist das genaue Gegenteil der Berichtigungserstattung. Das heißt, dass dieser Betrag vom Verkäufer einbehalten wird. Der Wert bezieht sich nicht auf einen Posten, sondern auf den gesamten Rechnungsbetrag.

SQL Abfragen in Magento: addAttributeToFilter

addAttributeToFilter ist eine Funktion, mit welcher man geschickte Abfragen an den Produktkatalog stellen kann. In Kurzform: Es beeinflusst den WHERE Anteil der SQL-Query:

$afterSalesSpecialOffer = Mage::getResourceModel('catalogsearch/advanced_collection')
                ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
                ->addMinimalPrice()
                ->addTaxPercents()
                ->addStoreFilter()
                ->addAttributeToFilter('status', array('in'=>1));
    
    $todayDate = date('m/d/y');
    $tomorrow = mktime(0, 0, 0, date('m'), date('d')+1, date('y'));
    $tomorrowDate = date('m/d/y', $tomorrow);
                
    $afterSalesSpecialOffer->addAttributeToFilter('special_from_date', array('date' => true, 'to' => $todayDate))
                    ->addAttributeToFilter('special_to_date', array('or'=> array(
                    0 => array('date' => true, 'from' => $tomorrowDate),
                    1 => array('is' => new Zend_Db_Expr('null')))
                    ), 'left'); 

Diese Abfrage hat zum Beispiel als Ergebnis alle Produkte, welche aktuell im Angebot sind. Dabei wird auch der Gültigkeitszeitraum des Angebots berücksichtigt.

Folgen Abfragebedingungen sind dabei möglich.

Gleich: eq

$_products->addAttributeToFilter('status', array('eq' => 1));

Nicht Gleich: neq

$_products->addAttributeToFilter('status', array('neq' => 1));

Ähnlich : like

$_products->addAttributeToFilter('sku', array('like' => '1%')); // Alle Produkte deren SKU mit 1 beginnen

Nicht Ähnlich: nlike

$_products->addAttributeToFilter('sku', array('nlike' => '1%')); // Alle Produkte deren SKU nicht mit 1 beginnen

Einer von: in

$_products->addAttributeToFilter('sku', array('in' => array(1,2,3))); // Produkte mit der SKU 1,2 oder 3

nicht Einer von: nin

$_products->addAttributeToFilter('sku', array('like' => array(1,2,3))); // Alle Produkte ausser mit der SKU 1,2 oder 3

ist nicht gesetzt NULL: null

$_products->addAttributeToFilter('sku', 'null'); // Alle Produkte ohne SKU; Darf eigentlich nicht vorkommen

ist gesetzt: notnull

$_products->addAttributeToFilter('sku', 'notnull'); // Alle Produkte mit SKU;

größer als: gt

$_products->addAttributeToFilter('entity_id', array('gt' => 100)); 

kleiner als: lt

$_products->addAttributeToFilter('entity_id', array('lt' => 100)); 

größer oder gleich als: gteg

$_products->addAttributeToFilter('entity_id', array('gteq' => 100));

kleiner oder gleich als: lteq

$_products->addAttributeToFilter('entity_id', array('lteq' => 100));

Store-View relevante Magento Cronjobs

Innerhalb einer Magneto Cron Definition lässt sich leider kein Store-View oder Ähnliches einstellen.
Es besteht jedoch die Möglichkeit, die Definition um eigene Werte zu erweitern und diese dann innerhalb der eigenen Methode zu nutzen.

  • 1. Definiere einen zusätzlichen "node":
    <crontab>
       <jobs>
           <job_name>
               <schedule>
                   <cron_expr>* * * * * *</cron_expr>     
               </schedule>
               <run>
                   <model>module/observer::myJob</model>
               </run>
               <store>store_code</store>
           </job_name>
       </jobs>
    </crontab>
    
  • 2. Innerhalb der vom Cronjob auszuführende Methode:
    public function myJob($schedule) 
    {
        $jobsRoot = Mage::getConfig()->getNode('crontab/jobs');
        $jobConfig = $jobsRoot->{$schedule->getJobCode()};
        $yourStoreNode = (string) $jobConfig->store;
    
        // Hier kommen nun die Store-View relevanten Dinge
    }
    

Es können nun alle Store-View relevanten Dinge geladen werden.

Trusted-Shop

Um beim Zeitversatz der Truted-Shop Bewertungsmails die Wochenenden und Feiertage zu berücksichtigen sind nur ein paar Anpassungen nötig. Truted-Shop Bewertungsmails

Magento OnePage und Google Analytics

Um herauszufinden wie viele Bestellungen durchgeführt wurden braucht man Google Analytics nicht. Dafür genügt ein Blick in das Backend von Magento. Viel interessanter ist die Frage, wie viele Bestellungen nicht abgeschlossen wurden und an welcher Stelle die Besucher den Einkauf abbrechen.

Hierzu definiert man einen Trichter in Google Analytics.

Auf der Seite “Websiteprofile” auf Bearbeiten klicken und dann im Bereich “Ziele” über Ziel hinzufügen einen neuen Trichter anlegen. Also eine Startseite, eine Endseite und alle Seiten die dazwischen liegen. Die Startseite für den Checkout ist /checkout/onepage und die Zielseite ist /checkout/onepage/success/. Diese beiden Adressen im Trichter definiert ergeben schon mal zwei Zahlen. Wie viele haben den Checkout gestartet und wie viele sind am Ende übrig geblieben.

Was jetzt noch fehlt, sind die Seiten dazwischen. Man kann die Zwischenseiten wie Versandart, Zahlungsart usw. jedoch nicht so einfach messen. Magento arbeitet hier mit Ajax und somit gehen die Aufrufe an Google Analytics vorbei. Eine einfache Anpassung der "opcheckout.js" hilft hier jedoch weiter.

gotoSection: function(section)
{
    // neue Zeilen  
    try {
        pageTracker._trackPageview('/checkout/onepage/' + section + '/');
    } catch(err) {
        // hier kann ggf. ein Errorhandling eingebaut werden. 
    }
    // ab hier das Origianl
    section = $('opc-'+section);
    section.addClassName('allow');
    this.accordion.openSection(section);
},

Für aktuelle asynchrone Version muss es natürlich dann so aussehen:

gotoSection: function(section)
{
    // neue Zeilen  
    try {
        _gaq.push(['_trackPageview', '/checkout/onepage/' + sectionName + '/']);
    } catch(err) {
        // hier kann ggf. ein Errorhandling eingebaut werden. 
    }
    // ab hier das Origianl
    section = $('opc-'+section);
    section.addClassName('allow');
    this.accordion.openSection(section);
},

Vorraussetzung ist natürlich, dass Google Analytics im Magento Shop bereits integriert ist.

Magento WYSIWYG ImageOrdner

Wer sich wundert das die nutzbaren Images im WYSIWYG Editor nach dem Update von Version 1.4 auf 1.6 nicht mehr da sind, der sollten ein Blick in folgende Dateien werfen.

core/Mage/Cms/Model/Wysiwyg/Config.php

const IMAGE_DIRECTORY = 'wysiwyg';

core/Mage/Cms/etc/config.xml

<system>
   <media_storage_configuration>
       <allowed_resources>
           <wysiwyg_image_folder>wysiwyg</wysiwyg_image_folder>
        </allowed_resources>
   </media_storage_configuration>
</system>

hier jeweils ein "." einsetzen und /media ist wieder default.

Magento API Logging

Gerade wer versucht mittels der Magento API Prozesse zu realisieren, der wird ein Logging zu schätzen wissen.

Hierfür genügen ein paar zusätzliche Zeilen:

In der Datei: app/code/core/Mage/Api/Model/Server/Handler/Abstract.php
findet sich die Funktion call.

Hier einfach ein wenig Logging einfügen.

....
Mage::Log($method,null,'api.log');
Mage::Log($args,null,'api.log');
// Vor diesem Aufruf -- Zeile: 292 (Magento Version 1.6) 
return call_user_func_array(array(&$model, $method), $args);

// so wie
Mage::Log($e->getMessage(),null,'api.log');
Mage::Log($resourceName,null,'api.log');
Mage::Log($e->getCustomMessage(),null,'api.log');
// Vor diesem Aufruf -- Zeile: 298 (Magento Version 1.6) 
return $this->_fault($e->getMessage(), $resourceName, $e->getCustomMessage());

/* Beispielausgabe:

2011-09-07T12:54:43+00:00 DEBUG (7): create
2011-09-07T12:54:43+00:00 DEBUG (7): Array
(
    [0] => 100000435
    [1] => Array
        (
        )

    [2] => 
    [3] => 1
    [4] => 
)

2011-09-07T12:54:44+00:00 DEBUG (7): data_invalid
2011-09-07T12:54:44+00:00 DEBUG (7): sales_order_invoice
2011-09-07T12:54:44+00:00 DEBUG (7): Cannot do invoice for order.
*/

"Meet Magento"-Konferenz

Am 05. Februar 2009 fand sie in Leipzig statt, die erste Konferenz rund um das open-source Shopsystem Magento. Bereits in der Key-Note hatte Roy Rubin, CEO von Varien, der Firma hinter Magento, einige Überraschungen parat.

Erster "Meet Magento"-Day in Deutschland

magento_logo_gross
Endlich findet er statt, der erste "Meet Magento"-Kongress in Deutschland, genauer in Leipzig. Am 05. Februar ist es soweit, die Veranstaltung ist bereits seit Wochen ausgebucht. Wir freuen uns schon darauf und werden an dieser Stelle zeitnah über die Neuigkeiten rund um die mit Abstand professionellste open-source Lösung im Bereich eCommerce berichten.

Contact Info

Venezianer Str. 10 90455 Nürnberg Deutschland

+49 9129 14 25 801
support@digitalvertraut.de

Werktags von: 9:00 bis 18:00 Uhr

Copyright 2023 DigitalVertraut UG ©  All Rights Reserved