web-dev-qa-db-ja.com

プログラムでユーザーが同じエンティティを2回続けて保存できないようにするにはどうすればよいですか?

サーバーが過負荷になることがあり、エンティティ作成ページの[保存]ボタンを数回押すと、同じエンティティの複数のバージョンが作成されることがあります。

したがって、ユーザーが同じエンティティ(ユーザーが保存した直前のエンティティとまったく同じフィールドコンテンツを持つエンティティ)を保存できないようにしたいと思います。

1つの修正は、より良いサーバーを入手することです。私はそれに取り組んでいます。

それでも、ユーザーがまったく同じエンティティを2回続けて保存することをプログラムで防止したいと思います。私の特定の使用例では、このエンティティはプライベートメッセージモジュールからの新しいプライベートメッセージです。

これを行う「ベストプラクティス」の方法はありますか?

これが私が考えたことです。

  • hook_entity_presave()で、データベースをクエリし、ユーザーが保存した最後のエンティティが同じ値を持っているかどうかを確認します。
  • 最後に保存されたエンティティのユーザープロファイルにエンティティ参照を追加し、ユーザープロファイルのエンティティ参照フィールドを、保存されるたびに新しいエンティティの値で更新します。新しいエンティティを保存するときは、エンティティ参照エンティティの値と照合してください。
4
Patrick Kenny

これはUXの問題だと思います。私がお勧めすることの1つは、サイト上の特定の高トラフィックフォームがクリック時にドキドキ/進行/送信インジケータを表示できるようにすることです。

必要に応じて、フォームAPIを使用して、サイトフォームのデフォルトの送信要素をオーバーライドすることでこれを実行できると思います。これは、関連するSO文書へのリンク付きの投稿で説明されています: https://stackoverflow.com/questions/6100970/how-do-you-remove-the-throbber -from-drupal-7-ajax-link

3
tenken

JQueryを使用して、保存ボタンをクリックしたときに保存ボタンを読み込み中のgifに変更できます。したがって、これ以上のクリックを防ぐことができます。

(function($) {
  $('.form-submit').click(function() {
     $('.form-submit').html('<img src="https://media.giphy.com/media/TtZqlvHid7BjW/giphy.gif">');
  });
})(jQuery);

JS Fiddle例

ノードを編集すると、管理テーマ(7)が使用されるため、jQueryを管理テーマ(7)に追加する必要があります。

プライベートメッセージが管理テーマを使用しているかどうかはわかりません。それを確認する必要があります。私はそれはそうだと思いますが、そうでない場合は、jQueryを管理テーマではなくテーマに追加します(7)

注:Drupal 7のデフォルトのadminテーマがある場合、管理テーマを変更してから、そのテーマを編集してください。

2
No Sssweat

これはdrupalの世界では古典的な質問のようですが、類似の投稿をすでに検索しましたか?

これが私の研究が提供したものです:

これは2つの問題であり、最初はクライアント側で作業することから始められますが、重複を避けるために、最終的にはサーバー側で作業する必要があります。これが、この問題を回避するための「ベストプラクティス」の方法であることがわかったものです。

クライアント側:

クライアント側のソリューション: https://www.drupal.org/project/hide_submit

しかし、JavaScriptがない場合はどうなりますか?

サーバー側:

あなたが始めた方向により近い:

https://drupal.stackexchange.com/a/152181/5718

「サーバー側」アプローチから始めて、両方のアプローチを適用します。

幸運を!

1