2017-10-25 2 views
0

Ich versuche, das Formular für die Erstellung von Kundenaccounts anzupassen, und ich möchte das gleiche Formular für verschiedene Arten von Kunden verwenden, d. H. Privat und Unternehmen. Was ich erreichen möchte, ist die Verwendung des gleichen Formulars für beide und zeigen verschiedene Felder nach der Wahl des Benutzers: wenn Benutzer 'privat' wählen, muss er einige Felder ausfüllen, wenn er 'Firma' auswählt, zusätzliche Felder - für Adresse und MwSt. werden angezeigt.Magento zeigen Adressfelder und validieren Registrierungsformular nur unter bestimmten Bedingungen

Also ich habe Adressfelder in der local.xml aktiviert und sie sind richtig angezeigt oder ausgeblendet, je nachdem, welche Taste (privat oder Firma) gewählt wird.

Das Problem ist, dass, wenn ich einfach die Adressfelder verstecken, Form auch auf diesen Feldern validiert ist, es sei denn ich eine

setzen
$this->setShowAddressFields(false); 

kurz vor dem

if($this->getShowAddressFields()): ? 

Adressfelder zu verstecken und Validierung unterdrücken Ich habe auch <input type="hidden" name="create_address" value="0" /> , um Adressfelder Validierung zu überspringen.

Also habe ich mit jquery versucht, die setShowAddressFields zu ändern, wenn der Benutzer auf die Schaltfläche klicken seinen Typ zu wählen, so etwas wie

 $('#choose-type button').click(function(){ 
      if($(this).val() == 'private'){ 
       $(this).addClass('selected'); 
       $('#choose-type button').last().removeClass('selected'); 
       $('.required-company').removeClass('visible'); 
       <?php $addrEnabled = $this->setShowAddressFields(false) ?> 

      }else{ 
       $(this).addClass('selected'); 
       $('#choose-type button').first().removeClass('selected'); 
       <?php $addrEnabled = $this->setShowAddressFields(true) ?> 
       $('.required-company').addClass('visible'); 
      } 
     }); 

habe ich auch versucht, zwei verschiedene Formen zu zeigen, in der gleichen Vorlage , eines mit $ this-> setShowAddressFields (false) und die andere mit $ this-> setShowAddressFields (true) und ein-/ausblenden die richtige Form, und bestätigen Sie mit Varien die richtige Form, wie diese

var dataForm = new VarienForm('form-validate', true); 
var dataFormbis = new VarienForm('form-validate-bis', true); 

aber immer noch kein Glück.

So ist es möglich, so etwas in der gleichen Vorlage zu erreichen, oder ich muss gezwungenermaßen zwei verschiedene Vorlagen erstellen?

+0

haben Sie versucht, von CSS-Eigenschaft hinzufügen 'Anzeige: none' dem Element anstelle von' visibility'? –

+0

gut die Klasse .visible in meinem Stylesheet setzt die Anzeige: keine zu diesen Elementen ohne die Klasse, also ja. – sissy

Antwort

0

Weiß nicht, ob es für jemanden hilfreich sein kann, aber ich habe meine eigene Lösung gefunden (obwohl ich es nicht wirklich total mag, und weiß nicht, ob es der richtige Weg ist).

Endlich ist es mir gelungen, den letzten Teil meiner Frage zu bearbeiten und so zwei verschiedene Formen zu erstellen und jeweils eine Validierung zu erstellen.

Die erste Form hat die <?php $addrEnabled = $this->setShowAddressFields(false) ?>, während die zweite hat es auf wahr gesetzt.

Formulare haben unterschiedliche IDs, um sie zu identifizieren, eine hat id='form-private' und die andere id='form-company'.

Dann in meinem Skript Ich habe

validateRegistration ('private', 'Unternehmen');

 $('#choose-type button').click(function(){ 
      ($(this).val() == 'private') ? validateRegistration($(this).val(), 'company') : validateRegistration($(this).val(), 'private'); 
     }); 

     function validateRegistration(userType,userTypeBis){ 
      $("#form-"+userType + "").css('display', 'block'); 
      $("#form-"+userTypeBis + "").css('display', 'none'); 

      var dataForm = new VarienForm('form-'+userType+'', true); 

      $("#form-"+userType + "").submit(function(e){ 
       if(//some custom condition to avoid validation in case some custom fields are not in the way i need) { 
        e.preventDefault(); 
       } 
       else { 
        dataForm.validator && dataForm.validator.validate(); 
       } 
      }); 
     } 
</script> 

Bitte beachten Sie, dass die Submit() innerhalb des dataForm.validator.validate() aufgerufen, wenn die Validierung übergeben wird, so meine benutzerdefinierten Bedingungen sollten nicht erforderlich sein (die if-else), ich denke, die wichtig Ding ist, zwei verschiedene Formen mit zwei verschiedenen Bestätigungen zu haben.

hoffe, das hilft

Verwandte Themen