Zur Agentur-Website
03.10.2011

Magento: Artikelnummern automatisch vergeben

Shopbetreiber die Magento im Einsatz haben, kennen sicherlich das Problem: Magento vergibt standardmäßig keine automatische SKU (Artikelnummer) bzw. lässt sich diese Option auch nicht in der Systemkonfiguration einstellen.

Aus diesem Grund haben wir ein kleines Modul erstellt, das nichts anderes macht, als die saveAction() des ProductControllers im Backend zu überschreiben.

Im folgenden Beispiel verwendet das Modul den Namespace "Keynet" und bekommt den Namen "AutoSku". Wir erstellen also unter /app/code/local/Keynet/ einen Ordner mit diesem Namen. Weiters werden darin die Unterordner /controllers und /etc erzeugt.  Im Ordner /controllers wird weiters der Ordner /Catalog erstellt und darin die Datei ProductController.php gespeichert.

Anschließend erzeugen wir eine Kopie der saveAction-Methode von /app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php und erweitern diese um die Funktionalität der automatischen SKU-Vergabe. Die fertige Controller-Datei sieht wie folgt aus:


<?php
require_once 'Mage/Adminhtml/controllers/Catalog/ProductController.php';
class Keynet_AutoSku_Catalog_ProductController extends Mage_Adminhtml_Catalog_ProductController
{

	/**
     * Save product action
     */
    public function saveAction()
    {
        $storeId        = $this->getRequest()->getParam('store');
        $redirectBack   = $this->getRequest()->getParam('back', false);
        $productId      = $this->getRequest()->getParam('id');
        $isEdit         = (int)($this->getRequest()->getParam('id') != null);

        $data = $this->getRequest()->getPost();

        if ($data) {
            if (!isset($data['product']['stock_data']['use_config_manage_stock'])) {
                $data['product']['stock_data']['use_config_manage_stock'] = 0;
            }
            $product = $this->_initProductSave();

            if($data['product']['sku']=="") {
				$write = Mage::getSingleton('core/resource')->getConnection('core_write');
				$res = $write->query("SELECT max(sku) AS maxSKU FROM catalog_product_entity");
				$row = $res->fetch();
				$prev_sku = $row['maxSKU'];
				$sku_val = (int)$prev_sku + 1;
				$product->setSku($sku_val);
			}

            try {
                $product->save();
                $productId = $product->getId();

                /**
                 * Do copying data to stores
                 */
                if (isset($data['copy_to_stores'])) {
                    foreach ($data['copy_to_stores'] as $storeTo=>$storeFrom) {
                        $newProduct = Mage::getModel('catalog/product')
                            ->setStoreId($storeFrom)
                            ->load($productId)
                            ->setStoreId($storeTo)
                            ->save();
                    }
                }

                Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($productId);

                $this->_getSession()->addSuccess($this->__('The product has been saved.'));
            }
            catch (Mage_Core_Exception $e) {
                $this->_getSession()->addError($e->getMessage())
                    ->setProductData($data);
                $redirectBack = true;
            }
            catch (Exception $e) {
                Mage::logException($e);
                $this->_getSession()->addError($e->getMessage());
                $redirectBack = true;
            }
        }

        if ($redirectBack) {
            $this->_redirect('*/*/edit', array(
                'id'    => $productId,
                '_current'=>true
            ));
        }
        else if($this->getRequest()->getParam('popup')) {
            $this->_redirect('*/*/created', array(
                '_current'   => true,
                'id'         => $productId,
                'edit'       => $isEdit
            ));
        }
        else {
            $this->_redirect('*/*/', array('store'=>$storeId));
        }
    }
}
Die erweiterte saveAction für automatische Artikelnummern in Magento

Der interessante Teil ist dabei die If-Anweisung von Zeile 24 bis 31. Hiermit wird geprüft, ob im SKU-Feld ein Wert vergeben wurde. Ist das Feld leer, wird aus der Datenbank die höchste Artikelnummer gesucht und diese um 1 erhöht. Anschließend wird dem zu speichernden Artikel diese neue Artikelnummer zugewiesen.

Wichtig ist zudem, die Verwendung des require_once Statements in Zeile 2. Weiters muss zuvor unter "Attribute verwalten" das SKU-Feld so eingestellt werden, dass es kein Pflichtfeld ist (Option "Werte erforderlich" auf "Nein" setzen).

Jetzt muss Magento noch darüber informiert werden, dass wir ab nun unsere saveAction-Methode  verwenden wollen. Das geschieht mit der Datei config.xml im Ordner /etc.


