2017-05-09 5 views
0

私はDrupal8でウェブサイトを作成しています。私は、セッションの長さにとって重要なユーザー固有のデータを格納するのが良い方法であると思っています。例として、ユーザーが学校の学生で、異なるクラスやコースを受講しているとします。ログイン後、ユーザーはコースの1つを選択し、次にこの特定のコースのすべてのコンテンツ/他の学生/ ...を見るだけになります。セッション中のユーザー入力を保存するためのベストプラクティスDrupal 8

私が考えることができる最も簡単な解決策は、データを$ _SESSIONオブジェクトに格納することです。しかし、Drupalのすべてのビューは、このオブジェクトからデータを読み取らなければなりません。これは、Drupal7ではカスタムPHPコードでは可能でしたが、Drupal8ビューではこれ以上できませんでした。

また、ユーザーの既定の設定を永続的に保存したい場合、現在のセッションで重要な情報を格納するカスタムコンテンツタイプ 'user_config_data'などを作成できますまた、デフォルトの選択肢(つまり、ログイン後デフォルトとして見たいコース)の値を入力することもできます。

後者はおそらくクッキーでも実現できますか?

他に何か考えていない?

パフォーマンス、優れたコーディング慣行、修正可能性の点で、より多くの/より有利なアプローチはありませんか?これについてのご意見ありがとうございます。

答えて

1

PrivateTempStoreはあなたが探しているものです。これを使用して、セッション全体にわたってユーザーごとのデータを格納できます。

あなたは、これは、ユーザーのセッション全体にわたり動作します。この

$tempStoreService = \Drupal::service('user.private_tempstore'); 

// Set a variable in the tempstore 
$tempStoreService->set('user_data', $data); 

// Get a variable from the tempstore 
$userData = $tempStoreService->get('user_data'); 

のようにそれを使用することができます。あなたがユーザー間でデータを共有する必要がある場合は、SharedTempStore

+0

しかし、ビューで変数を使用できるようにするには、tempstoreからどのように読み込むのですか? – user1841373

0

これ以上のことを読んで、私は今VJamieのように$tempStoreServiceを使用しています。 Drupal 8のビューで引数を使用できるようにするために、私はhook_views_pre_view()を実装するカスタムモジュールを作成し、その値をビューの引数として追加しました。次に、ビューでコンテキストフィルタを使用して、引数が使用されていることを確認します。しかし、ビューのプレビューはうまく動作しますが、実際のページでは、ビューがキャッシュされ、出力は同じです。ビュー全体のキャッシングを無効にする場合にのみ動作します。これは標準的なアプローチですか、コンテキストフィルタのキャッシングの問題とは別の解決策ですか?

関連する問題