web-dev-qa-db-ja.com

対象ユーザーごとにコンテンツを分割する方法は?

現在の問題を解決する最善の方法を見つけるのに少し困難があります。それは、さまざまな国で活動している顧客のためのマルチサイトおよび多言語の設定です。国ごとに個別のデータベースが使用され(マルチサイト)、各国には英語+ローカル言語のバリエーション(多言語)があります。

また、顧客にはオーディエンスが分割され(プライベートとビジネス)、すべてのページが1対1で一致します。つまり、/en/private/fooページ、/en/business/fooターゲットオーディエンスを切り替えるだけです(言語スイッチャーの動作と同じです)。

問題は、同期する必要があるページに2つのスイッチャーブロックがあることです。

  • 言語(英語/ローカル言語)
  • オーディエンス(プライベート/ビジネス)

どのようにコンテンツを分割し、異なるオーディエンスグループの異なるノード間の関係を維持しますか?これは他のDrupalコンポーネントなど、メニューなどにも影響を与えます。

私たちは2つの異なるアプローチを見てきました。

  • コンテンツレベルでの分離(オーディエンスグループを選択するための分類またはフィールド)
  • コンテンツのグループ化(例 og module、or the new kid on the block group

同じ問題を抱えている人々がいましたか、それをどのように解決しましたか?

3
Max

@max「プライベート」コンテンツと「ビジネス」コンテンツの間に1-1の関係があるため、おそらく2つのうちの1つでコンテンツを非表示(制限)しているだけだと思います。たとえば、「プライベート」コンテンツが認証されたユーザー、またはコンテンツの支払いをしたユーザーのみが利用できる場合、基本的に他の(ビジネス)コンテンツは縮小バージョン(ティーザー)ですか?

その場合は、同じノードに異なる表示モードを使用することを検討できます。つまり、ビジネスとプライベートの両方に1つのノードしかありませんが、表示モードは異なります。アクセスが制限されているもの(ビジネスであると想定)は、「ティーザー」ビューを使用してノードを表示し、もう一方は「フル」表示モードを使用してノードをレンダリングします。

ユーザーのステータス(ログイン、コンテンツに対する支払いなど)に基づいて、ロード/レンダリング時に動的に表示モードを変更するのは簡単です。

他のオプションは、これを組み合わせることもできますが、コンテンツアクセスモジュール、具体的には フィールドレベルのアクセス を使用して、どのフィールドをレンダリングするかどうかを自動的に制御します。したがって、この構成では、常に同じ(場合によっては異なる)表示モードを使用してノードをレンダリングできますが、ユーザーの認証レベルに基づいて、フィールドを表示しないだけです。私はこれを個人的に使用したことを確認できます仕事( http://www.startnetwork.org )。

すべてが等しい場合、私は個人的には1つのノード(2つの暗黙的に関連するノードではなく)のみを持ち、表示する情報(または量)を単純に制御します。

ご不明な点がございましたら、お気軽にお問い合わせください。

2
JP Dippenaar

Group モジュールを使用して国ごとにグループを作成し、それを subgroup sub-moduleを使用 と組み合わせて、国ごとに4つのサブグループを実装します。

  • ビジネス-英語。
  • プライベート-英語。
  • ビジネス-現地語。
  • プライベート-ローカル言語。

これにより、ターゲットオーディエンスに基づいてコンテンツを整理(分割)するために必要なすべての柔軟性を備えた、D8で機能するソリューションが既に提供されます。

Groupモジュールは完全にエンティティベースであるため、 Views モジュールなどのモジュールによって提供されるあらゆるタイプの典型的な機能を利用できます。

そして、カスタムコードを必要とするものについては、さまざまなフックを利用できます(詳細については 開発ガイド を参照してください)。

0
Pierre.Vriens