Magento: den Onepage Checkout anpassen

Trotz der Komplexität der Shopsoftware Magento arbeite ich sehr gerne mit dem Tool. Der Nachteil der nicht auf Anhieb zu durchschauenden Architektur des Shopssystems wird durch die dadurch gewonnene Flexibität mehr als aufgewogen. Bei der Anpassung des Onepage Checkouts für unseren Online-Fahrradladen Bikezeug hatte ich allerdings dann doch meine Zweifel, was die alltagstauglichekit von Magento angeht.

Magento Onepage Checkout

Der Magento Onepage Checkout ohne Anpassung

Es geht nur um Kleinigkeiten, die anzupassen sind:

  • Da unser Onlineshop an Privatpersonen verkauft und versendet, benötigen wir die Felder Firma und Fax nicht.
  • Das Pflichtfeld Region macht in den USA vermutlich Sinn, aber in Deutschland einen Kunden nach seinem Bundesland zu fragen ist wohl eher überflüssig.
  • Die Eingabe der Telefonnummer soll optional und kein Pflichtfeld sein. Viele Menschen geben sehr ungern ihre Telefonnummer weiter.

Von Kunden so wenig Daten wie möglich abzufragen hat zwei Gründe: einmal erhöht es die Konversionsrate bei Bestellungen, zum Anderen fordert auch der Datenschutz zurecht möglichst wenig Daten abzufragen (so viel wie nötig, so wenig wie möglich).

Aber ich habe dann doch gestaunt, was in Magento alles zu tun ist, um diese kleine Änderung durchzuführen. Man muss nicht nur die Ausgabe des Formulars im Frontend anpassen, sondern auch die Validierung der Dateneingabe deaktivieren. Es sind drei Schritte notwendig:

  • Anpassen der Dateien, welche die Formulare erzeugen
  • Anpassen des abstrakten Models der Adresse (»Mage_Customer_Model_Address_Abstract«)
  • Änderungen in den Datenbanktabelle »eav_attribute« (»customer_eav_attribute«)

Schritt 1: Anpassung der Formulardateien

In vielen Blogbeiträgen findet man folgende Dateien, die zu ändern sind:

  • template/customer/address/edit.phtml
  • template/checkout/onepage/shipping.phtml
  • template/checkout/onepage/billing.phtml

Es liegt vermutlich an der Magento-Version 1.7, dass es bei mir folgende Dateien waren, die ich ändern musste (außerdem habe ich noch die Registrierung für die Benutzerkonten von den Pflichtfeldern befreit):

  • template/customer/Form/register.phtml
  • template/persitent/customer/Form/register.phtml
  • template/persistent/checkout/onepage/billing.phtml

In diesen Dateien habe ich die Felder Region, Firma und Fax ganz gelöscht. Bei dem Feld Telefon habe ich den Asteriks entfernt sowie die CSS Klasse des <input>-Feldes von der Validierung der Eingabedaten befreit.

Achtung: die Entfernung des Region-Feldes (Bundesland) entfernt nicht die Validierung der Eingabe und führt im Frontend zu einer Fehlermeldung. Die Änderungen sollten außerdem nicht in den Original-Dateien durchgeführt werden, sondern ins eigene Theme kopiert und dort bearbeitet werden!

Schritt 2: Anpassung des Adressen-Models

In der Klasse »app/code/core/Mage/Customer/Model/Address/Abstract.php« sind die Felder bezeichnet, die eine Validierung der Dateneingabe erfordern. Diese Stellen (ganz unten in der Datei) müssen im Code gelöscht bzw. auskommentiert werden. Für das Telefon-Feld ist dies z.B:

if (!Zend_Validate::is($this->getTelephone(), ‚NotEmpty‘)) {
$errors[] = Mage::helper(‚customer‘)->__(‚Please enter the telephone number.‘);
}

Diese Änderungen nicht in der Core-Datei durchführen, sondern eine Kopie der Datei unter »app/code/local/Mage/Customer/Model/Address/Abstract.php« (bzw. «app/code/community/Mage/Customer/Model/Address/Abstract.php« für Magento 1.7) bearbeiten.

Schritt 3: Änderungen in der Datenbank

