Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Page 2 of 5
Adressformular Pflichtfelder
 
ds_1984
Mentor
 
Avatar
Total Posts:  3116
Joined:  2008-12-09
Potsdam, Germany
 

Welche PHP Datei habt ihr denn letztenendes verwendet?

Irgenwie will es noch nicht so richtig…

Bitte mal wenn es nicht zu viele Umstände macht eine kleine Ãœbersicht posten. Welche Dateien wo hingehören und ob ich da etwa in “Custumer” oder so noch weitere Verzeichnisse brauche.

Wo wurde wie das JavaScript deaktiviert?

Bitte mal wenn möglich eine Art 1. 2. 3. Anleitung erstellen. Bin für jede Hilfe dankbar.

EDIT: Wenn das mit der Beschreibung zu viel wäre, könnten die jenigen wo es läuft auch gerne ein ZIP-Archiv posten wo die betreffenden Dateien dabei sind & in einer “Info.txt” drin steht wo die Dateien hinkommen. Die restlichen Anpassungen bekomme ich ja selber hin.

Danke - Liebe Grüße

Daniel

 
Magento Community Magento Community
Magento Community
Magento Community
 
skeptic35
Jr. Member
 
Total Posts:  10
Joined:  2008-11-25
 

Ok, hier also nochmal langsam zum Mitschreiben:

Die Beispiele hier gehen davon aus, dass das eigene Layout unter app/design/frontend/default/MyCode zu finden ist und eigener Code unter app/code/local/MyCode.
Wir entfernen die Eingabeprüfung für die Telefonnummer.
Step 1: Javascript Prüfung abschalten
Das Template dazu liegt unter app/design/frontend/default/MyCode/template/checkout/onepage und heißt billing.phtml. Darin finden wir folgendes:

<input type="text" name="billing[telephone]" value="<?php echo $this->htmlEscape($this->getAddress()->getTelephone()) ?>" title="<?php echo $this->__('Telephone') ?>" class="required-entry input-text" id="billing:telephone" />
Alles was hier zu tun ist ist “required-entry” aus dem “class” Attribut zu entfernen und schon wird das Feld nicht mehr in die Javascript-Prüfung einbezogen.
Das gleiche machen wir in shipping.phtml (gleicher Folder). Da heißt das Feld halt “shipping[telephone]”.

Step2: PHP-Prüfung abschalten
Die Original-Adressprüfung liegt in app/code/core/Mage/Customer/Model/Address/Abstract.php (Funktion “validate"). Die wollen wir überladen. Leider scheint es tatsächlich nicht möglich zu sein ein Abstract zu überladen (ist mir jedenfalls nicht gelungen). Deshalb überladen wir stattdessen die von diesem Abstract abgeleiteten Klassen. Das sind drei Stück:
a) app/code/core/Mage/Customer/Model/Address.php
b) app/code/core/Mage/Sales/Model/Order/Address.php
c) app/code/core/Mage/Sales/Model/Quote/Address.php
Soweit mir bekannt ist es nicht notwendig b) zu überladen. Beschränken wir uns also auf a) und c)
Step 2a:
In app/code/local/MyCode/Customer/Model/ ein File Address.php anlegen mit folgender Klassendefinition:

class MyCode_Customer_Model_Address extends Mage_Customer_Model_Address
Enthalten ist nur eine Funktion, nämlich eine Kopie der oben erwähnten validate() Funktion aus der wir die Telefonnummerprüfung entfernen.
Step 2b:
In app/code/local/MyCode/Sales/Model/Quote/ ein File Address.php anlegen mit folgender Klassendefinition:
class MyCode_Sales_Model_Quote_Address extends Mage_Sales_Model_Quote_Address
Enthalten ist die gleiche Funktion wie in 2a
Step 3: Unsere Module aktivieren.
Dazu in app/etc/modules ein File MyCode_All.xml anlegen (oder erweitern wenn man es schon hat) und darin folgendes eintragen:
<config>
    <
modules>
        <
Mycode_Customer>
            <
active>true</active>
            <
codePool>local</codePool>
        </
Mycode_Customer>
        <
Mycode_Sales>
            <
active>true</active>
            <
codePool>local</codePool>
        </
Mycode_Sales>    
     </
