Cara bersih membangun browser taksonomi sederhana dengan kedalaman sewenang-wenang

23

Saya telah menghabiskan berhari-hari mencoba menentukan cara bersih untuk melakukan hal berikut:

  1. Tampilkan daftar semua istilah tingkat atas dalam kosakata dengan tautan ke istilah anak mereka
  2. Setelah mengklik link, akan dibawa ke daftar anak-anak mereka hal.
  3. Ad infinitum hingga istilah level terendah, yang daftar node yang ditandai dengan istilah itu akan ditampilkan.

Sepertinya ini akan menjadi fungsionalitas yang cukup umum tetapi saya tidak dapat menemukan solusi yang dapat menangani kedalaman sembarang, terutama jika tidak semua pohon istilah turun ke kedalaman yang sama.

Solusi ideal adalah solusi yang menggunakan Tampilan 3, Konteks, EntityFieldQueries, atau apa pun yang didukung dengan baik di Drupal 7.

Saya dapat melakukan hampir persis apa yang saya inginkan dengan membuat tampilan sederhana dengan tiga simpul: hubungan istilah (istilah, orangtua term, dan orangtua orangtua term) dan pengguna yang untuk filter kontekstual berurutan. Satu-satunya masalah dengan ini adalah bahwa jika ada node dengan termpath kedalaman terlalu sedikit, itu akan terdaftar sebagai "tidak dikategorikan" dan menghasilkan tautan mati. Alih-alih melakukan itu saya ingin menautkan ke istilah anak berikutnya yang tersedia.

beth
sumber

Jawaban:

23

Saya menemukan cara untuk melakukan ini hanya dengan modul Views. Itu tidak sempurna - itu tidak menghasilkan URL yang bagus dan remah roti dengan garis keturunan taksonomi cara solusi saya untuk taksonomi dari kedalaman tunggal akan dilakukan.

Browser Kedalaman Statis

Untuk taksonomi kedalaman statis (di mana semua istilah memiliki kedalaman istilah anak yang sama), Anda akan melakukan hal berikut:

  1. Buat tampilan node
  2. Tambahkan hubungan ke istilah taksonomi (Term)
  3. Tambahkan hubungan ke orang tua istilah taksonomi, dapat diakses melalui Term (Induk)
  4. Tambahkan hubungan ke orang tua istilah taksonomi, dapat diakses melalui Induk (Induk Induk)
  5. Ulangi langkah 4 sebanyak yang diperlukan untuk kedalaman taksonomi Anda.
  6. Tambahkan filter kontekstual untuk masing-masing filter dan pastikan mereka berada dalam urutan yang tepat. Setel untuk menampilkan ringkasan saat filter tidak ada di URL.
  7. Anda mungkin ingin mengganti remah roti dan judul untuk setiap filter.
  8. ???
  9. KEUNTUNGAN

Browser Kedalaman Variabel

Untuk taksonomi kedalaman variabel (di mana beberapa pohon istilah memiliki tingkat bersarang lebih dalam daripada yang lain), itu sedikit lebih kompleks:

  1. Tambahkan istilah tingkat atas baru (Foo) ke kosakata Anda dan letakkan semua istilah lainnya di bawahnya.
  2. Buat tampilan istilah dengan halaman yang menampilkan nama istilah
  3. Tambahkan filter kontekstual: Istilah taksonomi: Istilah induk
  4. Ketika nilai default tidak ada di URL, berikan nilai default
  5. Tetapkan nilai default ke nama istilah tingkat atas Anda (Foo)
  6. Tentukan kriteria validasi
    • Validator: istilah taksonomi
    • Kriteria: nama kosakata Anda
    • Jenis nilai filter: Nama istilah dikonversi ke ID istilah
  7. Klik tombol "+ Tambah" di bagian atas panel Tampilan untuk menambahkan Lampiran ke tampilan.
  8. Tambahkan ke lampiran ini saja (ganti) Hubungan: Istilah taksonomi: Konten dengan istilah
  9. Tambahkan ke tampilan hanya lampiran ini (ganti): bidang: judul node yang terhubung ke node, dan hapus (dari lampiran ini saja!) Tampilan: bidang: nama istilah
  10. Tambahkan ke lampiran ini saja (ganti) filter kontekstual: Istilah taksonomi: Nama
  11. Ketika nilai filter tidak tersedia, berikan nilai default: Nilai mentah dari URL: Komponen jalur: 2 (atau lebih jika jalur Halaman Anda memiliki> 1 komponen)
  12. Pengaturan lampiran: Lampirkan ke: [nama tampilan halaman yang baru saja Anda buat]
  13. ???
  14. KEUNTUNGAN

