私は、データベースからユーザーにメールを送信する多くの「管理者/マネージャー」に依存しているシステムに取り組んでいます。主な機能の1つは、同時に複数の人にメールを送信できることです。もう1つの重要な機能は、メールを手作業で作成できることです。これは、毎回わずかに変更する必要がある傾向があるためですが、基本的なテンプレートを使用すると、多くの時間を節約できます。
このため、典型的な「テンプレート」ソリューションがあり、次のようなテンプレートがあります。
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
私たちが抱えている問題は、(予想どおり)マネージャーが「変数」のアイデア全体を理解していないこと、そしてそれらを上書きするようなことをしていることです。それらは置き換えられず、システムが壊れているか、または「こんにちは{{ジョン}}」のような不可解なものですらある。
大きな問題は、これがいつものように、自動的に送信されるテンプレートの編集にアクセスできるパワーユーザーが数人しかいない "admin"セクションに追いやられておらず、何をしているのかを知っていることが期待されることです。システムのすべてのユーザーがこの問題にさらされます。
明白な解決策は、ユーザーが編集できるようにこのテンプレートを表示する前に変数を置き換えることですが、複数の人にメールを送信する場合は機能しません。
これはかなり一般的な問題のようですが、誰かがすでに解決していることを期待しています。
この問題の適切な解決策をどこかで見た/作成した/思いつくことができますか?
更新
ダニエルBの答えに基づいて私が最終的に行ったのは、カーソル位置とコード内の{{}}の位置に基づいて、ユーザーが現在「変数内」か「外」かを検出することでした。内部では、大きなテキスト領域の下に小さなテキストを表示して、これが置き換えられること、および必要に応じて完全に削除できるが、編集できないことを説明しています。
私はこれをonClick、onChange、onKeyDown、onKeyUpで行います。「キー」イベントの場合、変数内にいる場合、keyCodeがいくつかの「ナビゲーション」キーの1つである場合にのみ、TRUEを返します。それ以外の場合は、FALSEを返します。これにより、その変数の編集が事実上防止されます。
完璧ではありませんが、とても安く、効果があるようです。