modules>
</
config>
Step 4: Dafür sorgen, dass unsere validate Funktionen verwendet werden.
Dafür gibt es mehrere Möglichkeiten ich beschreibe nur eine davon
In app/code/local/MyCode/Customer legen wir einen Folder “etc” an und darin ein File config.xml. Inhalt ist:
<config>
    <global>
        <
models>
            <
customer>
                <
rewrite>
                    <
address>MyCode_Customer_Model_Address</address>
                </
rewrite>
            </
customer>
        </
models>
    </global>
</
config>
Analog dazu schreiben wir eine config.xml in app/code/local/MyCode/Sales/etc/
<config>
    <global>
        <
models>
            <
sales>
                <
rewrite>
                    <
quote_address>MyCode_Sales_Model_Quote_Address</quote_address>
                </
rewrite>
            </
sales>
        </
models>
    </global>
</
config>

Und falls ich nichts vergessen habe war es das.

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

@ skeptic35:
Vielen Dank, werde es bei der nächsten freien Minute mal durcharbeiten. Es ist nicht so das ich es an sich nicht verstanden hätte aber irgendwie haben mich die vielen verschiedenen Posts auf der Vorseite etwas verwirrt.

Danke nochmal !!!

Liebe Grüße - Daniel

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

Klappt supiii !!! DANKE. Hatte zwar zunächst unter Sales den Ordner Quote vergessen und somit einen schönen ERROR, aber ansonsten war es nicht so schwer das nachzubauen. In meinem Fall konnte ich somit auch gleich die Abfrage von Bundesland deaktivieren.

Vielen Dank, was mich noch interessieren würde ist wie man da mal eben ein Feld für Kundennummer reinbauen kann…

Liebe Grüße - Daniel

 
Magento Community Magento Community
Magento Community
Magento Community
 
RolandG
Member
 
Total Posts:  75
Joined:  2008-05-16
 

Habe das gleiche Problem. Möchte das Feld Bundesland nicht mehr als Pflichtfeld haben und bin die obenstehende Anleitung durchgegangen. Leider ohne Erfolg… Funktioniert diese Anleitung auch für das Formular “Benutzeraccount anlegen” oder muss ich da etwas anderes beachten?

Gruss
Roland

 
Magento Community Magento Community
Magento Community
Magento Community
 
ds_1984
Mentor
 
Avatar
Total Posts:  3116
Joined:  2008-12-09
Potsdam, Germany
 
RolandG - 20 April 2009 01:28 PM

Möchte das Feld Bundesland nicht mehr als Pflichtfeld haben und bin die obenstehende Anleitung durchgegangen. Leider ohne Erfolg… Funktioniert diese Anleitung auch für das Formular “Benutzeraccount anlegen” oder muss ich da etwas anderes beachten?

Gruss
Roland

Das mit dem Bundesland kannst du ähnlich lösen wie bei Telefonnummer. Nur das hier die Klasse im Template dafür zustänig ist, dass es eben ein Pflichtfeld ist & die Extension hier nicht so greift wie sie soll.

Geh mal unter app/design/frontend/default/default/template/checkout/onepage und darin die billing.phtml & die shipping.phtml öffnen. Da sind die Eingabefelder für den Checkout drin.

Nun ist es wichtig das diese Felder die keine Pflichtfelder sind auch hier entsprechend gekennzeichnet sind, in dem Fall per CSS-Klassen, da diese mit der Validierung selbst interagiert.
Bei Telefon auf (Nichtpflichtfeld) setzen wie folgt verfahren (in beiden Dateien)

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

Kein Pflichtfeld mehr:
<
div class="input-box">
                        <
