ビューのコンテキストフィルターの使用方法OR


18

ネットとSEをしばらくブラウズした後、2 contextual filtersをOR と結合する(デフォルトのANDではなく)良い解決策はありません。

この投稿にはPHPハックが記載されており、この投稿には、ビュー7.x-3.1の最近の変更を示す問題へのリンクが含まれています。また、ビューの変更に使用することについても言及しています。hook_views_query_alter(&$view, &$query)

誰かが実用的な例やより良い解決策を持っていますか?


今のところ、より良い解決策はないと思います。あなたが指摘したスレッドで述べたように、それは明らかに進行中の問題です。私は今週同じ問題に出くわし、添付ファイルの回避策を見つけなければなりませんでした。しかし、その後、それは混合リストではなく、2つの接続されたリストを提供し、すべてのニーズに適合しません。
カウントゼロ

回答:



7

ここから始まるコメントスレッドは、効果的な回避策を説明しています。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に変更すると、上記の関数のコードは影響しなくなります。


1
少なくともOPの質問への参照の関連性を言い換える方が良いです。リンクが持続しない場合があるため、リンクのみの回答は推奨されません。
トリスケリオン

@Triskelion:ああ、あなたは絶対に正しい。それを修正するために応答を編集しました。
coredumperror

4

ビューのハンドラーを変更して、ANDではなくORで使用されるコンテキストフィルターを作成するモジュールがあります 。Views Contextual Filters OR


私は、「現在のユーザー」+「フラグ付きのユーザー(現在のユーザーは以下のフラグを使用してフラグを立てている[ユーザー])からコンテンツ」からコンテンツを持つビューを作成したい
Umair

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.