<?xml version="1.0"?>
<config>
    <modules>
        <Keynet_AutoSku>
            <version>0.1.0</version>
        </Keynet_AutoSku>
	</modules>
    <admin>
		<routers>
			<adminhtml>
				<args>
					<modules>
						<Keynet_AutoSku before="Mage_Adminhtml_Catalog_ProductController"> Keynet_AutoSku</Keynet_AutoSku>
					</modules>
				</args>
			</adminhtml>
		</routers>
	</admin>
</config>
AutoSku Modul in Magento

Hiermit weisen wir Magento an, dass ab nun unsere Action-Methode für die Speicherung von Artikeln im Backend zu verwenden ist. Das war's! Das Modul muss noch mit der Datei "Keynet_AutoSku.xml" in /app/etc/modules/ aktiviert werden. Wie diese Datei aussehen kann, zeigt unter anderem dieser Artikel hier im Blog.

Kategorie(n): Magento
Kommentare (0)
22.09.2011

Suchmaschinenfreundliche 404-Fehler mit Magento

Portiert man einen bereits bestehenden Shop nach Magento (oder egal in welches System), entstehen dabei in der Regel eine Vielzahl an 404-Fehlern, da sich die Produkt-Url's ändern. Die sauberste Lösung ist dabei, Redirects für alle alten Url's automatisiert herzustellen, was jedoch auch immer abhängig vom alten Shop-System und dessen URL-Aufbau ist.

Die andere und einfachste Variante ist die Anzeige der Startseite anstatt einer 404-Fehlerseite. Hierfür bietet Magento über "System > Konfiguration > Web > Standardseiten > CMS keine Route Seite" die Möglichkeit, eine Standardseite für nicht existierende Seiten einzustellen.

Ruft man also z.B. www.domain.com/meine-nicht-vorhandene-seite auf, dann wird mit dieser Einstellung der Inhalt der Startseite angezeigt. Die URL bleibt trotzdem im Browser stehen, und zudem wird im Header der Statuscode 404 gesendet. Beim Relaunch eine Shops entsteht dabei das Problem, dass hiermit ziemlich viele 404-Seiten vorhanden sind, und sich dies negativ auf die Google-Rankings auswirken könnte.

Schöner und besser wäre es meiner Meinung nach, alle nicht mehr vorhandenen Seiten direkt per 301-Redirect auf die Startseite weiterleiten zu lassen. Da Magento seinen eigenen Error-Handler verwendet, ist dies jedoch nicht so einfach möglich. Zum Beispiel wird die Anweisung "ErrorDocument 404 /" in der .htaccess-Datei schlichtweg ignoriert. Abhilfe schafft ein eigenes Modul, das den IndexController und in weiterer Folge die noRoute-Action überschreibt.

Für das Modul wird anfangs unter app/code/local/Keynet der Ordner "Redirect" erstellt (der Ordner "Keynet" wird bei Euch auch anders lauten oder muss eben erst erstellt werden). Im Ordner "Redirect" sind dann noch die beiden Verzeichnisse "etc" und "controllers" zu erzeugen. Danach muss die Datei config.xml im Ordner "etc" erzeugt und mit folgendem Inhalt gespeichert werden:


<?xml version="1.0"?>
<config>
  <modules>
    <Keynet_Redirect>
      <version>0.0.1</version>
    </Keynet_Redirect>
  </modules>
  <frontend>
    <routers>
      <mycms>
        <use>standard</use>
        <args>
          <module>Keynet_Redirect</module>
          <frontName>redirect</frontName>
        </args>
      </mycms>
    </routers>
  </frontend>
  <global>
    <routers>
      <cms>
        <rewrite>
          <index>
            <to>Keynet_Redirect/index</to>
            <override_actions>true</override_actions>
            <actions>
              <noroute><to>Keynet_Redirect/index/noroute</to></noroute>
            </actions>
          </index>
        </rewrite>
      </cms>
    </routers>
  </global>
</config>
config.xml für das Redirect-Modul

Anschließend wird die Datei IndexController.php in /controllers erzeugt. Darin wird die noRoute-Action überschrieben und eine Weiterleitung per 301-Statuscode zur Startseite eingerichtet.


<?php
class Keynet_Redirect_IndexController extends Mage_Cms_IndexController
{
    public function noRouteAction($coreRoute = null)
    {
        header("Status: 301");
        header('Location: http://www.domain.com/');
    }
}

Überschreiben des Cms_IndexController in Magento

