Optionale Telefonnummer beim Checkout

Der Checkout-Bereich sollte bestmöglichst optimiert sein und dem Kunden keine unnötige Eingaben abverlangen. Während in anderen Ländern die Angabe der Telefonnummer zwecks Zustellung Sinn macht, ist sie in einem Deutschen Shop überflüssig. Magento verpflichtet den Kunden zur Eingabe der Telefonnummer, und dies lässt sich im Administrationsbereich nicht ändern.

Die folgenden Schritte beschreiben, wie die  Telefonnummer zu einer optionalen Eingabe geändert werden kann.

1. Anpassung in der Datenbank

UPDATE eav_attribute
  SET is_required = 0
  WHERE attribute_code = 'telephone';

2. Anpassung im Code

local-Codeverzeichnis anlegen:

mkdir -p /htdocs/magento/app/code/local/Mage/Customer/Model/Address/

Betroffene Datei in das local-Codeverzeichnis kopieren:

cp /htdocs/magento/app/code/core/Mage/Customer/Model/Address/Abstract.php
   /htdocs/magento/app/code/local/Mage/Customer/Model/Address

Im Code-Editor nach getTelephone suchen und die Zeilen zur Prüfung der Telefonnummer auskommentieren:

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

3. Anpassung im Template

Betroffene Dateien:

/htdocs/magento/app/design/frontend/default/mytheme/
   /template/checkout/onepage/billing.phtml
   /template/checkout/onepage/shipping.phtml
   /template/customer/address/edit.phtml
   /template/customer/form/register.phtml

Hinweis: Ist die Erweiterung NoRegion installiert, verwendet Magento die o. g. Dateien aus dem Template-Verzeichnis der Erweiterung:

/htdocs/magento/app/design/frontend/default/default/template/noregion

Vor der Anpassung sollte das Verzeichnis von NoRegion inkl. aller Unterverzeichnisse und Dateien in das eigene Template-Verzeichnis kopiert werden:

/htdocs/magento/app/design/frontend/default/mytheme/template/noregion

In den drei Dateien müssen jeweils alles mit „require“ rund um das telephone-Textfeld entfernt werden:

<label for="shipping:telephone" class="required"><em>*</em>
<?php echo $this->__('Telephone') ?></label>
<div class="input-box">
<input type="text" name="shipping[telephone]"
value="<?php echo $this->htmlEscape($this->getAddress()
->getTelephone()) ?>"
title="<?php echo $this->__('Telephone') ?>"
class="input-text required-entry" id="shipping:telephone"
onchange="shipping.setSameAsBilling(false);" />
</div>