Tangkapan layar UI Tampilan untuk referensi: masukkan deskripsi gambar di sini

beth
sumber
Bagus sekali! Mengunggah pertanyaan dan jawaban Anda - sepertinya hal yang cukup umum untuk dilakukan dan solusi Anda lebih baik daripada apa pun yang saya temukan saat awalnya mencoba menjawab.
aendrew
8
  1. Buat tampilan jenis Taksonomi
  2. Tambahkan filter kontekstual dari jenis istilah Taksonomi: Istilah induk
  3. Tetapkan Berikan nilai default dan simpan sebagai tetap. berikan ID Istilah dari istilah Induk atas
  4. Menambahkan ID istilah Taksonomi sebagai bidang dan Kecualikan dari tampilan
  5. Tambahkan Nama Istilah Taksonomi klik pada taruh bidang ini sebagai tautan; berikan tautan sebagai "path-you-set-in-view / [tid]"
    Catatan: Anda harus menghapus centang "Tautkan bidang ini ke halaman istilah taksonomi"

Ketika Anda mengunjungi halaman tampilan Anda akan melihat anak-anak dari orang tua teratas; sesuai contoh yang akan Anda dapatkan:

  • term1
  • term2

Ketika Anda mengklik term1 Anda akan mendapatkan anak-anak. Sampai Anda mencapai term1.1.1. Anda tidak akan mendapatkan hasil apa pun jika Anda mengklik term1.1.1. Untuk mencapai itu, kita perlu membuat satu lagi blok tampilan dalam tampilan di atas.

  1. Tambahkan Blok
  2. Hapus filter dan bidang kontekstual yang ada
    Catatan: Ketika Anda menghapusnya pastikan Anda memilih Halaman Ini (Lebih Naik) dari drop-down di bagian atas sebelah. Untuk bijak lain bidang dan filter kontekstual yang Anda buat di halaman juga akan hilang .
  3. Tambahkan filter kontekstual baru Istilah taksonomi: Term ID
  4. Tambahkan hubungan Istilah taksonomi: Konten dengan term
  5. Tambahkan Judul Konten dan Anda menggunakan hubungan dari drop down di bagian atas.
  6. Simpan tampilan dan kembali ke Halaman yang kita buat (Ini penting karena Anda tidak akan bisa menyelesaikan langkah selanjutnya
  7. Tambahkan bidang dalam FOOTER ATAU HEADER
  8. Pilih "Global: Area tampilan" dari daftar dan pilih blok yang kami buat dari drop down View untuk dimasukkan saat Anda berada di sana memeriksa filter kontekstual bawaan sehingga kami dapat meneruskan nilai dari tampilan ini ke blok juga.
  9. Periksa Tampilan meskipun jika tampilan tidak memiliki hasil sehingga ketika tampilan ini tidak menunjukkan hasil, blok masih akan ditampilkan

Simpan tampilan, dan Anda selesai.

Mohammed Shameem
sumber
Saya mengikuti penjelasan yang jelas tentang Mohammed Shameem. Terima kasih, bekerja dengan sempurna !!
Steven
3

Saya pikir yang Anda inginkan adalah Views Tree , modul contrib yang menggunakan Views untuk membangun pohon istilah taksonomi.

(Beri saya waktu sebentar dan saya akan menulis cara cepat untuk menggunakannya melihat bidang pajak)

Tampaknya modul itu memiliki masalah yang mencegahnya bekerja dengan ketentuan taksonomi. Boo.

Yang mengatakan, saya menemukan kode berikut yang tampaknya melakukan apa yang Anda inginkan (Anda dapat membuatnya menampilkan / menyembunyikan elemen melalui beberapa kode jQuery yang sangat sederhana):

<?php

// The ID of the taxonomy vocabulary for which you'd like to create a nested list
$vid = 10;

$depth = 0;
$num_at_depth = 0;
$tree = taxonomy_get_tree($vid);

print "<ul class=\"menu\">\n<li>";
foreach ($tree as $term) {
  $diffdepth = 0;
  if ($term->depth > $depth) {
    print "\n<ul>\n<li>";
    $depth = $term->depth;
    $num_at_depth = 0;
  }
  if ($term->depth < $depth) {
    $diffdepth = $depth - $term->depth;
    while ($diffdepth > 0) {
      print "</li>\n</ul>\n";
      $diffdepth--;
    }
    $depth = $term->depth;
  }
  if (($term->depth == $depth) && ($num_at_depth > 0)) {
    print "</li>\n<li>";
  }
  print l($term->name, 'taxonomy/term/' . $term->tid);
  $num_at_depth++;
}
print "</li>\n</ul>\n";

Via " Daftar kategori bersarang dengan tautan ke halaman ".

aendrew
sumber
Saya telah mengaktifkan modul itu dan mencoba bereksperimen dengannya dan saya memiliki dua masalah: 1. Saya menduga itu hanya memberi Anda daftar datar, bukan pengalaman penjelajahan multi-halaman dan 2. Saya tidak bisa membuatnya berfungsi. Cara-cara akan sangat membantu.
beth
Jawaban yang diperbarui. Permintaan maaf, ternyata Views Tree memiliki masalah terbuka: menggunakan istilah taksonomi. Jawaban alternatif diposting.
aendrew
Itu muncul untuk memberikan daftar bersarang sederhana daripada browser berurutan berurutan.
beth
@ Beth - Apakah cukup jika saya menulis beberapa jQuery yang memperlihatkan / menyembunyikan elemen daftar itu ketika item induk / anak diklik?
aendrew
Saya tidak ingin ini tergantung pada JavaScript.
beth
0

Jika Anda hanya ingin memiliki satu set halaman penelusuran taksonomi yang dinamis, maka saya akan pergi dengan cara berikut, membutuhkan 3 Tampilan + modul Tampilan Taksonomi yang memungkinkan Anda menggunakan Tampilan untuk menampilkan konten taxonomy/term/%halaman:

  1. Istilah Tingkat Atas - daftar istilah yang orang tuanya nol
  2. Mid Level Terms - daftar istilah yang orang tuanya TIDAK nol. Tidak ada hasil: tampilan Lihat # 3
  3. Node with Terms - daftar node yang ditandai dengan istilah.

Karena Tampilan 1 dan 2 mungkin akan bertema dengan cara yang serupa, Anda dapat mempertimbangkan menggabungkannya sebagai tampilan menjadi satu Tampilan - ini akan dapat dikelola dengan lebih mudah.

Saya telah berhasil menggunakan pendekatan itu untuk taksonomi saya. Untungnya itu homogen pada setiap tingkat - cabang yang diberikan berakhir dengan daun (simpul) atau cabang (istilah), tetapi tidak keduanya. Jika ini akan menjadi batasan, silakan uji dulu.

Tentu saja ini adalah "pseudo-code". Anda ingin menyiapkan validasi dan filter, dan pola pathauto yang bagus dan tampak logis untuk mencerminkan struktur.

Artur
sumber