Abschließend ist noch die Datei Keynet_Redirect in /app/etc/modules herzustellen, damit die Extension auch durch Magento aktiviert bzw. verwendet wird. Zur Vollständigkeit halber hier der Inhalt dieser Datei:


<?xml version="1.0" encoding="UTF-8"?>
<config>
   <modules>
      <Keynet_Template>
         <active>true</active>
         <codePool>local</codePool>
      </Keynet_Template>
   </modules>
</config>
Inhalt der Datei Keynet_Redirect.xml

Am Ende möchte ich noch die Diskussion starten, ob es unbedingt notwendig ist hierfür extra ein Modul zu entwickeln, oder ob Ihr der Meinung seit, das Google ja sowieso nach einiger Zeit die Seite mit den 404-Statuscodes entfernt/ignoriert und die Umstellung mit den damit verbundenen Fehlerseiten keine negative Auswirkungen auf die Rankings haben wird? Ich freue mich auf eventuelle Antworten bei den Kommentaren!

19.09.2011

Wir sind umgezogen!

Seit 16. September ist KEYNET in neuen Büroräumlichkeiten anzutreffen. In der Bahnhofstraße 4, in Amstetten werden nun Shops, Websites und diverse Web-Applikationen entwickelt. Ein großer Besprechungsraum ermöglicht uns zudem Kunden-Schulungen für Shopware, Magento oder TYPO3 vor Ort durchzuführen.

Besucher sind jederzeit und gerne willkommen!

Kategorie(n): Interna
Kommentare (0)
12.09.2011

F-Commerce: Neue Möglichkeiten für Shop-Betreiber mittels Facebook

Welche Möglichkeiten haben Online-Händler, um das Potential von Facebook für die eigenen E-Commerce Pläne nutzen zu können? Mit dieser Frage beschäftigt sich das Online-Magazin Internethandel.de und gibt dabei ausführliche Tipps, wie Geld mit dem weltweit größten sozialen Netzwerk verdient werden kann.

Neben der Umsetzung einer eigenen Facebook-Fanpage, werden die Gründung einer eigenen Facebook-Gruppe und die Erstellung von Facebook Online-Shops erklärt. Letzteres ist auch unter der Bezeichnung „F-Commerce“ bekannt, und zeichnet sich dadurch aus, das E-Commerce direkt in Facebook integriert wird. Gemessen an der aktuellen Anzahl von mehr als 20 Millionen deutschsprachigen Facebook-Nutzern, ergeben sich daraus interessanten Möglichkeiten und Potentiale für Shop-Betreiber.

Beim F-Commerce wird unterscheiden, ob Produkte „nur“ dargestellt werden und anschließend auf den eigenen Online-Shop verlinkt wird, oder ob auch der Transaktionsprozess auf Facebook durchgeführt wird. Für die technische Umsetzung kann entweder die Programmierschnittstelle von Facebook genutzt werden. Oder man greift, zu Beginn, auf Anbieter zurück, die bereits fertige Baukasten-Systeme zurück. Einige derartiger Anbieter werden im erwähnten Artikel von Internethandel.de genannt und kurz vorgestellt.

Wenn es um den Aufbau einer neuen Marke oder die Bekanntmachung eines neuen Online-Shops geht, ist ein gezieltes Facebook-Fan-Marketing ein ausgesprochen effizienter Weg zum Erfolg. Die Chance zur Integration von Produkten oder ganzer Online-Shops kann genutzt werden, um unmittelbar über Facebook weitere Umsätze zu generieren und neue Kundenkreise anzusprechen zu können.

30.08.2011

Helferlein für die Magento Template-Entwicklung

Der folgende Artikel zeigt zwei Snippets, die bei der Entwicklung von Themes bzw. Templates mit Magento hilfreich sein können.

Möchte man für die einzelnen StoreViews gewisse Bereiche unterschiedlich haben, z.B dass jeweils eine separate länderspezifische Kontakt E-Mail Adresse angezeigt wird, so muss zuerst der StoreView Code abgefragt werden. Dies funktioniert mit folgendem PHP-Statement:


$store = Mage::app()->getStore()->getCode();

// Anschließend nach dem StoreView Code unterscheiden
switch ($store) {
case 'at':
  $mail = 'info@domain.at';
case 'de':
  $mail = 'info@domain.de';
case 'ch':
  $mail = 'info@domain.ch';
default:
  $mail = 'info@domain.com';
}
Abfrage des Store Codes in Magento

Das zweite, kleine Helferlein macht folgendes:  Damit nicht immer gesamte Pfad zum eigenen Skin-Folder eingetippt werden muss, kann die folgende PHP-Funktion eingesetzt werden.


