djmortis Posted May 27, 2014 Share Posted May 27, 2014 (edited) Buenas, primero explico el problema y después como lo tengo... A ver.. correos nos ha mandado un modulo en el que solo pilla el campo de address del prestashop, el problema, es que hay mucha gente que al comprar, lo rellena mal, y hemos añadido los campos vía, número y puerta, para facilitar que a la hora de poner la dirección, se haga bien. Ahora bien, a la hora de usar ese modulo de correos para sacar las etiquetas desde prestashop, sólo pilla el campo address, lo cual es un impedimento, ya que si se envían con esas etiquetas, no llegaría ningún paquete, con el considerable mosqueo del cliente y los costes de volverlo a enviar, :S En vez de llegar a la "Calle las barcas 12, 12", llegaría a una dirección que se llamara "las barcas", dirección que no existe, obviamente, ya que no tiene ni tipo de vía, ni número, ni puerta. Por el momento, tengo correctamente que a la hora de ingresar los datos se haga en los campos address1, vía, numero y puerta de la tabla ps_address. Ahora bien, lo qe necesito es juntar esos valores en el campo address1 Si por ejemplo ingresan... via: Calle address1: Las Barcas número: 7 puerta: 36 Se haga en el campo address1 como "Calle Las Barcas 7, 36" Tengo habilitado el pedido rápido y esto es lo que tengo puesto... en authentification.tpl {elseif $field_name eq "via"} <label for="via">{l s='Tipo de vía'} <sup>*</sup></label> <div></div> <select id="via" name="via"> <option selected="selected">Seleccione su tipo de vía</option> <option value="Alameda">Alameda</option> <option value="Autopista">Autopista</option> <option value="Autovia">Autovía</option> <option value="Avenida">Avenida</option> <option value="Barriada">Barriada</option> <option value="Bulevar">Bulevar</option> <option value="Calle">Calle</option> <option value="Camino">Camino</option> <option value="Carretera">Carretera</option> <option value="Glorieta">Glorieta</option> <option value="Partida">Partida</option> <option value="Pasaje">Pasaje</option> <option value="Paseo">paseo</option> <option value="Plaza">Plaza</option> <option value="Ronda">Ronda</option> <option value="Sector">Sector</option> <option value="Urbanizacion">Urbanización</option> <option value="Travesia">Travesía</option> <option value="Via">Vía</option> </select> </div> {elseif $field_name eq "address1"} <div class="required form-group"> <label for="address1">{l s='Address'} <sup>*</sup></label> <input type="text" class="form-control" name="address1" id="address1" value="{if isset($smarty.post.address1)}{$smarty.post.address1}{/if}" /> </div> {elseif $field_name eq "address2"} <div class="form-group is_customer_param"> <label for="address2">{l s='Address (Line 2)'} <sup>*</sup></label> <input type="text" class="form-control" name="address2" id="address2" value="{if isset($smarty.post.address2)}{$smarty.post.address2}{/if}" /> </div> {elseif $field_name eq "numero"} <div class="required form-group"> <label for="numero">{l s='Numero'} <sup>*</sup></label> <input type="text" class="form-control" name="numero" id="numero" value="{if isset($smarty.post.numero)}{$smarty.post.numero}{/if}" /> </div> {elseif $field_name eq "puerta"} <div class="required form-group"> <label for="puerta">{l s='Puerta'} <sup>*</sup></label> <input type="text" class="form-control" name="puerta" id="puerta" placeholder="En caso de ser un bajo, escribir BAJO" value="{if isset($smarty.post.puerta)}{$smarty.post.puerta}{/if}" /> </div> Adress.php public $address1; public $numero; public $puerta; public $via; 'address1' => array('type' => self::TYPE_STRING, 'validate' => 'isAddress', 'required' => true, 'size' => 128), 'via' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 64), 'numero' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 64), 'puerta' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 64), AdminAddressesController.php public function initPageHeaderToolbar() { if (empty($this->display)) $this->page_header_toolbar_btn['new_address'] = array( 'href' => self::$currentIndex.'&addaddress&token='.$this->token, 'desc' => $this->l('Add new address', null, null, false), 'icon' => 'process-icon-new' ); parent::initPageHeaderToolbar(); } public function renderForm() { $this->fields_form = array( 'legend' => array( 'title' => $this->l('Addresses'), 'icon' => 'icon-envelope-alt' ), 'input' => array( array( 'type' => 'text_customer', 'label' => $this->l('Customer'), 'name' => 'id_customer', 'required' => false, ), array( 'type' => 'text', 'label' => $this->l('Identification Number'), 'name' => 'dni', 'required' => false, 'col' => '4', 'hint' => $this->l('DNI / NIF / NIE') ), array( 'type' => 'text', 'label' => $this->l('Numero'), 'name' => 'numero', 'required' => false, 'col' => '4', 'hint' => $this->l('Numero!') ), array( 'type' => 'text', 'label' => $this->l('Puerta'), 'name' => 'puerta', 'required' => false, 'col' => '4', 'hint' => $this->l('Puerta!') ), array( 'type' => 'text', 'label' => $this->l('via'), 'name' => 'via', 'required' => false, 'col' => '4', 'hint' => $this->l('via!') ), array( 'type' => 'text', 'label' => $this->l('Address alias'), 'name' => 'alias', 'required' => true, 'col' => '4', 'hint' => $this->l('Invalid characters:').' <>;=#{}' ), array( 'type' => 'text', 'label' => $this->l('Home phone'), 'name' => 'phone', 'required' => false, 'col' => '4', 'hint' => Configuration::get('PS_ONE_PHONE_AT_LEAST') ? sprintf($this->l('You must register at least one phone number.')) : '' ), array( 'type' => 'text', 'label' => $this->l('Mobile phone'), 'name' => 'phone_mobile', 'required' => false, 'col' => '4', 'hint' => Configuration::get('PS_ONE_PHONE_AT_LEAST') ? sprintf($this->l('You must register at least one phone number.')) : '' ), array( 'type' => 'textarea', 'label' => $this->l('Other'), 'name' => 'other', 'required' => false, 'cols' => 15, 'rows' => 3, 'hint' => $this->l('Forbidden characters:').' <>;=#{}' ), ), 'submit' => array( 'title' => $this->l('Save'), ) ); Todo esto funciona bien, pero ingresa los select cada uno en su campo. ¿Como haría para que ingresara los select de vía, address, número y puerta en el campo de address1? Edited May 27, 2014 by djmortis (see edit history) Link to comment Share on other sites More sharing options...
Rolige Posted May 27, 2014 Share Posted May 27, 2014 Lo que sucede que de la forma que lo estas haciendo deberás modificar la tabla de address porque así lo estas indicando en la clase, y veo que hasta el controlador de Admin modificaste, si lo que necesitas es únicamente separar los campos en la fase del registro y guárdalos anidados en el address1 de la tabla address, entonces solo necesitas dejar el primer cambio que hiciste en authentication.tpl y al momento de que se guarde el registro concatenar los campos y pasarlos al POST de address1 1 Link to comment Share on other sites More sharing options...
djmortis Posted May 27, 2014 Author Share Posted May 27, 2014 COTOKO y como hago eso? Link to comment Share on other sites More sharing options...
Rolige Posted May 27, 2014 Share Posted May 27, 2014 La concatenacion la puedes hacer en el archivo /controllers/front/AuthController.php, por el momento ya agregaste los nuevos inputs en autenthication.tpl, pero como bien sabes dentro de ese archivo la informacion parece repetirse 3 veces porque existes 3 metodos de registro, que son el GuestCheckout, el OnePage y el tradicional de 5 pasos, no se con cual es el que hayas editado, pero al final de ese formulario busca el nombre del boton supongo que sera el de name="submitAccount", si es este entoces en el archivo AuthController.php busca la funcion protected function processSubmitAccount() y justo despues es donde puedes concatenar los datos, por ejemplo: $_POST['address1'] = $_POST['via'].' '.$_POST['address1'].' '.$_POST['numero'].' '.$_POST['puerta']; Con esto creo que te valdria para hacerlo, no lo he probado pero creo que deberia funcionar. 1 Link to comment Share on other sites More sharing options...
djmortis Posted May 27, 2014 Author Share Posted May 27, 2014 He usado el guest chekout. Link to comment Share on other sites More sharing options...
Rolige Posted May 27, 2014 Share Posted May 27, 2014 (edited) He usado el guest chekout. Pues revisando el codigo de AuthController.php parece que tanto el submitAccount como el submitGuestAccount son validados en la misma funcion, asi que puedes agregar el codigo tal como te indique. Edited May 27, 2014 by COTOKO (see edit history) Link to comment Share on other sites More sharing options...
djmortis Posted May 27, 2014 Author Share Posted May 27, 2014 Funciona perfecto COTOKO, si quisiera separar por guiones o poner algún texto fijo entre esas variables como lo haría? Por ejemplo Calles Las Barcas 2 - 4 (añadir ese guion. Dejo donde he puesto lo que me has dicho... * Process submit on an account */ protected function processSubmitAccount() { Hook::exec('actionBeforeSubmitAccount'); $this->create_account = true; if (Tools::isSubmit('submitAccount')) $this->context->smarty->assign('email_create', 1); $_POST['address1'] = $_POST['via'].' '.$_POST['address1'].' '.$_POST['numero'].' '.$_POST['puerta']; Link to comment Share on other sites More sharing options...
Rolige Posted May 27, 2014 Share Posted May 27, 2014 Funciona perfecto COTOKO, si quisiera separar por guiones o poner algún texto fijo entre esas variables como lo haría? Por ejemplo Calles Las Barcas 2 - 4 (añadir ese guion. Lo que esta dentro de las comillas es lo que separa un campo del otro, con el guien quedaria asi: $_POST['address1'] = $_POST['via'].' '.$_POST['address1'].' '.$_POST['numero'].' - '.$_POST['puerta']; 1 Link to comment Share on other sites More sharing options...
djmortis Posted May 27, 2014 Author Share Posted May 27, 2014 Muchisimas gracias, Link to comment Share on other sites More sharing options...
Rolige Posted May 27, 2014 Share Posted May 27, 2014 Muchisimas gracias, De nada, si puedes cambia el titulo agregando al inicio la palabra (solucionado) Link to comment Share on other sites More sharing options...
djmortis Posted May 27, 2014 Author Share Posted May 27, 2014 Hecho, Link to comment Share on other sites More sharing options...
Recommended Posts