11 Gedanken zu „Optionale Telefonnummer beim Checkout“

  1. Magento, Magento!!!
    Es ist ziemlich unschön, wenn man in Code und Templates herumkramen muss, um Einstellungen für ein Pflichtfeld vorzunehmen.
    Die serverseitige Änderung im Customer-Model und im Datenbank-Eintrag für das Attribut „telephone“ ist wohl nicht zu vermeiden.
    Für die Änderung in Templates benutze ich lieber Javascript, so dass erst im Client die notwendigen Anpassungen vollzogen werden.
    Ich habe in
    Konfiguration > Gestaltung > Fußzeile > Verschiedenes HTML
    folgendes eingefügt:

    telephoneInput = document.getElementById("billing:telephone");
    if(telephoneInput) {
    telephoneInputClass = telephoneInput.getAttribute("class");
    telephoneInput.setAttribute("class","input-text");

    labels = document.getElementsByTagName("label");
    for(i=0; i<labels.length; i++) {
    label = labels[i];
    if(label.getAttribute("for") == "billing:telephone") {
    if(label.firstChild.innerHTML == "*") {
    label.firstChild.innerHTML = "";
    }
    }
    }

    }


    Ich habe noch nicht nachgeprüft, ob damit wirklich alle Fälle abgedeckt werden. Aber im Laufe der nächsten Tage -während der weiteren Einrichtung von Magento- wird sich das herausstellen, dann poste ich hier gerne noch den Rest.

  2. Das ist ein guter Tipp, man sollte aber beachten, dass für den Versand in bestimmte Länder die Telefonnummer notwendig ist. So ist beim Versand nach Spanien über die DHL die Angabe der Telefonnummer des Empfängers pflicht.

  3. Ich habe alle o.g. Schritte durchgeführt und auch /template/persistent/checkout/onepage/billing.phtml angepasst.
    Cache mehrmals geleert; Telefon bleibt ein Pflichtfeld!
    Ich habe allerdings nicht die Erweiterung NoRegion sondern die DsData. Hängt es vielleicht damit zusammen?

    1. Richtig erkannt: DsData NoState ersetzt die Formulare für Rechnung- und Lieferadresse durch eigene. In diesem Fall müssen die Dateien billing.phtml und shipping.phtml aus dem Verzeichnis app\design\frontend\base\default\template\nostate\checkout\onepage angepasst werden.

      Damit Ihre Anpassungen nach dem Update von DsData NoState nicht überschrieben werden, sollten Sie die o. g. Dateien inkl. der Verzeichnisstruktur in das eigene Theme-Verzeichnis kopieren und erst dort anpassen.

  4. Hallo!
    Ich habe mit DSdata ein Problem, vielleicht werde ich ja hier fündig. Ich habe das Bundesland nun ausblenden können.
    Allerdings öffnet sich nach Eingabe der Rechnungsdaten nun nicht mehr automatisch der „Tab“ Versandinformationen…
    Ist das ein bekanntes Problem? Ich habe nichts darüber gefunden.

  5. Diese Anleitung habe ich mit NoRegion ausprobiert; damit gibt es keine Probleme.
    Banifou scheint das Problem mit NoState auch nicht zu haben (Oder hatte es zu dem Zeitpunkt noch nicht bemerkt?).
    Möglicherweise sind bei NoState noch weitere Anpassungen erforderlich, oder es liegt ein Konflikt mit einer anderen Extension vor, die Checkout modifiziert.

    1. In der Tat, die Tab Versandinformationen öffnet sich nicht. Ich bin mir nicht sicher, ob es vorher tat. Da wir nur „Versandkostenfrei“ anbieten, erscheint dies bei Versandsart…
      Hat ak das Problem gelöst? würde mich interessieren.

  6. Hallo. Ich habe dieses Tut

    http: //50north.de/telefon-als-pflichtfeld-in-magento-the-ultimate-solution/

    welches auch auf dieses hier verweist versucht und das klappte 1a. Telefon ist nun kein Pflichtfeld mehr.

    Nun zu einen anderen Problem. Ich würde das Feld PLZ gerne zur Pflicht machen da man bei der Paypal Bezahloption ohne PLZ immer einen Fehler bekommt. Ich habe folgenden Code

    “ if (!Zend_Validate::is($this->getPostcode(), ‚NotEmpty‘)) {
    $errors[] = Mage::helper(‚customer‘)->__(‚Bitte geben Sie eine Postleitzahl ein.‘);
    }

    in die Datei „/htdocs/magento/app/local/core/Mage/Customer/Model/Address/Abstract.php“ eingefügt.
    nun kommt zumindest ein Popup wenn die PLZ fehlt. Das würde reichen. Aber es muss doch möglich sein das ganze Tut in Umgekehrter Reihenfolge auf ein nicht Pflichtfeld anzuwenden um so das Feld zu Pflicht zu machen.

    Ich habe in den ganzen billing und co dateien aus
    „class=“input-text validate-zip-international helper(‚customer/address‘)->getAttributeValidationClass(‚postcode‘) ?>“
    „class=“input-text helper(‚customer/address‘)->getAttributeValidationClass(‚postcode‘) ?>“
    gemacht. Quasi das „validate-zip-international“ entfern. Hat leider nicht funktioniert.

    Den Roten Stern bekommt man hin in dem man das * nach dem PHP nochmals einfügt. Sieht dann so aus.

    *__(‚Zip/Postal Code‘) ?>*

Schreibe einen Kommentar zu Banifou Antworten abbrechen

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