mytheory. Posted August 11, 2011 Share Posted August 11, 2011 Hi guys! We've noticed that some customers input the wrong email address when registering, and this affects our bounce rate for newsletter subscriptions. It seems that by having an addition email field to confirm the email it would eliminate most of these issues. So the question is... How do we add another field that will ask the customer to confirm their email, and then the 2 email fields are compared to make sure they are the same before registration is completed?? Thanks! Link to comment Share on other sites More sharing options...
Richard S Posted August 14, 2011 Share Posted August 14, 2011 If you are using default blocknewsletter module, you should copy it and rename it. Then you might add another input field in blocknewsletter.tpl file and add functionality in .php file in the method which starts with word "hook". Or you can check if the emails are equal with javascript. Link to comment Share on other sites More sharing options...
ukbaz Posted August 24, 2011 Share Posted August 24, 2011 Hi there - I've managed to do this in version 1.4.4, but only for the 5 page checkout option. It requires amending theme/authentication.tpl and making an override for AuthController.php in overrides/controllers. Have done this and it works well - but can't seem to get one-page checkout to do the same! Help anyone? Code below for 'normal checkout' authentication.tpl At line 110, after [ <form action="{$link->getPageLink('authentication.php', true)}" method="post" id="create-account_form" class="std"> <fieldset> <h3>{l s='Create your account'}</h3> <h4>{l s='Enter your e-mail address to create an account'}.</h4> <p class="text"> <label for="email_create">{l s='E-mail address'}</label> <span><input type="text" id="email_create" name="email_create" value="{if isset($smarty.post.email_create)}{$smarty.post.email_create|escape:'htmlall':'UTF-8'|stripslashes}{/if}" class="account_input" /></span> </p> <!--added email address validation field --> <p class="text"> <label for="email_validate">{l s='Re-Enter E-mail address'}</label> <span><input type="text" id="email_validate" name="email_validate" value="{if isset($smarty.post.email_validate)}{$smarty.post.email_validate|escape:'htmlall'|stripslashes}{/if}" class="account_input" /></span> </p> <!-- end of added field -->/code] Once more in authentication.tpl - code added around line 153:[code] <h3>{l s='Instant Checkout'}</h3> <div id="opc_account_form" style="display: block; "> <!-- Account --> <p class="required text"> <label for="email">{l s='E-mail address'}</label> <input type="text" class="text" id="guest_email" name="guest_email" value="{if isset($smarty.post.guest_email)}{$smarty.post.guest_email}{/if}"> <sup>*</sup> </p> <!--added email address validation field --> <p class="required text"> <label for="email_validate">{l s='Re-Enter E-mail address'}</label> <input type="text" id="email_validate" name="email_validate" value="{if isset($smarty.post.email_validate)}{$smarty.post.email_validate}{/if}" > <sup>*</sup> </p> <!-- end of added field --> Finally write the following in override/controllers/AuthController.php: <?php class AuthController extends AuthControllerCore { public $ssl = true; public $php_self = 'authentication.php'; public function preProcess() { parent::preProcess(); if (self::$cookie->isLogged() AND !Tools::isSubmit('ajax')) Tools::redirect('my-account.php'); if (Tools::getValue('create_account')) { $create_account = 1; self::$smarty->assign('email_create', 1); } if (Tools::isSubmit('SubmitCreate')) { if (Tools::getValue('email_create')!=Tools::getValue('email_validate')) $this->errors[] = Tools::displayError("email addresses don't match."); elseif (!Validate::isEmail($email = Tools::getValue('email_create')) OR empty($email)) $this->errors[] = Tools::displayError('Invalid e-mail address'); elseif (Customer::customerExists($email)) { $this->errors[] = Tools::displayError('An account is already registered with this e-mail, please fill in the password or request a new one.'); $_POST['email'] = $_POST['email_create']; unset($_POST['email_create']); } else { $create_account = 1; self::$smarty->assign('email_create', Tools::safeOutput($email)); $_POST['email'] = $email; } } if (Tools::isSubmit('submitAccount') OR Tools::isSubmit('submitGuestAccount')) { $create_account = 1; if (Tools::isSubmit('submitAccount')) self::$smarty->assign('email_create', 1); /* New Guest customer */ if (!Tools::getValue('is_new_customer', 1) AND !Configuration::get('PS_GUEST_CHECKOUT_ENABLED')) $this->errors[] = Tools::displayError('You cannot create a guest account.'); if (!Tools::getValue('is_new_customer', 1)) $_POST['passwd'] = md5(time()._COOKIE_KEY_); /* Added Instant checkout email validation */ if (Tools::getValue('guest_email')!=Tools::getValue('email_validate')) $this->errors[] = Tools::displayError("email addresses don't match."); /* EndInstant checkout email validation */ if (isset($_POST['guest_email']) AND $_POST['guest_email']) $_POST['email'] = $_POST['guest_email']; /* Preparing customer */ $customer = new Customer(); $lastnameAddress = $_POST['lastname']; $firstnameAddress = $_POST['firstname']; $_POST['lastname'] = $_POST['customer_lastname']; $_POST['firstname'] = $_POST['customer_firstname']; if (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile')) $this->errors[] = Tools::displayError('You must register at least one phone number'); $this->errors = array_unique(array_merge($this->errors, $customer->validateControler())); /* Preparing address */ $address = new Address(); $_POST['lastname'] = $lastnameAddress; $_POST['firstname'] = $firstnameAddress; $address->id_customer = 1; $this->errors = array_unique(array_merge($this->errors, $address->validateControler())); /* US customer: normalize the address */ if ($address->id_country == Country::getByIso('US')) { include_once(_PS_TAASC_PATH_.'AddressStandardizationSolution.php'); $normalize = new AddressStandardizationSolution; $address->address1 = $normalize->AddressLineStandardization($address->address1); $address->address2 = $normalize->AddressLineStandardization($address->address2); } $zip_code_format = Country::getZipCodeFormat((int)(Tools::getValue('id_country'))); if (Country::getNeedZipCode((int)(Tools::getValue('id_country')))) { if (($postcode = Tools::getValue('postcode')) AND $zip_code_format) { $zip_regexp = '/^'.$zip_code_format.'$/ui'; $zip_regexp = str_replace(' ', '( |)', $zip_regexp); $zip_regexp = str_replace('-', '(-|)', $zip_regexp); $zip_regexp = str_replace('N', '[0-9]', $zip_regexp); $zip_regexp = str_replace('L', '[a-zA-Z]', $zip_regexp); $zip_regexp = str_replace('C', Country::getIsoById((int)(Tools::getValue('id_country'))), $zip_regexp); if (!preg_match($zip_regexp, $postcode)) $this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is invalid.').'<br />'.Tools::displayError('Must be typed as follows:').' '.str_replace('C', Country::getIsoById((int)(Tools::getValue('id_country'))), str_replace('N', '0', str_replace('L', 'A', $zip_code_format))); } elseif ($zip_code_format) $this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is required.'); elseif ($postcode AND !preg_match('/^[0-9a-zA-Z -]{4,9}$/ui', $postcode)) $this->errors[] = '<strong>'.Tools::displayError('Zip/ Postal code').'</strong> '.Tools::displayError('is invalid.'); } if (Country::isNeedDniByCountryId($address->id_country) AND (!Tools::getValue('dni') OR !Validate::isDniLite(Tools::getValue('dni')))) $this->errors[] = Tools::displayError('Identification number is incorrect or has already been used.'); elseif (!Country::isNeedDniByCountryId($address->id_country)) $address->dni = NULL; if (!@checkdate(Tools::getValue('months'), Tools::getValue('days'), Tools::getValue('years')) AND !(Tools::getValue('months') == '' AND Tools::getValue('days') == '' AND Tools::getValue('years') == '')) $this->errors[] = Tools::displayError('Invalid date of birth'); if (!sizeof($this->errors)) { if (Customer::customerExists(Tools::getValue('email'))) $this->errors[] = Tools::displayError('An account is already registered with this e-mail, please fill in the password or request a new one.'); if (Tools::isSubmit('newsletter')) { $customer->ip_registration_newsletter = pSQL(Tools::getRemoteAddr()); $customer->newsletter_date_add = pSQL(date('Y-m-d H:i:s')); } $customer->birthday = (empty($_POST['years']) ? '' : (int)($_POST['years']).'-'.(int)($_POST['months']).'-'.(int)($_POST['days'])); if (!sizeof($this->errors)) { if (!$country = new Country($address->id_country, Configuration::get('PS_LANG_DEFAULT')) OR !Validate::isLoadedObject($country)) die(Tools::displayError()); if ((int)($country->contains_states) AND !(int)($address->id_state)) $this->errors[] = Tools::displayError('This country requires a state selection.'); else { $customer->active = 1; /* New Guest customer */ if (Tools::isSubmit('is_new_customer')) $customer->is_guest = !Tools::getValue('is_new_customer', 1); else $customer->is_guest = 0; if (!$customer->add()) $this->errors[] = Tools::displayError('An error occurred while creating your account.'); else { $address->id_customer = (int)($customer->id); if (!$address->add()) $this->errors[] = Tools::displayError('An error occurred while creating your address.'); else { if (!$customer->is_guest) { if (!Mail::Send((int)(self::$cookie->id_lang), 'account', Mail::l('Welcome!'), array('{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, '{passwd}' => Tools::getValue('passwd')), $customer->email, $customer->firstname.' '.$customer->lastname)) $this->errors[] = Tools::displayError('Cannot send email'); } self::$smarty->assign('confirmation', 1); self::$cookie->id_customer = (int)($customer->id); self::$cookie->customer_lastname = $customer->lastname; self::$cookie->customer_firstname = $customer->firstname; self::$cookie->passwd = $customer->passwd; self::$cookie->logged = 1; self::$cookie->email = $customer->email; self::$cookie->is_guest = !Tools::getValue('is_new_customer', 1); /* Update cart address */ self::$cart->secure_key = $customer->secure_key; self::$cart->id_address_delivery = Address::getFirstCustomerAddressId((int)($customer->id)); self::$cart->id_address_invoice = Address::getFirstCustomerAddressId((int)($customer->id)); self::$cart->update(); Module::hookExec('createAccount', array( '_POST' => $_POST, 'newCustomer' => $customer )); if (Tools::isSubmit('ajax')) { $return = array( 'hasError' => !empty($this->errors), 'errors' => $this->errors, 'isSaved' => true, 'id_customer' => (int)self::$cookie->id_customer, 'id_address_delivery' => self::$cart->id_address_delivery, 'id_address_invoice' => self::$cart->id_address_invoice, 'token' => Tools::getToken(false) ); die(Tools::jsonEncode($return)); } if ($back = Tools::getValue('back')) Tools::redirect($back); Tools::redirect('my-account.php'); } } } } } if (sizeof($this->errors)) { if (!Tools::getValue('is_new_customer')) unset($_POST['passwd']); if (Tools::isSubmit('ajax')) { $return = array( 'hasError' => !empty($this->errors), 'errors' => $this->errors, 'isSaved' => false, 'id_customer' => 0 ); die(Tools::jsonEncode($return)); } } } if (Tools::isSubmit('SubmitLogin')) { Module::hookExec('beforeAuthentication'); $passwd = trim(Tools::getValue('passwd')); $email = trim(Tools::getValue('email')); if (empty($email)) $this->errors[] = Tools::displayError('E-mail address required'); elseif (!Validate::isEmail($email)) $this->errors[] = Tools::displayError('Invalid e-mail address'); elseif (empty($passwd)) $this->errors[] = Tools::displayError('Password is required'); elseif (Tools::strlen($passwd) > 32) $this->errors[] = Tools::displayError('Password is too long'); elseif (!Validate::isPasswd($passwd)) $this->errors[] = Tools::displayError('Invalid password'); else { $customer = new Customer(); $authentication = $customer->getByEmail(trim($email), trim($passwd)); if (!$authentication OR !$customer->id) { /* Handle brute force attacks */ sleep(1); $this->errors[] = Tools::displayError('Authentication failed'); } else { self::$cookie->id_customer = (int)($customer->id); self::$cookie->customer_lastname = $customer->lastname; self::$cookie->customer_firstname = $customer->firstname; self::$cookie->logged = 1; self::$cookie->is_guest = $customer->isGuest(); self::$cookie->passwd = $customer->passwd; self::$cookie->email = $customer->email; if (Configuration::get('PS_CART_FOLLOWING') AND (empty(self::$cookie->id_cart) OR Cart::getNbProducts(self::$cookie->id_cart) == 0)) self::$cookie->id_cart = (int)(Cart::lastNoneOrderedCart((int)($customer->id))); /* Update cart address */ self::$cart->id_carrier = 0; self::$cart->id_address_delivery = Address::getFirstCustomerAddressId((int)($customer->id)); self::$cart->id_address_invoice = Address::getFirstCustomerAddressId((int)($customer->id)); self::$cart->update(); Module::hookExec('authentication'); if (!Tools::isSubmit('ajax')) { if ($back = Tools::getValue('back')) Tools::redirect($back); Tools::redirect('my-account.php'); } } } if (Tools::isSubmit('ajax')) { $return = array( 'hasError' => !empty($this->errors), 'errors' => $this->errors, 'token' => Tools::getToken(false) ); die(Tools::jsonEncode($return)); } } if (isset($create_account)) { /* Select the most appropriate country */ if (isset($_POST['id_country']) AND is_numeric($_POST['id_country'])) $selectedCountry = (int)($_POST['id_country']); /* FIXME : language iso and country iso are not similar, * maybe an associative table with country an language can resolve it, * But for now it's a bug ! * @see : bug #6968 * @link:http://www.prestashop.com/bug_tracker/view/6968/ elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $array = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']); if (Validate::isLanguageIsoCode($array[0])) { $selectedCountry = Country::getByIso($array[0]); if (!$selectedCountry) $selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT')); } }*/ if (!isset($selectedCountry)) $selectedCountry = (int)(Configuration::get('PS_COUNTRY_DEFAULT')); $countries = Country::getCountries((int)(self::$cookie->id_lang), true); self::$smarty->assign(array( 'countries' => $countries, 'sl_country' => (isset($selectedCountry) ? $selectedCountry : 0), 'vat_management' => Configuration::get('VATNUMBER_MANAGEMENT') )); /* Call a hook to display more information on form */ self::$smarty->assign(array( 'HOOK_CREATE_ACCOUNT_FORM' => Module::hookExec('createAccountForm'), 'HOOK_CREATE_ACCOUNT_TOP' => Module::hookExec('createAccountTop') )); } /* Generate years, months and days */ if (isset($_POST['years']) AND is_numeric($_POST['years'])) $selectedYears = (int)($_POST['years']); $years = Tools::dateYears(); if (isset($_POST['months']) AND is_numeric($_POST['months'])) $selectedMonths = (int)($_POST['months']); $months = Tools::dateMonths(); if (isset($_POST['days']) AND is_numeric($_POST['days'])) $selectedDays = (int)($_POST['days']); $days = Tools::dateDays(); self::$smarty->assign(array( 'years' => $years, 'sl_year' => (isset($selectedYears) ? $selectedYears : 0), 'months' => $months, 'sl_month' => (isset($selectedMonths) ? $selectedMonths : 0), 'days' => $days, 'sl_day' => (isset($selectedDays) ? $selectedDays : 0) )); self::$smarty->assign('newsletter', (int)Module::getInstanceByName('blocknewsletter')->active); } } ?> If anyone can manage to adapt this to work on one page checkout - let me know! Baz Link to comment Share on other sites More sharing options...
mytheory. Posted August 26, 2011 Author Share Posted August 26, 2011 Wow! Great piece of code. But yea would also be very much interested in a solution for the ONE PAGE CHECKOUT. Thanks! Link to comment Share on other sites More sharing options...
badger1010 Posted November 21, 2011 Share Posted November 21, 2011 This would be a really useful feature. We regularly have customers entering the email address incorrectly which means they receive no information about their order & no password for their account. Link to comment Share on other sites More sharing options...
Snade Posted January 30, 2012 Share Posted January 30, 2012 Hi I found a better solution, where the confirmation happens on the registration page. First add this to the authentification.tpl under the email field (around line 291 ) <p class="text"> <label for="email_validate">{l s='Validate E-mail address'}</label> <input type="text" id="email_validate" name="email_validate" value="{if isset($smarty.post.email_validate)}{$smarty.post.email_validate}{/if}" class="text" /> </p> then add this in controlers/AuthControler.php under the phone validation if (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile')) $this->errors[] = Tools::displayError('You must register at least one phone number'); if (Tools::getValue('email')!=Tools::getValue('email_validate')) $this->errors[] = Tools::displayError("email addresses don't match."); (you can copy the content of AuthControler.php and place it in the override folder, if you want to keep the system controler untouched) Hope this helps you have a nice day 2 Link to comment Share on other sites More sharing options...
Snade Posted January 31, 2012 Share Posted January 31, 2012 Works with One Page Checkout too, just add <p class="text"> <label for="email_validate">{l s='Validate E-mail address'}</label> <input type="text" id="email_validate" name="email_validate" value="{if isset($smarty.post.email_validate)}{$smarty.post.email_validate}{/if}" class="text" /> </p> in order-opc-new-account.tpl under the e-mail field Cheers 1 Link to comment Share on other sites More sharing options...
Peti_ Posted February 3, 2012 Share Posted February 3, 2012 Thanks. Would be fine to add this to the " Your personal information" menu where the customer can change the personal data. I think identity.tpl and identity controller.php. Just an idea. I will try it maybe, but i am not a coder at all. Link to comment Share on other sites More sharing options...
badger1010 Posted March 28, 2012 Share Posted March 28, 2012 Has anyone got this working? I've tried changing the code as suggested, there is still only one email input text box, but a message stating that the email addresses do not match. Link to comment Share on other sites More sharing options...
senso321 Posted December 22, 2013 Share Posted December 22, 2013 (edited) Hello all, my solution will work with 1.5+ version and it should be able to handle both - 5 step and one page checkout. It's actually a very simple work around with jquery plugin. Here is my code: ( be aware that it has been altered A LOT and should be taken only as a reference and a example ) It is a authentication.tpl file where you need to make the alterations {* * 2007-2013 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Academic Free License (AFL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/afl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2013 PrestaShop SA * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0) * International Registered Trademark & Property of PrestaShop SA *} {capture name=path} {if !isset($email_create)}{l s='Authentication'}{else} <a href="{$link->getPageLink('authentication', true)|escape:'html'}" rel="nofollow" title="{l s='Authentication'}">{l s='Authentication'}</a> <span class="navigation-pipe">{$navigationPipe}</span>{l s='Create your account'} {/if} {/capture} <script type="text/javascript"> // <![CDATA[ var idSelectedCountry = {if isset($smarty.post.id_state)}{$smarty.post.id_state|intval}{else}false{/if}; var countries = new Array(); var countriesNeedIDNumber = new Array(); var countriesNeedZipCode = new Array(); {if isset($countries)} {foreach from=$countries item='country'} {if isset($country.states) && $country.contains_states} countries[{$country.id_country|intval}] = new Array(); {foreach from=$country.states item='state' name='states'} countries[{$country.id_country|intval}].push({ldelim}'id' : '{$state.id_state|intval}', 'name' : '{$state.name|addslashes}'{rdelim}); {/foreach} {/if} {if $country.need_identification_number} countriesNeedIDNumber.push({$country.id_country|intval}); {/if} {if isset($country.need_zip_code)} countriesNeedZipCode[{$country.id_country|intval}] = {$country.need_zip_code}; {/if} {/foreach} {/if} $(function(){ldelim} $('.id_state option[value={if isset($smarty.post.id_state)}{$smarty.post.id_state|intval}{else}{if isset($address)}{$address->id_state|intval}{/if}{/if}]').attr('selected', true); {rdelim}); //]]> {literal} $(document).ready(function() { $('#company').on('input',function(){ vat_number(); }); vat_number(); function vat_number() { if ($('#company').val() != '') $('#vat_number').show(); else $('#vat_number').hide(); } }); {/literal} </script> <!-- <h1 class="heading">{if !isset($email_create)}{l s='Authentication'}{else}{l s='Create an account'}{/if}</h1> --> {if !isset($back) || $back != 'my-account'}{assign var='current_step' value='login'}{include file="$tpl_dir./order-steps.tpl"}{/if} {include file="$tpl_dir./errors.tpl"} {assign var='stateExist' value=false} {assign var="postCodeExist" value=false} {if !isset($email_create)} <script type="text/javascript"> {literal} $(document).ready(function(){ // Retrocompatibility with 1.4 if (typeof baseUri === "undefined" && typeof baseDir !== "undefined") baseUri = baseDir; $('#create-account_form').submit(function(){ submitFunction(); return false; }); }); function submitFunction() { $('#create_account_error').html('').hide(); //send the ajax request to the server $.ajax({ type: 'POST', url: baseUri, async: true, cache: false, dataType : "json", data: { controller: 'authentication', SubmitCreate: 1, ajax: true, email_create: $('#email_create').val(), back: $('input[name=back]').val(), token: token }, success: function(jsonData) { if (jsonData.hasError) { var errors = ''; for(error in jsonData.errors) //IE6 bug fix if(error != 'indexOf') errors += '<li>'+jsonData.errors[error]+'</li>'; $('#create_account_error').html('<ol>'+errors+'</ol>').show(); } else { // adding a div to display a transition $('#center_column').html('<div id="noSlide">'+$('#center_column').html()+'</div>'); $('#noSlide').fadeOut('slow', function(){ $('#noSlide').html(jsonData.page); // update the state (when this file is called from AJAX you still need to update the state) bindStateInputAndUpdate(); $(this).fadeIn('slow', function(){ document.location = '#account-creation'; }); }); } }, error: function(XMLHttpRequest, textStatus, errorThrown) { alert("TECHNICAL ERROR: unable to load form.\n\nDetails:\nError thrown: " + XMLHttpRequest + "\n" + 'Text status: ' + textStatus); } }); } {/literal} </script> {if isset($authentification_error)} <div class="error"> {if {$authentification_error|@count} == 1} <p>{l s='There\'s at least one error'} :</p> {else} <p>{l s='There are %s errors' sprintf=[$account_error|@count]} :</p> {/if} <ol> {foreach from=$authentification_error item=v} <li>{$v}</li> {/foreach} </ol> </div> {/if} {if isset($inOrderProcess) == false} <div class="row"> <div class="authentication_span authentication_left"> <form action="{$link->getPageLink('authentication', true)|escape:'html'}" method="post" id="login_form" class="std"> <fieldset class="block"> <h3 class="title_block">{l s='Sign in'}</h3> <div class="form_content clearfix"> <ul class="wrapper_block"> <li> <!-- <label for="email" class="required"><em>*</em>{l s='Email address'}</label> --> <div class="input-box"> <input type="text" id="email" name="email" value="{if isset($smarty.post.email)}{$smarty.post.email|stripslashes}{/if}" placeholder="Email" class="account_input input-text" /> </div> </li> <li> <!-- <label for="passwd" class="required"><em>*</em>{l s='Password'}</label> --> <div class="input-box"> <input type="password" id="passwd" name="passwd" value="{if isset($smarty.post.passwd)}{$smarty.post.passwd|stripslashes}{/if}" placeholder="Password" class="account_input input-text" /> </div> </li> </ul> <!-- <p class="required_note"><sup>*</sup> {l s='Required Fields'}</p> --> <p class="lost_password"><a href="{$link->getPageLink('password')|escape:'html'}" title="{l s='Recover your forgotten password'}" rel="nofollow">{l s='Forgot your password?'}</a></p> </div> <div class="submit clearfix"> {if isset($back)}<input type="hidden" class="hidden" name="back" value="{$back|escape:'htmlall':'UTF-8'}" />{/if} <input type="submit" id="SubmitLogin" name="SubmitLogin" class="button btn_primary btn-block" value="{l s='Sign in'}" /> </div> </fieldset> </form> </div> <div class="authentication_span authentication_right"> <form action="{$link->getPageLink('authentication', true)|escape:'html'}" method="post" id="create-account_form" class="std"> <fieldset class="block"> <h3 class="title_block">{l s='Create an account'}</h3> <div class="form_content clearfix"> <!-- <p class="mar_b1">{l s='Please enter your email address to create an account.'}</p> --> <div class="error mar_b1" id="create_account_error" style="display:none"></div> <ul class="wrapper_block"> <li> <!-- <label for="email_create" class="required"><em>*</em>{l s='Email address'}</label> --> <div class="input-box"> <input type="text" id="email_create" name="email_create" value="{if isset($smarty.post.email_create)}{$smarty.post.email_create|stripslashes}{/if}" placeholder="Email" class="account_input input-text" /> </div> </li> </ul> </div> <div class="submit clearfix"> {if isset($back)}<input type="hidden" class="hidden" name="back" value="{$back|escape:'htmlall':'UTF-8'}" />{/if} <input type="submit" id="SubmitCreate" name="SubmitCreate" class="button_large btn_primary btn-block" value="{l s='Sign up'}" /> <input type="hidden" class="hidden" name="SubmitCreate" value="{l s='Create an account'}" /> </div> </fieldset> </form> </div> </div> {/if} {if isset($inOrderProcess) && $inOrderProcess && $PS_GUEST_CHECKOUT_ENABLED} <form action="{$link->getPageLink('authentication', true, NULL, "back=$back")|escape:'html'}" method="post" id="new_account_form" class="std clearfix"> <fieldset> <div id="opc_account_form" style="display: block; "> <div id="checkout_left"> <!-- Account --> <p class="required text"> <input type="text" class="text" id="guest_email" placeholder="{l s='Email address'} *" name="guest_email" value="{if isset($smarty.post.guest_email)}{$smarty.post.guest_email}{/if}" /> </p> <p class="required text"> <input type="text" class="text" id="guest_email_verification" placeholder="{l s='Email address verification'} *" equalTo='#guest_email' name="guest_email_verification" /> </p> <p class="required text"> <input type="text" class="text" id="firstname" name="firstname" onblur="$('#customer_firstname').val($(this).val());" value="{if isset($smarty.post.firstname)}{$smarty.post.firstname}{/if}" placeholder="{l s='First name'} *"/> <input type="hidden" class="text" id="customer_firstname" name="customer_firstname" value="{if isset($smarty.post.firstname)}{$smarty.post.firstname}{/if}" /> </p> <p class="required text"> <input type="text" class="text" placeholder="{l s='Last name'} *" id="lastname" name="lastname" onblur="$('#customer_lastname').val($(this).val());" value="{if isset($smarty.post.lastname)}{$smarty.post.lastname}{/if}" /> <input type="hidden" class="text" id="customer_lastname" name="customer_lastname" value="{if isset($smarty.post.lastname)}{$smarty.post.lastname}{/if}" /> </p> <p class="{if isset($one_phone_at_least) && $one_phone_at_least}required {/if}text"> <input type="text" class="text" placeholder="{l s='Phone'} *" name="phone" id="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone}{/if}"/> </p> <p class="required select"> <label for="id_country">{l s='Countries we ship to'} <sup>*</sup></label> <select name="id_country" id="id_country"> {foreach from=$countries item=v} <option value="{$v.id_country}" {if ($sl_country == $v.id_country)} selected="selected"{/if}>{$v.name}</option> {/foreach} </select> </p> </div> <div id="checkout_right"> {foreach from=$dlv_all_fields item=field_name} {if $field_name eq "company"} <p class="text"> <input type="text" class="text" id="company" placeholder="{l s='Company'}" name="company" value="{if isset($smarty.post.company)}{$smarty.post.company}{/if}" /> </p> {elseif $field_name eq "vat_number"} <div id="vat_number" style="display:none;"> <p class="text"> <input type="text" class="text" name="vat_number" placeholder="{l s='VAT number'}" value="{if isset($smarty.post.vat_number)}{$smarty.post.vat_number}{/if}" /> </p> </div> {elseif $field_name eq "address1"} <p class="required text"> <input type="text" class="text" placeholder="{l s='Address'} *" name="address1" id="address1" value="{if isset($smarty.post.address1)}{$smarty.post.address1}{/if}" /> </p> {elseif $field_name eq "postcode"} {assign var='postCodeExist' value=true} <p class="required postcode text"> <input type="text" class="text" placeholder="{l s='Zip / Postal Code'} *" name="postcode" id="postcode" value="{if isset($smarty.post.postcode)}{$smarty.post.postcode}{/if}" onblur="$('#postcode').val($('#postcode').val().toUpperCase());" /> </p> {elseif $field_name eq "city"} <p class="required text"> <input type="text" class="text" placeholder="{l s='City'} *" name="city" id="city" value="{if isset($smarty.post.city)}{$smarty.post.city}{/if}" /> </p> <!-- if customer hasn't update his layout address, country has to be verified but it's deprecated --> <!-- {elseif $field_name eq "Country:name" || $field_name eq "country"} <p class="required select"> <label for="id_country">{l s='Country'} <sup>*</sup></label> <select name="id_country" id="id_country"> {foreach from=$countries item=v} <option value="{$v.id_country}" {if ($sl_country == $v.id_country)} selected="selected"{/if}>{$v.name}</option> {/foreach} </select> </p> --> {elseif $field_name eq "State:name"} {assign var='stateExist' value=true} <p class="required id_state select"> <label for="id_state">{l s='State'} <sup>*</sup></label> <select name="id_state" id="id_state"> <option value="">-</option> </select> </p> {/if} {/foreach} {if $stateExist eq false} <p class="required id_state select hidden"> <label for="id_state">{l s='State'} <sup>*</sup></label> <select name="id_state" id="id_state"> <option value="">-</option> </select> </p> {/if} {if $postCodeExist eq false} <p class="required postcode text hidden"> <input type="text" class="text" placeholder="{l s='Zip / Postal Code'} *" name="postcode" id="postcode" value="{if isset($smarty.post.postcode)}{$smarty.post.postcode}{/if}" onblur="$('#postcode').val($('#postcode').val().toUpperCase());" /> </p> {/if} <input type="hidden" name="alias" id="alias" value="{l s='My address'}" /> <input type="hidden" name="is_new_customer" id="is_new_customer" value="0" /> <!-- END Account --> </div> </div> </fieldset> <fieldset class="account_creation dni"> <h3>{l s='Tax identification'}</h3> <p class="required text"> <label for="dni">{l s='Identification number'}</label> <input type="text" class="text" name="dni" id="dni" value="{if isset($smarty.post.dni)}{$smarty.post.dni}{/if}" /> <span class="form_info">{l s='DNI / NIF / NIE'}</span> </p> </fieldset> <p class="cart_navigation required submit"> <!-- <span><sup>*</sup>{l s='Required field'}</span> --> <input type="hidden" name="display_guest_checkout" value="1" /> <input type="submit" class="custom_continue" name="submitGuestAccount" id="submitGuestAccount" value="{l s='Save & continue'}" /> </p> </form> {/if} {else} <!--{if isset($account_error)} <div class="error"> {if {$account_error|@count} == 1} <p>{l s='There\'s at least one error'} :</p> {else} <p>{l s='There are %s errors' sprintf=[$account_error|@count]} :</p> {/if} <ol> {foreach from=$account_error item=v} <li>{$v}</li> {/foreach} </ol> </div> {/if}--> <form action="{$link->getPageLink('authentication', true)|escape:'html'}" method="post" id="account-creation_form" class="std"> {$HOOK_CREATE_ACCOUNT_TOP} <fieldset class="account_creation"> <h3>{l s='Your personal information'}</h3> <p class="radio required"> <span>{l s='Title'}</span> {foreach from=$genders key=k item=gender} <input type="radio" name="id_gender" id="id_gender{$gender->id}" value="{$gender->id}" {if isset($smarty.post.id_gender) && $smarty.post.id_gender == $gender->id}checked="checked"{/if} /> <label for="id_gender{$gender->id}" class="top">{$gender->name}</label> {/foreach} </p> <p class="required text"> <label for="customer_firstname">{l s='First name'} <sup>*</sup></label> <input onkeyup="$('#firstname').val(this.value);" type="text" class="text" id="customer_firstname" name="customer_firstname" value="{if isset($smarty.post.customer_firstname)}{$smarty.post.customer_firstname}{/if}" /> </p> <p class="required text"> <label for="customer_lastname">{l s='Last name'} <sup>*</sup></label> <input onkeyup="$('#lastname').val(this.value);" type="text" class="text" id="customer_lastname" name="customer_lastname" value="{if isset($smarty.post.customer_lastname)}{$smarty.post.customer_lastname}{/if}" /> </p> <p class="required text"> <label for="email">{l s='Email'} <sup>*</sup></label> <input type="text" class="text" id="email" name="email" value="{if isset($smarty.post.email)}{$smarty.post.email}{/if}" /> </p> <p class="required password"> <label for="passwd">{l s='Password'} <sup>*</sup></label> <input type="password" class="text" name="passwd" id="passwd" /> <span class="form_info">{l s='(Five characters minimum)'}</span> </p> <p class="select"> <span>{l s='Date of Birth'}</span> <select id="days" name="days"> <option value="">-</option> {foreach from=$days item=day} <option value="{$day}" {if ($sl_day == $day)} selected="selected"{/if}>{$day} </option> {/foreach} </select> {* {l s='January'} {l s='February'} {l s='March'} {l s='April'} {l s='May'} {l s='June'} {l s='July'} {l s='August'} {l s='September'} {l s='October'} {l s='November'} {l s='December'} *} <select id="months" name="months"> <option value="">-</option> {foreach from=$months key=k item=month} <option value="{$k}" {if ($sl_month == $k)} selected="selected"{/if}>{l s=$month} </option> {/foreach} </select> <select id="years" name="years"> <option value="">-</option> {foreach from=$years item=year} <option value="{$year}" {if ($sl_year == $year)} selected="selected"{/if}>{$year} </option> {/foreach} </select> </p> {if $newsletter} <p class="checkbox" > <input type="checkbox" name="newsletter" id="newsletter" value="1" {if isset($smarty.post.newsletter) AND $smarty.post.newsletter == 1} checked="checked"{/if} autocomplete="off" /> <label for="newsletter">{l s='Sign up for our newsletter!'}</label> </p> <p class="checkbox" > <input type="checkbox"name="optin" id="optin" value="1" {if isset($smarty.post.optin) AND $smarty.post.optin == 1} checked="checked"{/if} autocomplete="off" /> <label for="optin">{l s='Receive special offers from our partners!'}</label> </p> {/if} </fieldset> {if $b2b_enable} <fieldset class="account_creation"> <h3>{l s='Your company information'}</h3> <p class="text"> <label for="">{l s='Company'}</label> <input type="text" class="text" id="company" name="company" value="{if isset($smarty.post.company)}{$smarty.post.company}{/if}" /> </p> <p class="text"> <label for="siret">{l s='SIRET'}</label> <input type="text" class="text" id="siret" name="siret" value="{if isset($smarty.post.siret)}{$smarty.post.siret}{/if}" /> </p> <p class="text"> <label for="ape">{l s='APE'}</label> <input type="text" class="text" id="ape" name="ape" value="{if isset($smarty.post.ape)}{$smarty.post.ape}{/if}" /> </p> <p class="text"> <label for="website">{l s='Website'}</label> <input type="text" class="text" id="website" name="website" value="{if isset($smarty.post.website)}{$smarty.post.website}{/if}" /> </p> </fieldset> {/if} {if isset($PS_REGISTRATION_PROCESS_TYPE) && $PS_REGISTRATION_PROCESS_TYPE} <fieldset class="account_creation"> <h3>{l s='Your address'}</h3> {foreach from=$dlv_all_fields item=field_name} {if $field_name eq "company"} {if !$b2b_enable} <p class="text"> <label for="company">{l s='Company'}</label> <input type="text" class="text" id="company" name="company" value="{if isset($smarty.post.company)}{$smarty.post.company}{/if}" /> </p> {/if} {elseif $field_name eq "vat_number"} <div id="vat_number" style="display:none;"> <p class="text"> <label for="vat_number">{l s='VAT number'}</label> <input type="text" class="text" name="vat_number" value="{if isset($smarty.post.vat_number)}{$smarty.post.vat_number}{/if}" /> </p> </div> {elseif $field_name eq "firstname"} <p class="required text"> <label for="firstname">{l s='First name'} <sup>*</sup></label> <input type="text" class="text" id="firstname" name="firstname" value="{if isset($smarty.post.firstname)}{$smarty.post.firstname}{/if}" /> </p> {elseif $field_name eq "lastname"} <p class="required text"> <label for="lastname">{l s='Last name'} <sup>*</sup></label> <input type="text" class="text" id="lastname" name="lastname" value="{if isset($smarty.post.lastname)}{$smarty.post.lastname}{/if}" /> </p> {elseif $field_name eq "address1"} <p class="required text"> <label for="address1">{l s='Address'} <sup>*</sup></label> <input type="text" class="text" name="address1" id="address1" value="{if isset($smarty.post.address1)}{$smarty.post.address1}{/if}" /> <span class="inline-infos">{l s='Street address, P.O. Box, Company name, etc.'}</span> </p> {elseif $field_name eq "address2"} <p class="text"> <label for="address2">{l s='Address (Line 2)'}</label> <input type="text" class="text" name="address2" id="address2" value="{if isset($smarty.post.address2)}{$smarty.post.address2}{/if}" /> <span class="inline-infos">{l s='Apartment, suite, unit, building, floor, etc...'}</span> </p> {elseif $field_name eq "postcode"} {assign var='postCodeExist' value=true} <p class="required postcode text"> <label for="postcode">{l s='Zip / Postal Code'} <sup>*</sup></label> <input type="text" class="text" name="postcode" id="postcode" value="{if isset($smarty.post.postcode)}{$smarty.post.postcode}{/if}" onkeyup="$('#postcode').val($('#postcode').val().toUpperCase());" /> </p> {elseif $field_name eq "city"} <p class="required text"> <label for="city">{l s='City'} <sup>*</sup></label> <input type="text" class="text" name="city" id="city" value="{if isset($smarty.post.city)}{$smarty.post.city}{/if}" /> </p> <!-- if customer hasn't update his layout address, country has to be verified but it's deprecated --> {elseif $field_name eq "Country:name" || $field_name eq "country"} <p class="required select"> <label for="id_country">{l s='Country'} <sup>*</sup></label> <select name="id_country" id="id_country"> <option value="">-</option> {foreach from=$countries item=v} <option value="{$v.id_country}" {if ($sl_country == $v.id_country)} selected="selected"{/if}>{$v.name}</option> {/foreach} </select> </p> {elseif $field_name eq "State:name" || $field_name eq 'state'} {assign var='stateExist' value=true} <p class="required id_state select"> <label for="id_state">{l s='State'} <sup>*</sup></label> <select name="id_state" id="id_state"> <option value="">-</option> </select> </p> {/if} {/foreach} {if $postCodeExist eq false} <p class="required postcode text hidden"> <label for="postcode">{l s='Zip / Postal Code'} <sup>*</sup></label> <input type="text" class="text" name="postcode" id="postcode" value="{if isset($smarty.post.postcode)}{$smarty.post.postcode}{/if}" onkeyup="$('#postcode').val($('#postcode').val().toUpperCase());" /> </p> {/if} {if $stateExist eq false} <p class="required id_state select hidden"> <label for="id_state">{l s='State'} <sup>*</sup></label> <select name="id_state" id="id_state"> <option value="">-</option> </select> </p> {/if} <p class="textarea"> <label for="other">{l s='Additional information'}</label> <textarea name="other" id="other" cols="26" rows="3">{if isset($smarty.post.other)}{$smarty.post.other}{/if}</textarea> </p> {if isset($one_phone_at_least) && $one_phone_at_least} <p class="inline-infos">{l s='You must register at least one phone number.'}</p> {/if} <p class="text"> <label for="phone">{l s='Home phone'}</label> <input type="text" class="text" name="phone" id="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone}{/if}" /> </p> <p class="{if isset($one_phone_at_least) && $one_phone_at_least}required {/if} text"> <label for="phone_mobile">{l s='Mobile phone'}{if isset($one_phone_at_least) && $one_phone_at_least} <sup>*</sup>{/if}</label> <input type="text" class="text" name="phone_mobile" id="phone_mobile" value="{if isset($smarty.post.phone_mobile)}{$smarty.post.phone_mobile}{/if}" /> </p> <p class="required text" id="address_alias"> <label for="alias">{l s='Assign an address alias for future reference.'} <sup>*</sup></label> <input type="text" class="text" name="alias" id="alias" value="{if isset($smarty.post.alias)}{$smarty.post.alias}{else}{l s='My address'}{/if}" /> </p> </fieldset> <fieldset class="account_creation dni"> <h3>{l s='Tax identification'}</h3> <p class="required text"> <label for="dni">{l s='Identification number'} <sup>*</sup></label> <input type="text" class="text" name="dni" id="dni" value="{if isset($smarty.post.dni)}{$smarty.post.dni}{/if}" /> <span class="form_info">{l s='DNI / NIF / NIE'}</span> </p> </fieldset> {/if} {$HOOK_CREATE_ACCOUNT_FORM} <p class="cart_navigation required submit"> <input type="hidden" name="email_create" value="1" /> <input type="hidden" name="is_new_customer" value="1" /> {if isset($back)}<input type="hidden" class="hidden" name="back" value="{$back|escape:'htmlall':'UTF-8'}" />{/if} <input type="submit" name="submitAccount" id="submitAccount" value="{l s='Register'}" class="exclusive" /> <span><sup>*</sup>{l s='Required field'}</span> </p> </form> {/if} <script src="http://jquery.bassistance.de/validate/jquery.validate.js"></script> <script src="http://jquery.bassistance.de/validate/additional-methods.js"></script> <script> // just for the demos, avoids form submit jQuery.validator.setDefaults({ }); $( "#new_account_form" ).validate({ rules: { guest_email: "required", guest_email_verification: { equalTo: "#guest_email" } } }); </script> Basicly I created another field to input your email address and the script below compares them. If they are not the same it wont allow you to submit the form and gives you a error message that they are not the same. If you have any mroe questions im happy to help.BR's Edited December 22, 2013 by senso321 (see edit history) Link to comment Share on other sites More sharing options...
[email protected] Posted February 20, 2014 Share Posted February 20, 2014 Hi, I have ps 1.5 and I work with order-opc-new-account.tpl. I shows the field but does not check mail verification mail, what I have to put the file verification? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now