Ich möchte das Passwortfeld immer im Abrechnungsschritt der Kasse anzeigen. Wir haben den ersten Schritt an der Kasse entfernt.
In diesem Abrechnungsschritt möchten wir, dass ein Kunde, der ein Passwort eingibt, ein Konto erstellt. Wenn der Kunde die Eingabefelder leer lässt, wird er als Gast ausgecheckt.
In billing.phtml habe ich derzeit diese Zeile über den Passworteingabefeldern:
<?php if($this->helper('skipstep1')->isSkipEnabled() && $this->getQuote()->isAllowedGuestCheckout()): ?>
<li class="fields">
<div class="field">
<label class="account-aanmaken-checkout" for="login:register"><?php echo $this->__('Register with us for future convenience') ?></label>
<div class="input-box checkout-account">
<input type="checkbox" class="checkbox" name="login[register]" id="login:register" value="1" title="<?php echo $this->__('Register') ?>" onclick="toggleRegister(this)"<?php if (Mage::getStoreConfig('checkout/skipstep1/default_method')=='register'): ?> checked="checked"<?php endif ?>/>
</div>
</li>
<?php endif ?>
Der Standardcode für das Kennwortfeld lautet:
<li class="fields" id="register-customer-password">
<div class="field">
<label for="billing:customer_password" class="required"><em>*</em><?php echo $this->__('Password') ?></label>
<div class="input-box">
<input type="password" name="billing[customer_password]" id="billing:customer_password" title="<?php echo $this->__('Password') ?>" class="input-text required-entry validate-password" />
</div>
</div>
<div class="field">
<label for="billing:confirm_password" class="required"><em>*</em><?php echo $this->__('Confirm Password') ?></label>
<div class="input-box">
<input type="password" name="billing[confirm_password]" title="<?php echo $this->__('Confirm Password') ?>" id="billing:confirm_password" class="input-text required-entry validate-cpassword" />
</div>
</div>
</li>
Regler:
<?php if (Mage::helper('skipstep1')->isSkipEnabled()): ?>
<script type="text/javascript">
function toggleRegister(checkbox) {
// If registration is checked, or the customer has no choice => register
if (!checkbox || checkbox.checked) {
checkout.method = 'register';
new Ajax.Request(
checkout.saveMethodUrl,
{method: 'post', onFailure: checkout.ajaxFailure.bind(checkout), parameters: {method:'register'}}
);
Element.show('register-customer-password');
if ($('remember-me-box')) {
$('remember-me-box').show();
}
// If the customer has a choice, and chose not to register => checkout as guest
} else {
checkout.method = 'guest';
new Ajax.Request(
checkout.saveMethodUrl,
{method: 'post', onFailure: checkout.ajaxFailure.bind(checkout), parameters: {method:'guest'}}
);
Element.hide('register-customer-password');
if ($('remember-me-box')) {
$('remember-me-box').hide();
}
}
}
function toggleLogin() {
$('login-form').toggle();
$('co-billing-form').toggle();
$('billing-login-link').toggle();
$('billing-guest-link').toggle();
}
<?php if (!Mage::getSingleton('customer/session')->isLoggedIn()): ?>
checkout.method = '<?php echo Mage::getStoreConfig('checkout/skipstep1/default_method') ?>';
checkout.gotoSection('billing');
toggleRegister($('login:register'));
<?php endif ?>
<?php if ($this->getMessagesBlock()->getMessageCollection()->count()): // Failed login => message => hide address form / show login ?>
toggleLogin();
<?php endif ?>
</script>
<?php endif ?>
Das zeigt ein Kontrollkästchen an, wenn aktiviert, kann sich der Kunde registrieren. Wenn Sie das Kontrollkästchen nicht aktivieren, wird der Kunde als Gast auschecken. Das funktioniert gut, aber wie kann ich ändern, dass es ohne das Kontrollkästchen funktioniert.
Wie kann ich das ändern?
Antworten:
Bearbeitet
Zuerst müssen Sie überspringen
checkout method save
undneed to directly goes to
Abrechnungsschritte und dortwill you save checkout method
alsguest/register
davon abhängenyour logic of password
.Es gibt zwei Möglichkeiten, die Checkout-Methode zu speichern .
Rewrite controller:
Using Observer
Controller umschreiben:
Wenn Sie
are using default magento onepagecontroller
für Schritt Daten speichern Abrechnung dann fügen Sie Rewrite - Controller .Mit dem Beobachter:
Bei
controller_action_predispatch_checkout_onepage_saveBilling
einem Ereignis wird ein Ereignis ausgelöst, das gespeichert wirdcheckout method
.config.xml Code:
Beobachtercode:
Dann auf Observer
save checkout method as guest/register
Auf JavaScript
guest
als Standard-Checkout-Methode festlegen undfor going to billing step
dann verwendenabove two process change the checkout method basic of password field
quelle
Ich würde sagen, die beste Methode, dies zu tun, besteht darin, den Onepage-Controller zu überschreiben, wenn es sich um den Controller handelt, den Sie verwenden, wie von Amit Bera vorgeschlagen. Wenn Sie jedoch einen einfachen Weg einschlagen möchten, können Sie dies in der Datei billing.phtml selbst erreichen. Dieser Trick besteht darin, ein verstecktes Element anstelle des Kontrollkästchens mit demselben Namen wie das Kontrollkästchen zu verwenden. Anstelle des onclick-Ereignisses des Kontrollkästchens können Sie das onblur-Ereignis des Kennwortfelds verwenden und die toggleRegister-Logik entsprechend ausführen. Ich verstehe, dass dies Ihren Zweck lösen wird.
BEARBEITET
Bitte fügen Sie ein Unschärfe-Ereignis wie folgt in Ihr Passwortfeld ein.
Fügen Sie nun in Ihrem Formular ein verstecktes Element wie dieses hinzu.
Ersetzen Sie nun die toggleRegister () -Methode durch die folgende
BEARBEITEN:
quelle