Jump to content

Código de Tracking en envíos


Recommended Posts

Estoy intentando que salga el código de tracking en el template "in transit" pero solo sale lo que va entre corchetes:

 

Puedes seguir su ubicación actual colocando el numero de tracking {shipping_number} en la web:{followup}

 

He añadido según las instrucciones de:

 

http://forge.prestashop.com/browse/PSCFV-6584

 

añadiendo: '{shipping_number}' => $order->shipping_number,

 

Pero lo que veo raro es que esas dos variables no las sustituye (las del nombre por ejemplo sin problemas).

 

¿Alguna idea de por donde puede estar el problema? ¿hay que crear el estado "en transito" de alguna forma en especial para que le pase esas variables?

 

Gracias

Link to comment
Share on other sites

  • 3 weeks later...

¿En el fichero:

 

/controllers/admin/AdminOrdersController.php

 

seguro que tienes esto:

 

$templateVars = array(
   '{followup}' => str_replace('@', $order->shipping_number, $carrier->url),
   '{firstname}' => $customer->firstname,
   '{lastname}' => $customer->lastname,
   '{id_order}' => $order->id,
   '{shipping_number}' => $order->shipping_number,
   '{order_name}' => $order->getUniqReference()
  );

 

?

 

Mira el fichero de la SVN: https://github.com/P...sController.php

Link to comment
Share on other sites

Gracias "Nadie", mi AdminOrdersControllers tiene:

 

$templateVars = array(

'{followup}' => str_replace('@', $order->shipping_number, $carrier->url),

'{firstname}' => $customer->firstname,

'{lastname}' => $customer->lastname,

'{id_order}' => $order->id,

'{shipping_number}' => $order->shipping_number,

'{order_name}' => $order->getUniqReference()

 

);

if (@Mail::Send((int)$order->id_lang, 'in_transit', Mail::l('Package in transit', (int)$order->id_lang), $templateVars,

$customer->email, $customer->firstname.' '.$customer->lastname, null, null, null, null,

_PS_MAIL_DIR_, true, (int)$order->id_shop))

{

Hook::exec('actionAdminOrdersTrackingNumberUpdate', array('order' => $order));

Tools::redirectAdmin(self::$currentIndex.'&id_order='.$order->id.'&vieworder&conf=4&token='.$this->token);

}

 

 

(es igual que el que está en el SVN) No se si hay algo que haya cambiado. Mi versión es la 5.3.1. Lo raro es que el resto de variables (nombre y apellidos, etc..) lo sustituye sin problemas.

 

La Url de tracking en el backend está bien (si pinchas sobre el número de tracking en el backend te lleva a la web del transporte correctamente). En BBDD he revisado que todos los transportistas (incluso los eliminados) tengan esa URL... Pero nada, el cliente recibe el email con la variable sin sustituir : {followup}

 

¿hay algo que se me esté escapando?

 

Mil gracias!

Link to comment
Share on other sites

Por lo que veo, ya lo has solucionado aquí: http://www.prestasho...s-not-replaced/ por el usuario yaniby ¿no?

 

Hi Thebolina,

 

After a whole day research and testing I have found the solutions (i had the same issue as you)

 

problem:

Prestashop allows you to create a custom order status and assigned the "in_transit" email template to it. which the code in /controllers/admin/AdminOrderController.php doesn't apply to and therefore applying any changes to that file will not affect the template when changing the order status to the one you've created.

 

Solution:

1. open /classes/order/OrderHistory.php

2. add the following line $carrier = new Carrier($order->id_carrier, $order->id_lang);

below $order = new Order($this->id_order); (line 364)

 

so the first few lines of the "addwithemail" function look like this:

 

public function addWithemail($autodate = true, $template_vars = false, Context $context = null)

{

if (!$context)

$context = Context::getContext();

$order = new Order($this->id_order);

$carrier = new Carrier($order->id_carrier, $order->id_lang);

if (!$this->add($autodate))

return false;

 

$result...

 

3. add the following line: $data['{followup}'] = str_replace('@', $order->shipping_number, $carrier->url);

below: $data['{order_name}'] = $order->getUniqReference(); (line 397)

 

so the following lines look like this:

if ($result['module_name'])

{

$module = Module::getInstanceByName($result['module_name']);

if (Validate::isLoadedObject($module) && isset($module->extra_mail_vars) && is_array($module->extra_mail_vars))

$data = array_merge($data, $module->extra_mail_vars);

}

 

$data['{total_paid}'] = Tools::displayPrice((float)$order->total_paid, new Currency((int)$order->id_currency), false);

$data['{order_name}'] = $order->getUniqReference();

$data['{followup}'] = str_replace('@', $order->shipping_number, $carrier->url);

if (Validate::isLoadedObject($order))

Mail::Send((int)$order->id_lang, $result['template'], $topic, $data, $result['email'], $result['firstname'].' '.$result['lastname'],

null, null, null, null, _PS_MAIL_DIR_, false, (int)$order->id_shop);

}

 

return true;...

 

that's it..

 

Recuerda que es mejor hacer un "override" que modificar directamente el fichero original, por el tema de que si actualizas se machacara el fichero. Si necesitas ayuda para hacer el override, te digo como hacerlo.

  • Like 1
Link to comment
Share on other sites

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