DrupalとViews APIを使用して、カスタムコードレベルでサイトデザインの課題を解決しようとしているDrupalエクスペリエンスの時点にいます。いつものように、明らかに問題を解決しようとする私の単純な試みは、私がまだ知らないことがどれほどあるかを私に示しました!
多くの異なるコンテンツタイプとこれらの各タイプのサブカテゴリで使用される「関連ファクト」コンテンツを指すノード参照フィールドがあります。関係を作成してビューの「関連する事実」を表示することはできますが、問題があります。1つは、関連するファクトを別のブロックに入れて、ビューによって提供される記事のリスト全体について、関連するファクトの単一のリストを表示することです。ビューは、同じ「関連ファクト」参照を持つ複数のnidの重複を適切に処理しません。さらに、コンテンツタイプとサブカテゴリごとに個別の「関連ファクト」ビューを生成する必要があります。
引数としてnidのリストを受け入れることができる個別の関連するファクトビューを作成できれば、関連するファクトビューを簡略化できます。だから私の質問はこれにどう取り組むかです。ビュー内から可能かもしれませんが、カスタムモジュールのphpソリューションを探しているので、次のことを達成する必要があります。
「コンテンツタイプ」ビューのいずれかの結果を引数のリストとして抽出します。ビューの結果を表示することに加えて、表示されているNIDのリストをロードする必要があります。
関連するファクトビューを呼び出し、NIDのリストをそれに渡し、「関連するファクト」ビューでフィルターまたはコンテキストフィルターとして使用します。
追加情報:
この戦略を使用して、ビューを定義し、そこから結果を抽出することから始めました。この試みにより、ビューオブジェクトで結果を検索するときに問題が発生しました(この質問を参照してください)。結果を取得したら、それらの結果をフィルターとして含む別のビューを生成する必要があります。すべてのパラメーターがコード化されたインクルードファイルとしてコードから実装されたビューを見ましたが、ビューを定義および生成し、php関数を使用して結果を操作する例は見つかりませんでした。どんな例やリンクもいただければ幸いです。
これまで:
2つの答えが、ビューの結果を適用し、それをコンテキストフィルターとして別のビューに配置するプロセスに対処しています。しかし、私はまだ数十のコンテンツタイプがあり、それぞれに少なくとも12のビューコンテンツペインのバリエーションがあるという問題に直面しています。各ビューを関連するファクトに直接リンクする代わりに、view1コンテンツビューのいずれかの結果を単一の個別の「関連するファクト」ビューに渡す必要があります。
CONTENT TYPE SUB-CATEGORY RELATED FACT (nid)
Type 1 --------- General Info 101, 105
Specifications 103, 105
Inspections 102
Quality
etc...
Type 2 ----------General Info 101, 106
Specifications 102, 103
Cost factors 107
etc...
View1は特定のコンテンツタイプを検索し、サブカテゴリフィールドの値でソートされたさまざまなサブカテゴリの記事を含みます。さらに、関連するファクトのノード参照フィールドが含まれています。コンテンツタイプとサブカテゴリの1つのフィルターを表示します。表示するための公開フィールドと、関連するファクト参照ノードを持つ非表示フィールドがあります。
View2は「関連する事実」の記事をフィルタリングし、nidのコンテキストフィルターセットを含みます(ただし、設定はURLに適用されます)
Letharionの回答のコードを使用して、6行目のforeachループは、関連するファクトIDではなく、記事IDのリストをコンパイルしています(記事は関連するファクトへの参照を保持していますが、関連するファクトには記事へのノード参照がありません) 。各ノードのファクトフィールドから関連するファクトIDを抽出する必要があります。ビュー1の定義にファクトフィールドを含めましたが、コマンドdpm($ node);なので結果を見つけることができません。クラッシュしていて、値が配列のどこに格納されているのかわかりません。
異なるコンテンツタイプに対して複数のView1のクローンが作成されるため、hook_views_post_executeを使用することは理にかなっていると考え、次のようにコーディングしました。
function mymodule_views_post_execute (&$sourceview) {
$nids = '';
foreach($sourceview->result as $node) {
$nids += $node->nid . ','; //I need field name for $node->facts
}
$nids = rtrim($nids, ',');
$view = views_get_view('get_related');
//dpm($nids); // Fatal error: Cannot unset string offsets...
$view->execute_display('panel_pane_1', array($nids));
}
最後に、ビューの表示を適切な場所に向ける必要があるのか、それとも、パネルのUIを介してパネルの場所に関連するファクトコンテンツペインを配置し、パネルのテーマに残りの部分を処理させるだけでよいのかわかりません。