Автор Тема: Язык ссылок в шаблонах e-mail  (Прочитано 45 раз)

21 Ноября 2016, 15:59:35
  • Новичок
  • *
  • Сообщений: 19
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Столкнулся с интересной проблемой:
Язык ссылок в шаблонах e-mail, которые высылаются при изменении статуса заказа, не совпадает с языком клиента, а зависит от языка работника магазина.

Подробнее:
На сайте 3 языка - русский, немецкий, английский. При изменении статуса заказа, например, на "Заказ отменён", клиенту приходит соответствующее шаблонное уведомление. И оно, конечно, приходит на том языке, на котором клиент делал заказ. Это логично и с этим проблем нет. Вот только обнаружилось, что ссылки, которые присутствуют в подобных письмах, типа "Мой аккаунт" или "История заказов" не совпадают с языком клиента. То есть, например, "англичанин", получая письмо на английском, должен видеть ссылки вида "www.sitename.com/en/my-account". "Немец" - соотвтественно "www.sitename.com/de/mein-Konto".  А они по факту получают ссылки на русском "www.sitename.com/ru/moj-akkaunt", так как статус заказа менял русский работник, то есть с админкой на русском. Как-только работник меняет язык админки, то и язык ссылок сразу меняется. Повторюсь, что сам шаблон/текст письма приходит правильно - на языке клиента. Проблема только со ссылками.

Файлы шаблонов писем проверял - там указаны переменные. Ссылки тоже корректные и рабочие. Не хочу показаться голословным, но есть стойкое ощущение, что это баг разработчика. Поправьте, если не прав.

Обращаюсь к коллегам с мультиязычными магазинами: кто-то сталкивался с подобным? Предполагаю, что немногие знают о такой проблеме, в принципе. Ибо редко такие мелочи проверяют. При проверке я этот момент пропустил. Типа приходят письма на языке клиента и хорошо. А вот язык ссылок заметил чисто случайно.
21 Ноября 2016, 16:28:59
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 20838
  • Репутация: +25276/-0
  • Prestashop - просто и эффективно
    • Просмотр профиля