label for="billing:telephone"><?php echo $this->__('Telephone'?> <!--<span class="required">*</span>--></label><br />
                        <
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>

Wie du siehst, wurden für die Telefonnummer alleine 2 Klassen verändert durch Auskommetierung.

Bei Bundesland ist es ähnlich

Original:

<label for="billing:region"><?php echo $this->__('State/Province'?> <span class="required">*</span></label><br/>
                <
select id="billing:region_id" name="billing[region_id]" title="<?php echo $this->__('State/Province') ?>" class="validate-select" style="display:none">
                    <
option value=""><?php echo $this->__('Please select region, state or province'?></option>
                </
select>
                <
script type="text/javascript">
                    $(
'billing:region_id').setAttribute('defaultValue',  "<?php echo $this->getAddress()->getRegionId() ?>");
                
</script>
                
<input type="text" id="billing:region" name="billing[region]" value="<?php echo $this->htmlEscape($this->getAddress()->getRegion()) ?>"  title="<?php echo $this->__('State/Province') ?>" class="input-text" style="display:none" />
                </
div>
Nicht mehr Pflichtfeld:
<label for="billing:region"><?php echo $this->__('State/Province'?> <!--<span class="required">*</span>--></label><br/>
                <
select id="billing:region_id" name="billing[region_id]" title="<?php echo $this->__('State/Province') ?>" <!--class="validate-select"--> style="display:none">
                    <
option value=""><?php echo $this->__('Please select region, state or province'?></option>
                </
select>
                <
script type="text/javascript">
                    $(
'billing:region_id').setAttribute('defaultValue',  "<?php echo $this->getAddress()->getRegionId() ?>");
                
</script>
                
<input type="text" id="billing:region" name="billing[region]" value="<?php echo $this->htmlEscape($this->getAddress()->getRegion()) ?>"  title="<?php echo $this->__('State/Province') ?>" class="input-text" style="display:none" />
                </
div>
In meinem Fall habe ich da für meine Zwecke uninteressant, den kompletten Block für Bundesland ausgeblendet:
<div class="input-box" style="display:none;">
Dann hier das Feld für Bundesland-Auswahl.
</
div>

Hier habe ich das Feld einfach in eine DIV-Box gepackt und diese komplett auf display:none; gesetzt.

Jetzt ist eben wichtig das du wie weiter oben hier im Post beschrieben in deinen überschreibenden Dateien das Bundesland & Telefonnummer durch Auskommentierung deaktiviert ist, damit das auch läuft wie es soll.

Liebe Grüße - Daniel

 
Magento Community Magento Community
Magento Community
Magento Community
 
KayK
Sr. Member
 
Total Posts:  81
Joined:  2008-06-11
 

Hallo;
vielen Dank an @skeptic35 und @ds_1984 für die schöne Anleitung.

Wichtig zu erwähnen ist noch, dass Ihr auch noch die gleichen Anpassungen in der Datei
app/design/frontend/default/default/template/customer/address/edit.phtml
vornehmt.

Diese Datei ist verantwortlich für die Registrierten Kunden wenn diese Ihre Adressdaten ändern möchten. 

Gruß Kay

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

Uups, habe ich vergessen (edit.phtml) - danke für die Info!  LOL

LG - Daniel

 
Magento Community Magento Community
Magento Community
Magento Community
 
shaysweetheart
Member
 
Total Posts:  39
Joined:  2009-05-04
 

Hi,
ich hab immernoch so meine Probleme.
Als erstes hab ich die function validate() unter core\Mage\Customer\Model\Address\Abstract.php gefunden und nicht unter core\Mage\Customer\Model\Address.php
Bei Sales/Model/Quote/Adress.php konnte ich sie gar nicht finden.
In den entsprechenden Dateien hab ich alles auskommentiert:

<!--   <li>  <div class="input-box">
            <
label for="shipping:region_id"><?php //echo $this->__('State/Province') ?> <span class="required">*</span></label><br />
            
<select id="shipping:region_id" name="shipping[region_id]" title="<?php //echo $this->__('State/Province') ?>" class="validate-select" style="display:none">
                <
option value=""><?php //echo $this->__('Please select region, state or province') ?></option>
            
</select>
            <
script type="text/javascript">
                $(
'shipping:region_id').setAttribute('defaultValue',  "<?php //echo $this->getAddress()->getRegionId() ?>");
            
</script>
            
<input type="text" id="shipping:region" name="shipping[region]" value="<?php //echo $this->htmlEscape($this->getAddress()->getRegion()) ?>" title="<?php //echo $this->__('State/Province') ?>" class="input-text" style="display:none" /></div></li>
       
            <
div class="input-box">
            <
label for="shipping:country_id"><?php //echo $this->__('Country') ?> <span class="required">*</span></label><br />
            
<?php //echo $this->getCountryHtmlSelect('shipping') ?>
            
</div></li>-->
<script type="text/javascript">
//<![CDATA[
    
var shipping = new Shipping('co-shipping-form''<?php echo $this->getUrl('checkout/onepage/getAddress') ?>address/''<?php echo $this->getUrl('checkout/onepage/saveShipping') ?>',
        
'<?php echo $this->getUrl('checkout/onepage/shippingMethod') ?>');
    var 
shippingForm = new VarienForm('co-shipping-form');
    
shippingForm.extraChildParams ' onchange="shipping.setSameAsBilling(false);"';
    
//shippingForm.setElementsRelation('shipping:country_id', 'shipping:region', '<?php //echo $this->getUrl('directory/json/childRegion') ?>', '<?php //echo $this->__('Select State/Province...') ?>');
    
$('shipping-address-select') && shipping.newAddress(!$('shipping-address-select').value);

 
//   var shippingRegionUpdater = new RegionUpdater('shipping:country_id', 'shipping:region', 'shipping:region_id', countryRegions);
//]]>
</script>

Tja und was soll ich sagen .... es funzt nicht .... es wird immernoch eine Errormeldung ausgegeben. :-(
Jemand ne Idee?

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

Welche Magento & Template Version setzt du denn ein? Ich könnte dir das komplett bereitstellen wenn du magst.

Ich müsste nur noch wissen auf welchem Namespace dein Modul hören soll.

LG - Daniel

 
Magento Community Magento Community
Magento Community
Magento Community
 
shaysweetheart
Member
 
Total Posts:  39
Joined:  2009-05-04
 
ds_1984 - 01 July 2009 12:13 AM

Welche Magento & Template Version setzt du denn ein? Ich könnte dir das komplett bereitstellen wenn du magst.

Ich müsste nur noch wissen auf welchem Namespace dein Modul hören soll.

LG - Daniel

Boa das ist ja super lieb....
Ich hab Magento Version 1.3.2.1 und das Template hab ich auf Basis des Default umgeschrieben.
Öhm ... sry steh heute total aufem Schlauch? Namespace???

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

Mit Namespace ist gemeint wo das kleine Modul eingebaut werden soll bzw. unter welchem Firmennamen es laufen soll.

Sicher nicht “My_Code” oder?

Was die Template Version angeht - das ist gut. Meine ist ebenfalls 1.3.2.1 - möchtest du es gleich so haben das dieses Feld Bundesland schon garnicht mehr im Checkout angezeigt wird ???

LG - Daniel

 
Magento Community Magento Community
Magento Community
Magento Community
 
iConsultants.eu S.Buckpesch
Jr. Member
 
Total Posts:  19
Joined:  2009-07-02
 

Hola,
ich bin der Anleitung Schritt für Schritt gefolgt. Leider kommt im Billing Formular immer noch die Meldung “Please enter telephone. Please enter state/region” :-(
Ich bin mir fast 100% sicher, dass ich keine Rechtschreibfehler drin habe (sogar die Klassennamen habe ich Copy/Paste übernommen). Die Module sind aktiviert (Konfiguration->erweitert).

Wo könnte der Fehler noch liegen?

Vielen Dank
Sebastian

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

Welche Anleitung ??? Das Tutorial zu diesem Thema folgt doch erst - oder meinst du die Experimente in diesem Thread ???

Liebe Grüße - Daniel

 
Magento Community Magento Community
Magento Community
Magento Community
 
iConsultants.eu S.Buckpesch
Jr. Member
 
Total Posts:  19
Joined:  2009-07-02
 

Ich meine die Schrittfolge von skeptic35 in diesem Thread. Sie hat mir als Magento Neuling einen ersten Einblick über die Grundzüge von Erweiterungen gegeben. grin Hatte leider noch keine Zeit für die Anleitungen auf mxperts (meine neue Lieblingsseite grin ).

@skeptic35: Dann muss ich noch mal bißchen klugscheissen: Aus grauer Vorzeit kam mir hoch (erstes Semester Informatik), dass “Ãœberladen” hier nicht ganz richtig verwendet wurde, da die Signatur der validate() Funktion die gleiche ist: also “Ãœberschreiben”....
http://www.tutorials.de/forum/java/219027-uberschreiben-uberladen-von-methoden.html#post1137820

Viele Grüße
Sebastian

PS: Problem trotzdem noch nicht gelöst :-(

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top
Page 2 of 5