Bagaimana cara menggunakan filter kontekstual view OR?

18

Setelah menjelajah internet dan SE untuk sementara waktu bagi saya tampaknya tidak ada solusi yang baik untuk menggabungkan 2 contextual filtersdengan OR (daripada AND standar).

Posting ini menyebutkan hack PHP dan posting ini memiliki beberapa tautan ke masalah yang menyatakan perubahan baru-baru ini dalam tampilan 7.x-3.1 . Itu juga disebutkan menggunakan hook_views_query_alter(&$view, &$query)untuk mengubah tampilan.

Adakah yang punya contoh kerja atau solusi yang lebih baik?

kamu
sumber
Saya tidak berpikir ada solusi yang lebih baik untuk saat ini. Seperti yang dikatakan di utas yang Anda tunjuk, tampaknya ini adalah masalah yang berkelanjutan. Saya menemukan masalah yang sama minggu ini, dan harus menemukan solusi untuk keterikatan. Tapi kemudian, itu tidak memberikan daftar campuran tetapi dua yang terhubung, yang tidak sesuai dengan semua kebutuhan.
Countzero

Jawaban:

7

Coba tambalan dalam masalah ini: Tarik nilai filter dari argumen

Ini memungkinkan Anda meneruskan nilai dari filter kontekstual ke "filter normal". Di sana Anda dapat melakukan kondisi lanjutan Anda.

mojzis
sumber
7

Utas komentar yang dimulai di sini menjelaskan solusi yang efektif. MotoTribe terhubung ke utas yang sama, tetapi pada saat pertanyaannya, tidak ada contoh yang berfungsi di halaman itu. Sekarang ada, sebagai berikut:

Dalam modul Anda, terapkan hook_views_api():

function MODULENAME_views_api() {
  return array(
    'api' => 3,
  );
}

Kemudian tambahkan file baru ke modul Anda bernama MODULENAME.views.inc, dan terapkan hook_views_query_alter():

function MODULENAME_views_query_alter(&$view, &$query) {
  if ($view->name == 'whatever_your_view_is_called') {
    $query->where[0]['type'] = 'OR';
  }
}

Perhatikan juga peringatan ini:

Rupanya, filter "Konten: Diterbitkan (Ya)" yang menyertai setiap Tampilan dianggap sebagai bagian dari grup filter yang sama dengan filter kontekstual (grup 0). Jadi untuk membuat tampilan tampilan saya hanya node yang diterbitkan yang termasuk dalam salah satu grup yang ditentukan oleh filter kontekstual (diterbitkan DAN (arg1 ATAU arg2 ATAU ...)), saya harus memindahkan "Konten: Diterbitkan (Ya)" ke grup filter baru (menggunakan dialog "Dan / Atau, Atur Ulang"). Perhatikan bahwa UI tidak menampilkan filter "Konten: Diterbitkan (Ya)" secara berbeda setelah saya memindahkannya ke grup baru (tidak ada grup lain), tetapi dalam objek kueri yang dilewatkan ke hook_views_query_alter()dalamnya, ia bergerak itu dari grup 0 ke grup 1, menyebabkan kode dalam fungsi di atas tidak lagi mempengaruhinya.

coredumperror
sumber
1
Lebih baik setidaknya memparafrasekan relevansi referensi dengan pertanyaan OP. Jawaban hanya tautan tidak disarankan karena tautan mungkin tidak ada.
Triskelion
@ Trikkelion: Ah, Anda memang benar. Saya telah mengedit respons saya untuk memperbaikinya.
coredumperror
4

Ada modul yang mengubah penangan Tampilan untuk membuat filter kontekstual untuk digunakan dengan ATAU alih-alih DAN: Tampilan Filter Kontekstual ATAU

Sinan Erdem
sumber
Saya ingin membuat tampilan dengan konten dari "pengguna saat ini" + "Konten dari pengguna yang ditandai (pengguna saat ini telah ditandai menggunakan bendera ikuti [pengguna])"
Umair
2

Situasi dengan Filter Kontekstual dan Grup Filter memang suram. Berikut adalah utas tentang Do about toppic ini, yang memiliki solusi yang sama seperti yang dinyatakan oleh @CoreDumpError.

https://drupal.org/node/1451218

Juga, berikut adalah modul yang dapat membantu menyelesaikan filter kontekstual dan terbuka yang saling bertentangan ... Tampilan Filter Harmonizer

doublejosh
sumber