theboina Posted July 24, 2013 Share Posted July 24, 2013 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 More sharing options...
theboina Posted July 25, 2013 Author Share Posted July 25, 2013 Por si os sirve de ayuda, las únicas variables que no sustituye son: {shipping_number} y {followup}, el resto (lastname) {name} etc..las cambia sin problemas La versión es 1.5.3 Link to comment Share on other sites More sharing options...
theboina Posted August 15, 2013 Author Share Posted August 15, 2013 Alguna idea de porqué no sustituye la variable {followup} Gracias! Link to comment Share on other sites More sharing options...
nadie Posted August 15, 2013 Share Posted August 15, 2013 ¿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 More sharing options...
theboina Posted August 15, 2013 Author Share Posted August 15, 2013 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 More sharing options...
nadie Posted August 20, 2013 Share Posted August 20, 2013 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. 1 Link to comment Share on other sites More sharing options...
theboina Posted August 21, 2013 Author Share Posted August 21, 2013 Hola que tal!. Si, ayer por fin conseguimos dar con el tema y aparece la URL correctamente.. Los ficheros los modifiqué directamente, haciendo una copia, pero sobre los originales.. ¿como haces el override? Thx! Link to comment Share on other sites More sharing options...
Recommended Posts