Pracuję nad systemem, w którym polegamy na wielu „administratorach / menedżerach” wysyłających e-maile do użytkowników z bazy danych. Jedną z kluczowych funkcji jest możliwość wysyłania wiadomości e-mail do kilku osób jednocześnie, podając szczegółowe informacje dotyczące każdej z nich. Inną kluczową cechą jest możliwość ręcznego tworzenia wiadomości e-mail, ponieważ zwykle konieczne jest ich nieznaczne modyfikowanie za każdym razem, ale posiadanie podstawowego szablonu oszczędza dużo czasu.
W tym celu mamy typowe rozwiązanie „szablonów”, w którym mamy szablon wyglądający mniej więcej tak:
Hello {{recipient.full_name}},
Your application to {{activity.title}} has been accepted.
You have requested to participate on dates {{application.dates}}, in role {{application.role}}
Blah blah blah
Problem, który mamy, jest oczywiście taki, jak oczekiwaliśmy, że menedżerowie nie rozumieją całej idei „zmiennych” i robią takie rzeczy, jak nadpisywanie ich, co nie pozwala im wysyłać wiadomości e-mail do więcej niż jednej osoby na raz, zakładając, że nie zostaną one zastąpione i że system jest uszkodzony, a nawet niewytłumaczalne rzeczy, takie jak „Hello {{John}}”.
Dużym problemem jest to, że jak zwykle nie jest to przenoszone do sekcji „admin”, w której tylko kilku zaawansowanych użytkowników ma dostęp do edycji szablonów, które są automatycznie wysyłane i oczekuje się, że będą wiedzieć, co robią. Każdy użytkownik systemu zostaje narażony na ten problem.
Oczywistym rozwiązaniem byłoby zastąpienie zmiennych przed wyświetleniem tego szablonu do edycji przez użytkownika, ale nie działa to w przypadku wysyłania wiadomości e-mail do kilku osób.
Wydaje się, że jest to dość powszechny problem i mamy nadzieję, że ktoś już go rozwiązał.
Czy widziałeś / stworzyłeś / potrafisz wymyślić dobre rozwiązania tego problemu?
Aktualizacja
Ostatecznie zrobiłem na podstawie odpowiedzi Daniela B. Wykrywanie, na podstawie pozycji kursora i pozycji {{}} w kodzie, czy użytkownik jest obecnie „wewnątrz zmiennej”, czy „na zewnątrz”. W środku pokazuję mały fragment tekstu pod dużym obszarem tekstowym, wyjaśniając, że zostanie on zastąpiony i że mogą go całkowicie usunąć, jeśli chcą, ale nie mogą go edytować.
Robię to onClick, onChange, onKeyDown, onKeyUp. W przypadku zdarzeń „kluczowych”, jeśli znajdujemy się w zmiennej, zwracam PRAWDA tylko wtedy, gdy keyCode jest jednym z kilku kluczy „nawigacyjnych”. W przeciwnym razie zwracam FAŁSZ, co skutecznie zapobiega edycji tej zmiennej.
Nie jest idealny, ale był bardzo tani i wydaje się skuteczny.