Magento Forum

   
Pflichtfelder im Checkout [gelöst]
 
GFEMajor
Sr. Member
 
Total Posts:  138
Joined:  2010-01-11
 

Ich hoffe mir kann einer helfen denn ich verzweifel langsam.

Ich bin auf 1.4.0.1.

Im Checkout werden mir die Telefonnummer als Pflichtfeld und die Postleitzahl als optionales Feld angezeigt. Das ganze scheint aber ein Problem nur im Frontend zu sein, denn wenn ich die postleitzahl frei lasse dann bekomm ich eine servermeldung, dass ich die PLZ eintragen soll (aber keine JS Meldung, also die rote box um das Eingabefeld).
Weiterhin muss ich eine Telefonnummer angeben. Wenn ich aber per Firebug den Quelltext im laufenden Betrieb ändere und jeweils die validierungsklassen von den eingabefeldern lösche, kann ich die bestellung ohne Telefonnummer absenden.

Im Template sieht das ganze folgendermaßen aus (app\design\frontend\default\meinTemplate\template\checkout\onepage\billing.phtml):

<li class="fields">
                    <
div class="field">
                        <
label for="billing:postcode" class="required"><em>*</em><?php echo $this->__('Zip/Postal Code'?></label>
                        <
div class="input-box">
                            <
input type="text" title="<?php echo $this->__('Zip/Postal Code') ?>" name="billing[postcode]" id="billing:postcode" value="<?php echo $this->htmlEscape($this->getAddress()->getPostcode()) ?>" class="input-text validate-zip-international required-entry" />
                        </
div>
                    </
div>
                    <
div class="field">
                        <
label for="billing:country_id" class="required"><em>*</em><?php echo $this->__('Country'?></label>
                        <
div class="input-box">
                            
<?php echo $this->getCountryHtmlSelect('billing'?>
                        
</div>
                    </
div>
                </
li>
                <
li lang="fields">
                    <
div class="field">
                        <
label for="billing:telephone"><?php echo $this->__('Telephone'?></label>
                        <
div class="input-box">
                            <
input type="text" name="billing[telephone]" value="<?php echo ($this->htmlEscape($this->getAddress()->getTelephone()))?$this->htmlEscape($this->getAddress()->getTelephone()):"-") ?>" title="<?php echo $this->__('Telephone') ?>" class="input-text" id="billing:telephone" />
                        </
div>
                    </
div>
                    <
div class="field">
                        <
label for="billing:fax"><?php echo $this->__('Fax'?></label>
                        <
div class="input-box">
                            <
input type="text" name="billing[fax]" value="<?php echo $this->htmlEscape($this->getAddress()->getFax()) ?>" title="<?php echo $this->__('Fax') ?>" class="input-text" id="billing:fax" />
                        </
div>
                    </
div>
                </
li>

Diese Datei liegt in meinem eigenen Template.
Zum Test habe ich mal die Block und Pfadhinweise aktiviert. Dort steht, dass nicht die billing.phtml aus mein template, sondern dass aus NoRegion verwendet wird. Aber auch hier sind die Pflichtangaben genau “anders herum”:

<li><div class="input-box">
                <
label for="billing:postcode"><?php echo $this->__('Zip/Postal Code'?> <span class="required">*</span></label><br />
                <
input type="text" title="<?php echo $this->__('Zip/Postal Code') ?>" name="billing[postcode]" id="billing:postcode" value="<?php echo $this->htmlEscape($this->getAddress()->getPostcode()) ?>" class="validate-zip-international required-entry input-text" /></div>
                <
div class="input-box">
                <
label for="billing:city"><?php echo $this->__('City'?> <span class="required">*</span></label><br />
                <
input type="text" title="<?php echo $this->__('City') ?>" name="billing[city]" value="<?php echo $this->htmlEscape($this->getAddress()->getCity()) ?>" class="required-entry input-text" id="billing:city" /></div>
            </
li>
[...]
<div class="input-box">
                <
label for="billing:telephone"><?php echo $this->__('Telephone'?></label><br/>
                <
input type="text" name="billing[telephone]" value="<?php echo $this->htmlEscape($this->getAddress()->getTelephone()) ?>" title="<?php echo $this->__('Telephone') ?>" class="input-text" id="billing:telephone" /></div>

Ich hoffe echt mir kann jemand helfen, denn das ist echt nervig!

Greets Major

edit1:
Ich habe mal testweise in den 3 billing.phtml (aus meinem Template, dem von noRegion und dem Base-Template) eine Testausgabe im Label der Telefonnummer gemacht. Also einfach <strong>Test</strong> bzw. <strong>Test2</strong> usw. reingeschrieben. Aber diese Ausgabe erscheint nirgendwo. Deshalb frage ich mich, wo der Code für den Checkout her kommt. Irgendwas läuft da bei mir anscheinend grundsätzlich schief.

Btw.: Caches sind alle deaktiviert bzw geleert.

Edit2:
Die Sache mit der Postleitzahl hat sich erledigt. ich hatte im Backend bei der Allgemeinen Konfiguration eingestellt, dass bei deutschland die PLZ optional ist.
Probleme macht aber immer noch die Telefonnummer!Sie ist immer noch als Pflichtfeld markiert, obwohl sie das nicht sein sollte!

 
Magento Community Magento Community
Magento Community
Magento Community
 
ds_1984
Mentor
 
Avatar
Total Posts:  3116
Joined:  2008-12-09
Potsdam, Germany
 

Die Telefonnummer Validierung wird über mein NoRegion Modul bereits ausschalten - geh mal nach
app/code/local/Mxperts/NoRegion/Model/Address.php & app/code/local/Mxperts/NoRegion/Model/Quote/Address.php

Dort siehst du dann das die Telefonnummer Validierung wie auch Bundesland kalt gestellt ist:

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

Sodass man lediglich Templates anpassen muss.

So muss es angepasst werden damit es funktioniert:

Standard NoRegion Template - Magento 1.4 (billing.phtml):

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

Anpassung NoRegion Template - Magento 1.4 (billing.phtml - nicht updatesicher!!!):

<div class="field">
    <
label for="billing:telephone" class="required"><?php echo $this->__('Telephone'?></label>
    <
div class="input-box">
    <
input type="text" name="billing[telephone]" value="<?php echo $this->htmlEscape($this->getAddress()->getTelephone()) ?>" title="<?php echo $this->__('Telephone') ?>" class="input-text" id="billing:telephone" />
    </
div>
</
div>

Gegebenenfalls muss die Klasse required auch noch raus, habe ich noch nicht ausprobiert.

LG - Daniel

 
Magento Community Magento Community
Magento Community
Magento Community
 
GFEMajor
Sr. Member
 
Total Posts:  138
Joined:  2010-01-11
 

genau das hab ich ja gemacht. Hier der betreffende Ausschnitt aus meiner app\design\frontend\default\default\template\noregion\checkout\onepage\billing.phtml:

<div class="input-box">
                <
label for="billing:telephone"><?php echo $this->__('Telephone'?></label><br/>
                <
input type="text" name="billing[telephone]" value="<?php echo $this->htmlEscape($this->getAddress()->getTelephone()) ?>" title="<?php echo $this->__('Telephone') ?>" class="input-text" id="billing:telephone" /></div>

Und wenn ich die Pfad und Blockhinweise anzeigen lasse steht da, dass die Datei “frontend/default/default/template/noregion/checkout/onepage/billing.phtml” für die Anzeige verwendet wird und zwar der Block “Mage_Checkout_Block_Onepage_Billing”. Darum wundert es mich ja, dass es nicht geht.

Der Quelltext, der angezeigt wird, wenn ich den Checkout aufrufe ist folgender:

<div class="field">
      <
label for="billing:telephone" class="required"><em>*</em>Telefon</label>
      <
div class="input-box">
             <
input type="text" name="billing[telephone]" value="" title="Telefon" class="input-text required-entry" id="billing:telephone" />
       </
div>

</
div>

Wenn ich nun mittels Firebug die beden relevanten Klassen ("required" und “required-entry") entferne, klappt der Checkout.

 
Magento Community Magento Community
Magento Community
Magento Community
 
robin2160
Mentor
 
Avatar
Total Posts:  1043
Joined:  2009-02-15
Berlin / Germany
 

Soviel ich weiss gibt es die

<input type="text" name="billing[telephone]" value="" title="Telefon" class="input-text required-entry" id="billing:telephone" />
2 x im noregion billing-Template. Je nach verwendeter Version.
Vieleicht hast du nicht im richtigen Abschnitt geändert.  wink

VG Stefan

 
Magento Community Magento Community
Magento Community
Magento Community
 
GFEMajor
Sr. Member
 
Total Posts:  138
Joined:  2010-01-11
 

omg - da hätte ich auch selbst drauf kommen können. Aber an so eine Möglichkeite habe ich gar nicht gedacht. Danke für den Hinweis, es geht jetzt.

 
Magento Community Magento Community
Magento Community
Magento Community
 
GFEMajor
Sr. Member
 
Total Posts:  138
Joined:  2010-01-11
 

Eine Frage hätte ich aber noch.

Kann man das Pflichtfeld Telefon auch im Backend ausschalten? Serverseitig wirds ja nicht validiert, aber die Javascriptüberprüfung ist noch an.
Ich finde aber die Datei nicht, in der die Adresse generiert wird bzw. wo das Template liegt, um die Telefonnummer nicht mehr als Pflichtfeld zu machen.

Danke schonmal im voraus

 
Magento Community Magento Community
Magento Community
Magento Community
 
ds_1984
Mentor
 
Avatar
Total Posts:  3116
Joined:  2008-12-09
Potsdam, Germany
 

Ich meine ja, ab magento 1.4 - dazu benötigst du aber ein Modul & damit es auch funktioniert habe ich neulich eine Info zum Thema geschrieben.

Region findest du dann mit dem Modul unter “customer’s adress attributes”

http://www.golox-web.de/pol-attribute-manager-magento-1-4

Das mit den doppelten Themes wurde so gemacht damit die NoRegion Themes gleichermaßen unter Magento 1.3 & 1.4 funktionieren,
da sich die Template Dateien vom default hier sehr stark unterscheiden!!!

LG - Daniel

 
Magento Community Magento Community
Magento Community
Magento Community
 
aikar
Jr. Member
 
Total Posts:  12
Joined:  2010-06-10
 

Die Sache mit der Postleitzahl hat sich erledigt. ich hatte im Backend bei der Allgemeinen Konfiguration eingestellt, dass bei deutschland die PLZ optional ist.

Wie genau, hast du die PLZ wiedr aktiviert? Ich finde keinen entsprechenden Eintrag.

 
Magento Community Magento Community
Magento Community
Magento Community
 
GFEMajor
Sr. Member
 
Total Posts:  138
Joined:  2010-01-11
 

Einfach in die System => Konfiguration => Allgemein => Allgemein und dann im ersten Eintrag (bei mir Country Options). Dort findest du “Postal Code is Optional for the following countries” da darf Deutschland *nicht* selektiert sein!

 
Magento Community Magento Community
Magento Community
Magento Community
 
aikar
Jr. Member
 
Total Posts:  12
Joined:  2010-06-10
 

Vielen Herzlichen Dank, das war genau das, was ich gesucht habe.

 
Magento Community Magento Community
Magento Community
Magento Community
 
betaversion
Jr. Member
 
Total Posts:  29
Joined:  2009-10-12
 

Hi!
Ich wollte auch das Telefon als Pflichtangabe raushaben.
Was ich in der billing.phtml geändert habe, hat nichts bewirkt.
Nachdem ich die gleiche Änderung wie im 2. Post von Daniel beschrieben in der
app\design\frontend\default\default\template\noregion\customer\address.phtml
durchgeführt habe, ist bei mit jetzt aber alles in Butter!

(Falls nochmal jemand über die Suche auf den Thread kommt)

Nachrtrag: Ebenfalls in der
\default\deintemplatename\template\checkout\onepage\shipping.phtml

 
Magento Community Magento Community
Magento Community
Magento Community
 
mrjozo
Jr. Member
 
Total Posts:  1
Joined:  2011-01-21
 

Hi,
bei mir hat es auch so geklappt.
Also jeweils 2mal in der billing.phtml und shipping.phtml

 
Magento Community Magento Community
Magento Community
Magento Community
 
martin333
Jr. Member
 
Total Posts:  22
Joined:  2011-03-12
 

Es kann bei Euch noch nicht geklappt haben, damit die Telefonnummer als Pflichtfeld verschwindet.

Also man muss nicht nur das required in der Shipping.phtml und der Billing.phtml für Telephone herausnehmen (Gegebenenfalls auch im no regio Ordner
Die Datenbank nicht vergessen auf nein setzen
Sondern ... wenn man als Gast kaufen möchte, kommt trotzdem der Hinweis, dass die Telefonnummer benötigt wird!
/shop/app/code/core/Mage/Customer/Model/Address/abstract.php
Zeile 352 bis 354 muss auskommentiert werden in:
//if (!Zend_Validate::is($this->getTelephone(), ‘NotEmpty’)) {
// $errors[] = $helper->__(’Please enter the telephone number 123.’);
// }
Jetzt nochmal alle Tipps zusammen:
1) Die Ordner sind eventuell bei 1.5 anders aber sinngemäß..
/app/design/frontend/default/<theme>/template/checkout/onepage/billing.phtml
/app/design/frontend/default/<theme>/template/checkout/onepage/shipping.phtml
es sind jeweils zwei Einträge herauszunehmen.
entferne “required-entry” as a class from the input control for id="billing:telephone"
lasse “Text feld” drin. Orientiere dich an der Fax nummer, die ist ja auch kein Pflichtfeld.

Das muss ganz raus bei Telephone
<span class="required">*</span>
1 B) dasselbe eventuell im noregio Ordner im gewählten Template

2) In /app/code/core/Mage/Customer/Model/Address/Abstract.php, comment the lines:
Backup anlegen (auch der veränderten Datei bei einem Update von Magento
/app/code/core/Mage/Customer/Model/Address/abstract.php
Zeile 352 bis 354 muss auskommentiert werden in:
//if (!Zend_Validate::is($this->getTelephone(), ‘NotEmpty’)) {
// $errors[] = $helper->__(’Please enter the telephone number 123.’);
// }

3)
datenbank:
eav_attribute” (am besten suchen nach telephone , dann die eav_attribute auswählen und die Option für Telephon muss o (null) sein.
unter “is _require” of the attribute “telephone”

4)
Edit Magento 1.5
/app/design/frontend/base/default/template/customer/address/edit.phtml
Zeile 58 entferne für Telephone
class="required"><em>*</em>
und Zeile 60
von so
class="input-text required-entry”
in so
class="input-text"

Für den persönlichen Templateordner sieht das so aus:
app/design/frontend/default/DEINTEMPLATE/template/customer/address/edit.phtml

Ich dachte doch schon, dass es 5 Stunden dauert bis man als Anfänger die Tipps zusammen hat. Wenn ich was hasse, dann ist es so was.

 
Magento Community Magento Community
Magento Community
Magento Community
 
ds_1984
Mentor
 
Avatar
Total Posts:  3116
Joined:  2008-12-09
Potsdam, Germany
 

Ganz dreckig im Core gehackt, pfui.

Wenn NoRegion installiert ist dann kann man die Serverseitige Validierung auch in den bereit gestellten Dateien unter
app/local/Mxperts/NoRegion/Model… ausknipsen für dieses Attribut.

Klar Veränderungen sind ebenfalls wieder weg wenn man diese Extension updated aber besser so als wenn man im Core herum pfuscht denke ich.

Die Frontend Dateien die im noregion Ordner liegen, können ebenfalls genutzt werden, sofern - dort dieses Feld enthalten ist.
Durch Auslagerung der Dateien in ein eigenes Theme werden diese zudem updatefähig, da sie beim Update von NoRegion nicht berührt werden.

LG - Daniel

 
Magento Community Magento Community
Magento Community
Magento Community
 
STEP_Software
Jr. Member
 
Total Posts:  22
Joined:  2009-01-27
 

magento 1.6.x uses the billing.phtml in this “persistent” directory:

/app/design/frontend/base/default/template/persistent/checkout/onepage

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
    Back to top