$path = $this->getSkinUrl();
echo '<img src="' . $path . 'images/my_image.jpg" />';
Pfad zum eigenen Magento-Skin verwenden

So ist es möglich, auf einfache Weise, auf die Bilder im Skin-Ordner zu verweisen. Und sollte sich das Skin einmal ändern, so sind keine weiteren Änderungen in der Template-Datei notwendig.

Kategorie(n): Magento
Kommentare (0)
24.08.2011

Shopware-Store für Kaerntendruck.at

Nachdem hier im Blog bereits letzte Woche über unseren neuen Magento-Kunden berichtet wurde, freuen wir über den nächsten Neu-Autrag. Das Unternehmen Kaerntendruck.at hat uns den Zuschlag zur Entwicklung Ihres Online-Shops gegeben. Der Shop wird mittel Shopware umgesetzt.

Kaerntendruck.at bietet Digitaldruck, Offsetdruck und Textilveredelungen. Über den Online-Store sollen somit Banner, Flyer, Plakte, Briefpapier, usw. bestellt werden können. Das besondere dabei, ist die Möglichkeit die Produkte individuell zusammenzustellen bzw. eigene Druckvorlagen hochzuladen und bestellen zu können.

Als Shop-Software kommt wie erwähnt Shopware zum Einsatz. Daneben werden diverse Module wie der Artikel-Konfigurator oder das Newsletter-Modul entsprechend an die Bedürfnisse von Kaerntendruck.at angepasst. Der fertige Shop wird unter www.kaerntendruck.at erreichbar sein.

Kategorie(n): Interna
Kommentare (0)
18.08.2011

Neuer Auftrag: Entwicklung eines Magento-Shops mit 14.000 Produkten

Nun ist es fix: Für einen neu gewonnenen Kunden, entwickeln wir einen Online-Shop auf Basis des E-Commerce System Magento. Der Shop wird ca. 14.000 Produkte / Produktvarianten umfassen. Branche und Namen des Kunden werden später bekannt gegeben!

Zu Beginn wird ein, extra für dieses Shop-Projekt, erstelltes Screendesign in Magento integriert, so dass der Shop mit einem individuellen Erscheinungsbild punkten kann. Weiters werden zahlreiche, länderspezifische Einstellungen (z.B. für die Schweiz) vorgenommen, da der Online-Shop weltweit Kunden beliefert. Eine Ausweitung und Optimierung des internationalen Vertriebs, wie z.B. ein mehrsprachiger Shop, ist in einer weiteren Projektphase geplant.

Nun gilt es einmal, Magento so zu konfigurieren, dass der Shop lauffähig ist und ordnungsgemäß darüber Bestellungen durchgeführt werden können. Ein zentraler Punkt ist dabei die Integration eines Moduls für Kreditkartenzahlungen. Diese erste Projektphase soll Anfang September abgeschlossen sein. Da werden dann auch Kundenname und Shop-Domain hier im Blog veröffentlicht.

03.08.2011

Google Analytics Konferenz in Wien

Am 29. September 2011 findet im Schloss Schönbrunn in Wien die erste deutschsprachige Google Analytics Konferenz statt. Behandelt werden aktuelle Themen rund um das kostenfreie Web-Analyse-Tool "Google Analytics".

Neben Google Analytics Certified Partnern aus dem deutschsprachigen Raum werden bei dieser Konferenz auch Vortragende von Googles Analytics-Team aus Mountain View anwesend sein, um brennende Themen rund um Web Analytics zu präsentieren und diskutieren.

Mit Sicherheit werden auf dieser Veranstaltung auch Trend-Themen wie "Social Analytics", dass ja seit kurzem in Google Analytics verfügbar ist, besprochen werden.

Weitere Informationen und Tickets gibt es auf der Konferenz-Website.

28.07.2011

Rache wird teuer

Der folgende Artikel, wurde von Gastautor Oliver Korpilla verfasst und uns zur Verfügung gestellt. Herr Korpilla ist Geschäftsführer von Protected Shops und ist seit 1998 im E-Commerce tätig. Die von Ihm betreuten Kundenprojekte haben bereits über 1 Millionen Endkunden begleitet. Die Praxis Erfahrung auf eBay, Amazon, Yatego sowie mit Online-Shops machen Ihn zu einem Experten im Online-Handel. Im Januar 2010 wurde Oliver Korpilla von den Lesern der Financial Times Deutschland zum Gründer des Monats gewählt.

