Не совсем понятна суть задачи.
На что именно Вам нужно заменить "0 грн"? Для конкретной службы доставки или для всех, у которых стоимость 0?
Если для конкретной службы - Новая почта - и если учитывать, что в самой службе невозможно в поле стоимость ввести текст (ну или что Вам нужно), то самы простой вариант - в контроллере внести изменения.
в файле /catalog/controller/mail/order.php в функции add находим код:
foreach ($order_totals as $order_total) {
$data['totals'][] = array(
'title' => $order_total['title'],
'text' => $this->currency->format($order_total['value'], $order_info['currency_code'], $order_info['currency_value']),
);
}
Ну и заменяем его на такой код:
foreach ($order_totals as $order_total) {
if ($order_total['title'] == 'Отправка службой "Новая почта"') {
$data['totals'][] = array(
'title' => $order_total['title'],
'text' => 'Тут добавляйте любой нужный Вам текст. Даже чистый HTML, что-то типа <b>жирный текст</b>',
);
} else {
$data['totals'][] = array(
'title' => $order_total['title'],
'text' => $this->currency->format($order_total['value'], $order_info['currency_code'], $order_info['currency_value']),
);
}
}
Могут возникнуть сложности со строкой
if ($order_total['title'] == 'Отправка службой "Новая почта"') {
Так как есть вероятность что вместо кавычек у Вас в строке могут быть и экранированные кавычки /", и юникод " и прочее. То уже Вам смотреть, но логика именно такая.
И да, если нужно исправить в письме, которое отправляется админу, то в функции alert ищите тот же цикл:
foreach ($order_totals as $order_total) {
$data['totals'][] = array(
'title' => $order_total['title'],
'value' => html_entity_decode($this->currency->format($order_total['value'], $order_info['currency_code'], $order_info['currency_value']), ENT_NOQUOTES, 'UTF-8')
);
}
Ну и по аналогии...
Если же нужно Все ноли заменить на какой-то определенный текст, то можно изменить условие и вместо:
if ($order_total['title'] == 'Отправка службой "Новая почта"') {
вставить это:
if ((int)$order_total['value'] == 0) {
Но, опять же, это костыли, назначение которого не совсем понятно