Предпросмотр в шаблоне и тест письма не работает

На последних версиях карта перестали работать превьюшки шаблона и тест письма но при условии если создать свой статус заказа. Тестировали на моно магазине и на маркетплейсе клиента

Первая ошибка формируется при работе с php 8 а вторая критическая связана с получением товара из заказа, но заказа у это статуса еще нет и соответственно и превью нет.

у вас include_doc не смог найти order.summary

проверки для, можно содержимое шаблона заменить на что-то типа:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Бац!</title>
    </head>
    <body>
       бац-бац!
    </body>
</html>

и проверить предпросмотр.

Не воспроизвел в dev demo. Попробуйте рекомендацию @Alexander.M

Если не получится найти причину, пожалуйста, напишите нам через Help desk. Мы поможем

Да есть и у меня какая-то беда с предпросмотром.

Этот код приводит к ошибке
{{ include_doc("order.summary", order_info.order_id) }}

Метод renderById класса app/Tygh/Template/Document/Order/Type.php разваливается с ошибками ибо в предпросмотре order_info.order_id = null.

Когда это случилось, кто виноват и что делать - пока не изучал. Но на демке этой проблемы не обнаружено.

Если подсунуть действующий order_id, просмотр работает без ошибок.
{{ include_doc("order.summary", 1) }}


Ну и чтоб два раза не вставать ))
переменная {{ c.storefront_url }} создаёт линк с http, не глядя что сайт крутится на https.
в конструкторе класса CompanyVariable строка
$this->storefront_url = fn_url('', 'C', 'http');

подозреваю, что логичнее было бы
$this->storefront_url = fn_url('', 'C', 'current');

1 лайк

@Alexander.M в какой версии вы тестируете? попробуем воспроизвести в ней же

У нас на версии 4.15. 2 PHP 8 msql8

Multi-Vendor 4.15.2 RU
PHP 7.4.3

Попробуйте этот патч. Кажется уже поправили, поэтому я не воспроизвел в дев демо:

bc7798d2fa436526b0177f2835f553d7dddb31b7.diff.zip (1,2 КБ)

Ошибки не генерирует, но и документ не рендерит ))

$order = new Order($order_id, $lang_code, $currency_code);
в $order->data вернулся false

в условие
if ($order->data && $document)
не попадаем.
соответственно, из шаблона отрабатывают только snippet, а include_doc пролетает мимо

А, я понял )) Так и было же задумано ))

Короче, патч работает!

Кому интересно видеть предпросмотр в более лучшем формате вместо
{{ include_doc("order.table", order_info.order_id) }}
временно (!) пропишите
{{ include_doc("order.table", Х) }}
где Х - id заказа, который хотелось бы увидеть

Как-то улучшить бы этот момент, но сейчас в голову не приходит адекватное решение без костылей.

2 лайка

Вообще было бы отлично, если бы реализовали тестирования шаблонов с возможностью указать конкретный заказ.

Поддерживаю! В предпросмотре нет информации котрая добавляется когда заказ формируется. Приходится фантазировать, что мол тут должно быть имя и фамилия, а тут товар, а тут и тд.

я себе пока на тестовом серваке в начало метода renderById класса Type нагородил такое:

if(!$order_id && $_REQUEST['dispatch'] == 'email_templates.preview') {
    $parse = parse_url($_REQUEST['redirect_url']);
    parse_str($parse['query'], $query);
    $status = explode('.', $query['code']);
    $status_code = strtoupper($status[1]);
    $order_id = db_get_row('SELECT order_id FROM ?:orders WHERE status = ?s', $status_code);
}

решение спорное, но для спрятанного от глаз тестового сервака “и так сойдёт” (с)
хоть немного ускорит возню с шаблонами писем))

2 лайка

хех, нет предела совершенству )) чтобы выдёргивать из базы самый свежий заказ с нужным статусом лучше использовать другой запрос:

$order_id = db_get_field('SELECT order_id FROM ?:orders WHERE status = ?s ORDER BY order_id DESC', $status_code);

1 лайк