Bagaimana cara kerja filter kontekstual Views?

9

Saya mencoba membungkus kepala saya di sekitar filter kontekstual lagi! Saya menggunakannya beberapa waktu lalu tapi saya benar-benar bingung lagi. Inilah yang saya coba lakukan:

  1. Hasilkan halaman simpul konten yang dikloning dengan istilah taksonomi dimasukkan ke halaman yang dikloning ini.

mis .: EXAMPLE.com/shite-shoes/blue

Ketika pengguna mencapai halaman / sepatu putih itu akan menunjukkan halaman simpul asli diarahkan ke warna putih. Sekarang jika pengguna mendarat di / white-shoes / blue itu akan menampilkan halaman simpul yang sama, tetapi kali ini semua konten tubuh akan ditulis ulang menggantikan warna putih dengan warna biru.

Dalam Tampilan, saya harus membuat tampilan Halaman dengan jalur:% /%

Sekarang saya akan membuat filter kontekstual untuk mengambil nid. Saya menambahkan Konten: nid sebagai filter kontekstual. Saya memilih MEMBERIKAN NILAI DEFAULT dan saya memasukkan kode PHP ini:

$ x = drupal_lookup_path ('source', arg (0));

$ y = meledak ('/', $ x);

mengembalikan $ y 1 ;

Kode PHP itu pada dasarnya mengubah bagian / white-shoes dari URL menjadi NID. Tapi itu tidak berhasil. Saya menguji kode melalui drush ev melalui terminal dan saya memang mendapatkan hasil yang dikembalikan, jadi saya tahu itu berfungsi.

Saya melakukan hal yang sama untuk nama istilah taksonomi dan menambahkan filter kontekstual untuk itu juga. Kali ini saya memilih MEMBERIKAN NILAI DEFAULT dan memilih RAW VALUE DARI URL dan memilih argumen ke-2.

masukkan deskripsi gambar di sini

Seperti yang Anda lihat ketika saya memasukkan PREVIEW VALUE untuk filter kontekstual: AAA / BBB / CCC. Nilai default saya diabaikan. Seharusnya meraih argumen ke-2, tetapi hanya mendapatkan argumen ke-1. Lihatlah pernyataan SQL WHERE dan Anda akan melihatnya mendapatkan AAA padahal seharusnya BBB.

masukkan deskripsi gambar di sini

Jadi pertanyaannya adalah apa yang saya lakukan salah atau ada solusi yang lebih baik untuk apa yang ingin saya capai?

Patoshi パ ト シ
sumber
Ini terdengar bodoh, tetapi bisakah Anda memberikan sedikit detail? Saya memiliki sedikit waktu untuk memahami apa yang Anda coba, lebih pada bagaimana Anda mencoba melakukannya. Alih-alih menggunakan nilai Mentah atau Berikan bawaan, gunakan ID Konten dari URL. Itu akan memberikan NID.
kyletaylored
hi kyle, tidak ada ID Konten sejak pendaratan Anda di url: / white-shoes / blue .... the / blue url tidak ada seperti yang diberikan oleh view. jadi tidak ada ID konten untuk diambil ... itu harus menguraikan argumen 1 url kemudian mengonversi url itu menjadi jalur NID.
Patoshi パ ト シ

Jawaban:

5

Filter Kontekstual digunakan untuk memfilter, menampilkan tampilan dengan argumen URL, Anda juga dapat mengirimkan argumen secara manual dalam format ini:

<?php print views_embed_view($name,$display_id,$arg1,$arg2,$arg3); ?>

di mana "$ name" adalah nama tampilan Anda (mis. 'example_view') dan '$ display_id' adalah tipe tampilan dari tampilan Anda (mis. 'default') dan "$ arg1, $ arg2, $ arg3" adalah argumen seperti di URL.

Argumen URL memiliki struktur berikut:

http://example.com/arg_1/arg_2/arg_3 (arg_2 memiliki komponen jalur 2 (di halaman pengaturan tampilan)).

Ketika nilai filter tidak tersedia:

itu artinya drupal tidak dapat menemukan filter apa pun.

Berikan nilai default:

ketika nilai filter tidak tersedia, Anda dapat menggunakan opsi ini untuk membuat filter untuk output tampilan, filter ini bisa berupa kode PHP (jika modul filter PHP diaktifkan) atau bisa mendapatkan nilainya dari argumen URL -> (Nilai mentah dari url). Kotak teks Pengecualian memungkinkan Anda untuk menipu nilai dan menampilkan semua hasil.

Ketika nilai filter tersedia

dalam hal ini Anda melakukan validasi sesuai kebutuhan dan beberapa opsi lain, ketika drupal dapat menemukan nilai filter.

Reza Shadman
sumber
diberikan fungsi views_embed_view (). bagaimana saya memuatnya ke dalam sub path / white-shoes / blue? perlu diingat bahwa / blue tidak ada karena dihasilkan oleh view. ketika seorang pengguna mencapai / blue path, ia harus mengurai argumen 1 dan mengambil NID alias itu lalu memuat kontennya. masalah dengan filter kontekstual adalah bahwa tidak ada cara untuk memberikan nilai PHP untuk KETIKA NILAI FILTER TERSEDIA.
Patoshi パ ト シ
@duckx, Ada opsi yang sangat baik untuk memberikan nilai PHP saat filter tersedia - VALIDATION (type: PHP Code). Dengan opsi ini Anda dapat menggunakan objek tampilan dan melakukan semua yang Anda butuhkan. Dalam /bluejalur kasus Anda yang dihasilkan oleh tampilan akan digunakan untuk mengambil id node alias itu juga.
Jack-PL