Der Privatmann sowie der Händler wehren sich immer häufiger gegen unerwünschte E-Mail Werbung. Zum Alltag gehören mittlerweile Reklame E-Mails, die störend und unaufgefordert zugeschickt werden. Personen die hiervon betroffen sind, kostet dies Zeit und Nerven. Aus diesem Grund gehen immer mehr Personen rechtlich dagegen an und die unerwünschten Reklamemitteilungen werden abgemahnt.

Erhält man eine lästige ungewollte Reklame-Email, auch SPAM genannt, in seinem E-Mail Postfach, so kann man gegen den Absender vorsorglich einen Unterlassungsanspruch, für die noch bevorstehenden Mails, geltend machen. Als Privatmann hat man die Möglichkeit, sich auf sein allgemeines Persönlichkeitsrecht zu beziehen. Dies wird durch die Zusendung der ungebetenen Reklamemails in bedeutungsvoller Weise verletzt.

Der Händler bzw. der Unternehmer hat hier andere Möglichkeiten. Diesem steht ebenfalls ein Anspruch auf Unterlassung der Werbeemails zu. Grund ist hier der widerrechtliche Eingriff in den Gewerbebetrieb. Des Weiteren gibt das Versenden unverlangter Reklamemails einen betrügerischen Wettbewerbsvorgang wieder. Dies kann abgemahnt werden, auch wenn der Adressat der Reklamemail ein anderer ist.

Verschiedene Gerichte haben hierzu verschiedene Streitwerte festgelegt. Diese schwanken zwischen 4.500,- € und 7.500,- €. Je von Fall zu Fall wird der Streitwert in einer anderen Höhe festgele

Fazit:

Erhalten Sie eine Werbe-E-Mail und diese ist unverlangt und unerwünscht, so haben Sie die Möglichkeit den Absender abzumahnen. Dies bedeutet, dass für den Absender erhebliche Kosten entstehen. Es wird denjenigen geraten, die Werbenachrichten versenden, den eigenen E-Mail-Versand rechtlich überprüfen zu lassen. Dies wird immer wichtiger, da immer mehr Händler und Privatpersonen gegen die unverlangten Werbenachrichten angehen.

08.07.2011

Tooltip: Die MySQL Workbench

Die MySQL Workbench ist ein hilfreiches Tool, dass die Arbeit bei der Datenmodellierung bzw. des Datenbankdesigns für MySQL um einiges erleichtert und beschleunigt.

Besonders für Mac-User ist die MySQL Workbench interessant, da mir bis dato für Mac OS X kein entsprechendes Tool für die Arbeit mit MySQL-Datenbanken untergekommen ist. MySQL Workbench kann kostenlos von der Website MySQL.de heruntergeladen werden. Dort sind auch zahlreiche Screenshots und eine genaue Funktionsbeschreibungen zu finden.

Das Programm teilt sich in die drei Bereiche "SQL Administration", "Datenmodellierung" und "Server Administration" auf. Über die SQL Administration lassen sich lokale und externe Datenbank-Server verbinden. Dadurch erhält man über ein grafisches Interface Zugriff auf die Tabellen und Daten einer Datenbank. SQL-Statements können ebenso durchgeführt werden. phpMyAdmin oder ähnliche Tools werden somit bei der Arbeit mit einer Datenbank nicht (mehr) benötigt.

Sind für eine Web-Applikation Tabellen zu erstellen und deren Beziehungen untereinander zu definieren, dann kann das ganze, durch reines Tippen durchgeführt, langwierig und fehleranfällig werden. Hier hilft die Datenmodellierung der MySQL Workbench weiter: Über Eingabemasken können zügig Tabellen, Foreign Keys, deren Spalten, Constraints, etc. definiert werden. Und am Ende kann das gesamte Datenbankmodell entweder auf einen Server exportiert werden oder in eine SQL-Datei. Ebenso können Änderungen am DB-Modell mit der Datenbank synchronisiert werden!

Mit dem dritten Bereich, der Server-Administration, hatte ich ehrlich gesagt noch nicht so viel zu tun. In diesem Bereich kann der Datenbank-Server konfiguriert und Benutzer können erstellt werden. Weiters können die Server-Logs abgerufen werden.

Die MySQL Workbench ist auf alle Fälle für diejenigen zu empfehlen, die häufig mit Datenbanken und Modelleriung zu tun haben. Allerdings: Unter Mac OS X ist das Programm etwas unstabil – hier kann manchmal zu Abstürzen kommen. Daher während der Arbeit oft zwischenspeichern!

Kategorie(n):
Kommentare (0)

RSS, Twitter & Facebook