Должно быть на языке заказа. При смене статуса такой код
@Mail::Send((int)$order->id_lang, ...К вас версия prestashop какая? Класс Mail не замещали?
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
21 Ноября 2016, 16:45:58
Ответ #2
  • Новичок
  • *
  • Сообщений: 19
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Должно быть на языке заказа. При смене статуса такой код
@Mail::Send((int)$order->id_lang, ...К вас версия prestashop какая? Класс Mail не замещали?

Версия 1.6.1.8. Класс Mail не замещал!

Откуда этот код? mail.php? Вроде такого там не нашёл.
Я не большой друг PHP, но $id_lang там везде вроде стоит. Типа:
public static function l($string, $id_lang = null, Context $context = null)
    {
        global $_LANGMAIL;

        if (!$context) {
            $context = Context::getContext();
        }
        if ($id_lang == null) {
            $id_lang = (!isset($context->language) || !is_object($context->language)) ? (int)Configuration::get('PS_LANG_DEFAULT') : (int)$context->language->id;
        }
        $iso_code = Language::getIsoById((int)$id_lang);

        $file_core = _PS_ROOT_DIR_.'/mails/'.$iso_code.'/lang.php';


В ../themes/default-bootstrap/mails/en/order_canceled.html стоит
You can review your order and download your invoice from the <a href="{history_url}" style="color:#337ff1">"Order history"</a> section of your customer account by clicking <a href="{my_account_url}" style="color:#337ff1">"My account"</a> on our shop.
21 Ноября 2016, 16:54:34
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 20838
  • Репутация: +25276/-0
  • Prestashop - просто и эффективно
    • Просмотр профиля
Файл /classes/order/OrderHistory.php метод sendEmail строка 468.
if (!Mail::Send((int)$order->id_lang, $result['template'], $topic, $data, $result['email'], $result['firstname'].' '.$result['lastname'],
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
21 Ноября 2016, 16:58:48
Ответ #4
  • Новичок
  • *
  • Сообщений: 19
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Файл /classes/order/OrderHistory.php метод sendEmail строка 468.
if (!Mail::Send((int)$order->id_lang, $result['template'], $topic, $data, $result['email'], $result['firstname'].' '.$result['lastname'],
думаю, что мой код от вашего не отличается:
if (!Mail::Send((int)$order->id_lang, $result['template'], $topic, $data, $result['email'], $result['firstname'].' '.$result['lastname'],И повторюсь, что речь идёт не о самом языке письма (он соответствует языку клиента), а о языке ссылок...
21 Ноября 2016, 17:06:55
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 20838
  • Репутация: +25276/-0
  • Prestashop - просто и эффективно
    • Просмотр профиля
Понятно. Эти ссылки определяются глобально по языку сайта.
$template_vars['{shop_name}'] = Tools::safeOutput(Configuration::get('PS_SHOP_NAME', null, null, $id_shop));
$template_vars['{shop_url}'] = Context::getContext()->link->getPageLink('index', true, Context::getContext()->language->id, null, false, $id_shop);
$template_vars['{my_account_url}'] = Context::getContext()->link->getPageLink('my-account', true, Context::getContext()->language->id, null, false, $id_shop);
$template_vars['{guest_tracking_url}'] = Context::getContext()->link->getPageLink('guest-tracking', true, Context::getContext()->language->id, null, false, $id_shop);
$template_vars['{history_url}'] = Context::getContext()->link->getPageLink('history', true, Context::getContext()->language->id, null, false, $id_shop);
$template_vars['{color}'] = Tools::safeOutput(Configuration::get('PS_MAIL_COLOR', null, null, $id_shop));
А при смене статуса определяют только наполнение
$data = array(
        '{lastname}' => $result['lastname'],
        '{firstname}' => $result['firstname'],
        '{id_order}' => (int)$this->id_order,
        '{order_name}' => $order->getUniqReference()
);
Чтобы ссылки были на языке заказа, нужно переопределить глобальные переменные email.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
21 Ноября 2016, 17:14:28
Ответ #6
  • Новичок
  • *
  • Сообщений: 19
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Понятно. Эти ссылки определяются глобально по языку сайта.
$template_vars['{shop_name}'] = Tools::safeOutput(Configuration::get('PS_SHOP_NAME', null, null, $id_shop));
$template_vars['{shop_url}'] = Context::getContext()->link->getPageLink('index', true, Context::getContext()->language->id, null, false, $id_shop);
$template_vars['{my_account_url}'] = Context::getContext()->link->getPageLink('my-account', true, Context::getContext()->language->id, null, false, $id_shop);
$template_vars['{guest_tracking_url}'] = Context::getContext()->link->getPageLink('guest-tracking', true, Context::getContext()->language->id, null, false, $id_shop);
$template_vars['{history_url}'] = Context::getContext()->link->getPageLink('history', true, Context::getContext()->language->id, null, false, $id_shop);
$template_vars['{color}'] = Tools::safeOutput(Configuration::get('PS_MAIL_COLOR', null, null, $id_shop));
А при смене статуса определяют только наполнение
$data = array(
        '{lastname}' => $result['lastname'],
        '{firstname}' => $result['firstname'],
        '{id_order}' => (int)$this->id_order,
        '{order_name}' => $order->getUniqReference()
);
Чтобы ссылки были на языке заказа, нужно переопределить глобальные переменные email.

Если вы правы, то это лишь подтверждает, мои предположения о том, что это баг разработчика. Ибо менять язык шаблона письма под язык клиента и при этом не изменить язык ссылок, это мягко говоря неправильно. Уж лучше бы и язык письма оставляли без изменений. Можно только догадываться сколько админов не знает о таком косяке...
21 Ноября 2016, 17:33:20
Ответ #7
  • Новичок
  • *
  • Сообщений: 19
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Понятно. Эти ссылки определяются глобально по языку сайта.
$template_vars['{shop_name}'] = Tools::safeOutput(Configuration::get('PS_SHOP_NAME', null, null, $id_shop));
$template_vars['{shop_url}'] = Context::getContext()->link->getPageLink('index', true, Context::getContext()->language->id, null, false, $id_shop);
$template_vars['{my_account_url}'] = Context::getContext()->link->getPageLink('my-account', true, Context::getContext()->language->id, null, false, $id_shop);
$template_vars['{guest_tracking_url}'] = Context::getContext()->link->getPageLink('guest-tracking', true, Context::getContext()->language->id, null, false, $id_shop);
$template_vars['{history_url}'] = Context::getContext()->link->getPageLink('history', true, Context::getContext()->language->id, null, false, $id_shop);
$template_vars['{color}'] = Tools::safeOutput(Configuration::get('PS_MAIL_COLOR', null, null, $id_shop));
А при смене статуса определяют только наполнение
$data = array(
        '{lastname}' => $result['lastname'],
        '{firstname}' => $result['firstname'],
        '{id_order}' => (int)$this->id_order,
        '{order_name}' => $order->getUniqReference()
);
Чтобы ссылки были на языке заказа, нужно переопределить глобальные переменные email.

Если вы правы, то это лишь подтверждает, мои предположения о том, что это баг разработчика. Ибо менять язык шаблона письма под язык клиента и при этом не изменить язык ссылок, это мягко говоря неправильно. Уж лучше бы и язык письма оставляли без изменений. Можно только догадываться сколько админов не знает о таком косяке...

Отсюда рождается новый вопрос:
PrestaMan, я понимаю, что решение подобных проблем, есть ваш хлеб. Я это уважаю. Но в данном случае я вижу не фичу, а конкретный баг. И его решение - это прерогатива разработчиков. Отсюда вопрос вам или кому-то ещё: кто-нибудь обращался с запросом к разработчикам по устранению багов? Если да, то успешно ли? И как это происходило?
21 Ноября 2016, 17:45:30
Ответ #8
  • Ветеран
  • *****
  • Сообщений: 20838
  • Репутация: +25276/-0
  • Prestashop - просто и эффективно
    • Просмотр профиля
Обращались и не раз. Багов полно. Исправляют не так быстро, как хотелось бы.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
21 Ноября 2016, 17:49:48
Ответ #9
  • Новичок
  • *
  • Сообщений: 19
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Обращались и не раз. Багов полно. Исправляют не так быстро, как хотелось бы.
ОК. Спасибо. Напишу им. Посмотрим, чем закончится...
21 Ноября 2016, 17:53:54
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 13147
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
С history_url уже была проблема. В  pretsahsop 1.6.0 по 1.6.1 не могли эту переменную правильно определить. Тогда же полнимался вопрос о языке. Похоже что с этим ничего не сделали и делать не будут.
21 Ноября 2016, 18:03:10
Ответ #11
  • Новичок
  • *
  • Сообщений: 19
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
С history_url уже была проблема. В  pretsahsop 1.6.0 по 1.6.1 не могли эту переменную правильно определить. Тогда же полнимался вопрос о языке. Похоже что с этим ничего не сделали и делать не будут.
Спасибо за инфу.
Теперь мысли в слух:
Я, конечно, понимаю, что движок условно бесплатный и разработчики нам ничего не должны. И понимаю, что багов везде хватает. Но отправка мейлов об изменении статусов заказа - это неотъемлимая часть любого интернет-магазина. И сейчас выходит, что я должен, либо заплатить деньги фрилансерам за устранение бага, либо каждый раз переключать язык админки под каждого клиента. И судя по вашим словам, разработчики в курсе, но забили болт на это. Респект им...
Спасибо за внимание :)
21 Ноября 2016, 18:28:58
Ответ #12
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 1100
  • Репутация: +336/-0
  • Job-Freelance - работа для специалистов PrestaShop
    • Просмотр профиля
    • Job Freelance - удаленная работа программистам, веб-мастерам и дизайнерам
Почему бы не заплатить фрилансерам? У вас благотворительная организация?
Разработчики движок бесплатно дали, развивают проект, постояно улучшают, неужели этого не достаточно? Небольшие баги можно и самому исправить.
Не зря говорят, сколько не дай, все мало
Job Freelance - предложения от европейских работодателей для  программистов, веб-мастеров и дизайнеров - специалистам по Magento и PrestaShop.
21 Ноября 2016, 18:39:39
Ответ #13
  • Новичок
  • *
  • Сообщений: 19
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Почему бы не заплатить фрилансерам? У вас благотворительная организация?
Разработчики движок бесплатно дали, развивают проект, постояно улучшают, неужели этого не достаточно? Небольшие баги можно и самому исправить.
Не зря говорят, сколько не дай, все мало
Фрилансерам готов платить и плачу за добавление функций. Баги должны устраняться разработчиками независимо от платности движка. У организации есть бюджет. В который никто не закладывал устранение багов разработчика. А функция отправки уведомлений является неотъемлимой частью любого магазина. Не переходите на личности.  Я никого не заставляю работать бесплатно. Я высказал своё мнение.
21 Ноября 2016, 20:29:47
Ответ #14
  • Ветеран
  • *****
  • Сообщений: 2169
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
Навряд ли быстро устранят. Сейчас все силы на prestashop 1.7 бросили, а для версии 1.6 мало что делают.