Als letztes muss in der Daenbank in der Tabelle »eav_attribute« für das Attribut »telephone« noch der Wert des Feldes »is_required« von 1 auf 0 gesetzt werden.

Diese Änderungen hatten bei mir letztendlich genügt, um die nicht mehr benötigete Validierung der Dateneingabe zu deaktivieren. In manchen Blogbeiträgen werden noch Änderungen in der Tabelle »customer_eav_attribute« gemacht: Dazu benötigt man die Attribut-ID aus der Tabelle »eav_attribute« für das entsprechende Telefon-Feld, bei mir die 31, und löscht im dazugehörigen Eintrag der »customer_eav_attribute« den Inhalt des Feldes »validate_rules«. Wie gesagt, bei mir war diese Änderung nicht notwendig.

Fazit

Unglaublich, wo man überall hinlangen muss, um aus einem Pflichtfeld eines Formulars ein optionales Feld zu machen, aber gut. Ein Bein habe ich mir dann selbst noch gestellt, denn die Änderungen hatte ich in einem Testsystem durchgeführt, bei dem ich letztens erst die Magento-Funktion »Kompilieren« ausprobiert hatte. Meine oben beschrieben Änderung wollten einfach nicht funktionieren, erst ein neuerliches kompilieren brachte letztendlich den Erfolg.

Magento Onepage Checkout (neu)

Magento Onepage Checkout mit deutlich weniger Eingabefeldern

Alternativ kann man natürlich auch sein eigenes Checkout-Modul schreiben, was ich in Anbetracht der kleinen Anpassungen aber für einen zu hohen Aufwand halte (es genügen schon die drei oben beschriebenen Schritte). Es gibt aber über Magento-Connect zahlreiche kostenpflichtige Magentomodule, die zumindest der Beschreibung nach eine bequeme Gestaltung der Checkout-Formulare über das Magento-Backend erlauben sollen. Das ist natürlich die ganz feine Lösung.

Für alle Nachahmer: Ich gebe keine Gewähr für die Richtigkeit der oben beschriebenen Lösung. Testet sie unbedingt erst in Eurer Entwicklungsumgebung und nicht auf einem produktiven System. Sorgt für entsprechende Backups!

Der Vollständigkeit halber hier noch ein Blogbeitrag auf englisch, der das Vorgehen gut zusammengefasst beschreibt:
http://reinoud.net/2011/03/magento-removing-mandatory-validation-of-telephone-field/

Lesetipps zum Thema Magento(Affiliate-Links):

2 Kommentare

  1. Ja, danke schön. Und wer das Nostate Extension verwendet ändert zweimal template/nostate/checkout/onepage/biiling.phtml

    LG,
    c–

    Antworten
  2. Hallo,

    sitze gerade auch an dem Checkout. Unter anderem musste ich die Felder PLZ und Stadt neben einander plazieren. Das Problem ist nun dass die Fehlermeldungen ja hinter dem jeweiligem Feld erscheinen und mir so den Layout zerschiessen. Ist die Ausgabe der Fehlermeldungunge irgendwo konfigurierbar?

    Gruß, Jury

    Antworten

Trackbacks/Pingbacks

  1. Magento: Compiler deaktivieren, wenn das Backend nicht erreichbar ist | virtual-commerce.de - [...] Magento: den Onepage Checkout anpassen [...]
  2. Die am häufigsten aufgerufenen Blogbeiträge im Januar 2013 | virtual-commerce.de - [...] Magento: den Onepage Checkout anpassen [...]
  3. Die am häufigsten aufgerufenen Blogbeiträge im Februar 2013 | virtual-commerce.de - [...] Magento: den Onepage Checkout anpassen [...]
  4. Die am häufigsten aufgerufenen Blogbeiträge im März 2013 | virtual-commerce.de - [...] Magento: den Onepage Checkout anpassen [...]
  5. Magento-Installation läuft nicht | virtual-commerce.de - [...] Magento: den Onepage Checkout anpassen [...]
  6. Die am häufigsten aufgerufenen Blogbeiträge im Mai 2013 | virtual-commerce.de - […] Magento: den Onepage Checkout anpassen […]

Kommentar absenden

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *