ネットとSEをしばらくブラウズした後、2 contextual filters
をOR と結合する(デフォルトのANDではなく)良い解決策はありません。
この投稿にはPHPハックが記載されており、この投稿には、ビュー7.x-3.1の最近の変更を示す問題へのリンクが含まれています。また、ビューの変更に使用することについても言及しています。hook_views_query_alter(&$view, &$query)
誰かが実用的な例やより良い解決策を持っていますか?
ネットとSEをしばらくブラウズした後、2 contextual filters
をOR と結合する(デフォルトのANDではなく)良い解決策はありません。
この投稿にはPHPハックが記載されており、この投稿には、ビュー7.x-3.1の最近の変更を示す問題へのリンクが含まれています。また、ビューの変更に使用することについても言及しています。hook_views_query_alter(&$view, &$query)
誰かが実用的な例やより良い解決策を持っていますか?
回答:
この問題のパッチを試してください:引数からフィルター値を取得します
コンテキストフィルターから「通常のフィルター」に値を渡すことができます。そこで高度な条件を設定できます。
ここから始まるコメントスレッドは、効果的な回避策を説明しています。MotoTribeは同じスレッドにリンクしていましたが、彼の質問の時点では、そのページには実用的な例はありませんでした。次のようになりました。
モジュールに以下を実装しますhook_views_api()
。
function MODULENAME_views_api() {
return array(
'api' => 3,
);
}
次に、MODULENAME.views.incというモジュールに新しいファイルを追加し、実装しますhook_views_query_alter()
。
function MODULENAME_views_query_alter(&$view, &$query) {
if ($view->name == 'whatever_your_view_is_called') {
$query->where[0]['type'] = 'OR';
}
}
この警告にも注意してください。
どうやら、すべてのビューに付属する「コンテンツ:公開(はい)」フィルターは、コンテキストフィルター(グループ0)と同じフィルターグループの一部と見なされます。したがって、コンテキストフィルター(published AND(arg1 OR arg2 OR ...))で指定されたグループのいずれかに属する発行済みノードのみをビューに表示するには、「Content:Published(Yes)」を新しいフィルターグループ([および/または、再配置]ダイアログを使用)。UIが新しいグループに移動した後(他のグループはありませんでした)、「コンテンツ:公開(はい)」フィルターを表示しませんでしたが、それに渡されるクエリオブジェクトhook_views_query_alter()
では移動しましたグループ0からグループ1に変更すると、上記の関数のコードは影響しなくなります。
ビューのハンドラーを変更して、ANDではなくORで使用されるコンテキストフィルターを作成するモジュールがあります 。Views Contextual Filters OR
コンテキストフィルターとフィルターグループの状況は実に暗いです。これは、このToppicについてのDoのスレッドです。
https://drupal.org/node/1451218
また、競合するコンテキストフィルターと公開フィルターの解決に役立つモジュールもあります... ビューフィルターハーモナイザー