Jump to content

[Solucionado] Ingresar varios select en un campo de la tabla ps_address.


Recommended Posts

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 by djmortis (see edit history)
Link to comment
Share on other sites

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

  • Like 1
Link to comment
Share on other sites

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.

  • Like 1
Link to comment
Share on other sites

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

 

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'];
  • Like 1
Link to comment
Share on other sites

  • nadie locked this topic
Guest
This topic is now closed to further replies.
×
×
  • Create New...