web-dev-qa-db-ja.com

特定のグループタイプのすべてのグループコンテンツを表示する

これを理解するのは非常に困難で、それが可能かどうか疑問に思っています。私はオーガニックグループ7.x-2.xを使用しており、2つの「グループ」タイプがあります。学生グループタイプと教員グループタイプです。また、ブログ投稿と呼ばれる「グループコンテンツ」タイプもあり、どちらのグループタイプでも投稿できます。私がやりたいことは、2つのビューを作成することです。1つはすべての学生グループに投稿されたすべてのブログ投稿を表示するビュー、もう1つは教員グループに同じビューを表示するビューです。

これを行う方法について誰かが私に洞察を提供できますか?

補足:OGがエンティティ参照を使用してグループメンバーシップを割り当てるように切り替えたため、ビューでこの関係を使用してこれを達成するのは簡単だと思いましたが、ウィジェットのエンティティ参照のみを使用しているように見えます 通常のエンティティ参照フィールドのようにデータを保存しません 。私がog_membership関係で試みたすべてが失敗したように見えたので、ここで途方に暮れています。何か助けていただければ幸いです!

4
bkildow

うわー、私は実際にこれを理解しました。基本的に、次のことを行う必要があります。

  • 「OGメンバーシップ:ノードからのOGメンバーシップ」関係をビューに追加します。
  • 上記の関係を割り当てて、「OGメンバーシップ:グループNode」関係を追加します。
  • 「コンテンツ:タイプ」のフィルター基準を追加します=表示するグループコンテンツタイプ(これがコツです)に、上記の関係を割り当てます。

より役立つスクリーンショットを次に示します。

enter image description here

enter image description here

3
bkildow

ビューGUIを使用してそれを行う方法はわかりませんが、ビューからのクエリをオーバーライドして表示するために使用できる独自のクエリを作成する方法を説明できます。

必要なすべてのデータは2つのテーブルに保存されます

field_data_group_audience.entity_id   // node id of the content you are looking for
field_data_group_audience.bundle      // type of content in your case blog posts

JOIN
node -> type // equal to student group or faculty group

グループのnidはグループのgidと同じではないため、og tableを使用して2つのテーブルを結合する必要があります

JOIN
og 
WHERE
og.etid = node.nid
AND
og.gid = field_data_group_audience.group_audiance_gid

これにより、次のような結果になります。

$query = db_select('field_data_group_audience');
$query->join('og', 'og', 'og.gid = field_data_group_audience.group_audiance_gid'); 
$query->join('node', 'node', 'og.etid = node.nid'); 
$query->addfield('field_data_group_audience','entity_id','tricky_name_expected_by_views');
$query->condition('field_data_group_audience.bundle', blog post,'=');
$query->condition('node.type', 'student group','=');
$view->build_info['query'] = $query;

機能するクエリを取得したら、hook_views_pre_executeを使用してビューにプラグインします。 https://drupal.stackexchange.com/a/56322/1215

2
Pawel G