Системные шаблоны E-mail Принято

1

Добрый день!


Начинаю править системные шаблоны уведомлений клиента об успешной регистрации, смене пароля и т.д.,

и где-то на пятом шаблоне система очищает в дефолт все предыдущие исправления! :(

заснял видео, как это происходит: https://yadi.sk/i/6JGIQPVH8sI7...

2 комментария

  • +1
    Алексей Алексей 23 февраля 2021 00:42 #

    Видимо, проблема в размере и количестве текста кода в шаблонах. Попробовал уменьшить код за счет использования блоков - помогло.

  • +2
    replicant replicant 23 февраля 2021 08:48 #

    В двух словах о том, почему такое случается.

    Дело в том, что системные и прочие шаблоны Email и SMS из приложения Настройки (не путать с уведомлениями Магазина) сохраняются в таблице wa_verification_channel_params в БД.

    Причем сохраняются весьма хитро. В одно поле засовываются ВСЕ шаблоны разом для каждого из каналов верификации (он же набор шаблонов уведомлений). Т.е. все 6 шаблонов писем сохраняются в одну ячейку таблицы в БД. Там рядом ещё пишется статистика срабатывания шаблонов типа "total":19466,"total_failed":23,"last_failed":0, но это уже не интересно.

    Поле value, в которое записываются шаблоны, имеет тип TEXT, а значит длину 65535 байт (не равно числу символов шаблона). Сами шаблоны выглядят таким образом

    <p>\u041f\u043e\u0437\u0434\u0440\u0430\u0432\u043b\u044f\u0435\u043c!<\/p>
    
    Что в переводе на нормальный HTML будет выглядеть как
     
    <p>Поздравляем!</p>

    А значит поля длиной 65535 просто не хватит и причем не хватит весьма быстро, если начать внедрять туда шаблоны по типу как из уведомлений Магазина, которые обычно толще, чем системные.

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

    Избавиться от этого "в лоб" можно сменой типа поля, в котором всё хранится, на скажем MEDIUMTEXT до 16777215 или LONGTEXT до 4 Гб :)

    Либо подключить блоки, укоротив непосредственно хранимый код.

    Хотя лично для себя предпочел бы именно модификацию поля таблицы БД, исходя из принципа "хранения однотипных данных в одном месте", чтобы не забыть потом какие блоки на что влияют, когда этих блоков будет штук 50-60 или более.

    Добавить комментарий

    Чтобы добавить комментарий, зарегистрируйтесь или войдите