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;

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.

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.

Symfony-Framework in der Version 1.2 erschienen

200px-symfonysvg

Das open-source PHP-Framework Symfony wurde in der Version 1.2 freigegeben. Es bleibt eines der besten MVC-Frameworks (Model-View-Controller, Trennung von Datebankabstraktion, Businesslogik und Darstellung) und bleibt für digitalvertraut erste Wahl für die Umsetzung von webbasierenden Anwendungen.

Archive

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