Bagaimana saya bisa menyuntikkan menu taksonomi sebagai sub-menu dari item menu standar?

12

Saya memiliki menu utama, dengan struktur tingkat atas mirip dengan yang berikut:

Home - Categories - Something Else - ... - Contact

Setiap tautan tingkat atas tersebut menuju ke halaman simpul yang sesuai.

Saya memiliki kosakata untuk Kategori (multi-level), dan saya perlu memasukkan istilah taksonomi tersebut dalam sub-menu di bawah item "Kategori". Saya ingin menghindari pengodean item ke menu utama, karena sub-menu akan bertambah / menyusut seperti kosa kata.

Di masa lalu saya telah menulis kode yang terlalu rumit untuk mencapai hal ini, yang menghubungkan ke operasi taksonomi dan mengelola sub-item menu tertentu berdasarkan itu (sangat mirip dengan apa yang dilakukan oleh taksonomi Menu , tetapi tanpa harus memiliki menu yang berbeda untuk masing-masing kosa kata).

Sementara metode itu bekerja, itu tidak ideal dan tentu saja tidak generik. Saya tidak bisa begitu saja mengangkat kode itu dari proyek lama ke yang baru, itu akan membutuhkan sejumlah penyesuaian.

Saya tidak dapat menahan perasaan bahwa harus ada solusi 'standar' berbasis modul untuk ini.

Saya telah melihat beberapa saran di luar sana untuk menggunakan banyak modul berbeda dalam kombinasi (bahkan beberapa menyarankan untuk menggunakan modul berbasis Views, anehnya). Saya terbuka untuk saran apa pun, tetapi jika itu melibatkan pemasangan lebih dari 1 atau 2 modul, dan banyak konfigurasi yang sulit dikodekan, konteks spesifik, itu mungkin tidak akan banyak membantu dalam kasus ini.

Clive
sumber
1
Saya pikir saya sudah melihatnya ... Topik serupa berisi ide tentang menggunakan aturan untuk membuat item berbasis taksonomi dalam menu, tetapi tampaknya juga jauh dari ideal.
Mołot
Jika saya mengerti dengan benar, apakah Anda terlihat mirip dengan modul ini drupal.org/project/taxonomy_treemenu , ia dapat berintegrasi dengan menu yang bagus tetapi untuk D6
Bala
Apakah Anda harus memiliki item menu aktual atau apakah layak untuk menambahkan pohon istilah taksonomi ke dalam menu ketika itu diberikan?
rooby
Terima kasih @Bala, butuh solusi D7
Clive
1
Clive Saya punya satu saran. Seperti yang saya tahu Anda dapat menghasilkan menu taksonomi dengan menyertakan nama kosa kata dan kemudian hanya menambahkan tautan menu lain langsung ke dalam menu yang dihasilkan. Item taksonomi mungkin diperbarui secara otomatis ... Saya tidak tahu apakah itu akan berfungsi, coba saja.
milkovsky

Jawaban:

13

Opsi a) Kecuali saya salah, tidak bisakah Anda memilih di mana Menu Taksonomi Anda akan diasuh (Lokasi Menu) saat Anda membuatnya? Satu-satunya masalah yang saya pikir mungkin Anda dapatkan dengan ini adalah saya pikir itu mengharuskan Anda untuk membangun kembali menu setiap kali taksonomi diperbarui

Opsi b) Saya telah melakukan sesuatu yang mirip dengan ini di situs saya, saya menggunakan modul Menu Views , untuk memungkinkan saya menempatkan pandangan ke menu utama saya.

Jika Anda membuat tampilan baru yang mencantumkan semua istilah taksonomi Anda, sebagai tampilan blok, terapkan penyaringan / modifikasi tambahan apa pun dalam tampilan jika perlu (Anda tidak dapat melakukannya kecuali dalam contoh saya yang saya inginkan). Kemudian ketika Anda menambahkan tautan baru ke menu utama Anda, Anda dapat memilih untuk menggunakan tampilan daripada tautan. Dari sana Anda memilih tampilan mana yang ingin Anda gunakan, pilih item menu 'Kategori' sebagai induknya dan simpan (setelah menyimpan Anda harus mengaktifkannya di menu, yang tampaknya merupakan bug dengan modul itu sendiri)

Saya tidak dapat menjamin bahwa ini adalah solusi terbaik untuk Anda, tetapi itu berhasil ketika saya baru saja mengujinya

Andrew Morris
sumber
1
Ya, ternyata saya agak bodoh - Taxonomy Menu memiliki fungsi persis ini terpasang (opsi Anda a). Menu khusus yang saya tangani cukup kecil, dan kategorinya tidak akan sering berubah, jadi membangun kembali bukan masalah. Terima kasih banyak untuk pemeriksaan kesehatannya
Clive
3

Menupoly memiliki API untuk "sumber pohon menu" khusus. Saya tidak pernah benar-benar memanfaatkan ini untuk sesuatu selain tautan menu, jadi mungkin ada masalah yang harus kami perbaiki di jalan. Tetapi arsitektur dasarnya ada di sana.

Jika Anda pergi dengan rute ini, Anda akan melakukannya

  • Gunakan menu utama Anda yang ada, tanpa tautan istilah taksonomi di luar halaman "Kategori".
  • Buat pohon taksonomi Anda terlepas dari itu.
  • Tulis "sumber pohon menu" kustom yang mengambil dari menu_links seperti biasa, tetapi ketika menemukan istilah taksonomi, alih-alih mengambil dari taksonomi.
    Jadi, entah bagaimana Anda harus dapat mendeteksi bahwa tautan "Kategori" berhubungan dengan taksonomi.
  • Jika tautan menu terkait dengan taksonomi dan pada saat yang sama memiliki submenu biasa, Anda perlu menggabungkan kedua jenis anak tersebut menjadi satu.

Rute ini mungkin merupakan pekerjaan, tetapi mungkin bermanfaat untuk orang lain, dan mungkin lebih elegan dan dapat digunakan kembali daripada logika spesifik situs Anda.

Saat ini bahkan tidak ada "sumber pohon menu" taksonomi saja, jadi mungkin itu akan menjadi langkah pertama yang wajar sebelum memulai dengan plugin campuran.

donquixote
sumber
karena ini dikatakan, jawaban yang diterima oleh Andrew Morris mungkin cukup baik. Dan itu berarti kurang bekerja untuk saya :) Masih ingin memposting ini untuk siapa saja yang mungkin merasa berguna.
donquixote
V. menarik, terima kasih. Jawaban yang diterima adalah melakukan pekerjaan dengan baik tetapi saya sangat tertarik untuk mendapatkan solusi kode juga. Dapatkah saya berasumsi jika itu adalah salah satu modul Anda yang semuanya dibangun di atas kebaikan PSR-0? :)
Clive
Yang ini menggunakan mode kompatibilitas PHP 5.2 xautoload, yang agak mirip PEAR tetapi dengan direktori dangkal. Jadi, PSR tidak disetujui. Saya mungkin pergi PSR-0 suatu hari ..
donquixote
walaupun saya sangat tertarik pada PSR-X (yang mungkin tidak akan pernah masuk ke D8, sayangnya)
donquixote
2

Metro Menu akan memenuhi kebutuhan Anda dan bahkan memiliki kulit bawaan dan dapat membuat sendiri yang bertindak sama seperti menu yang bagus. Dengan modul ini Anda dapat memilih sub-item dengan kedalaman dari menu atau taksonomi dan saya tidak menggunakan ini sebelumnya.

Kompatibilitas dengan layar sentuh (iPad, iPhone, dll.).

masukkan deskripsi gambar di sini

Bala
sumber
2

Anda dapat menggunakan modul menu Om Maxi untuk hal yang sama. Ini akan memungkinkan admin untuk membuat menu dengan blok yang Anda inginkan sebagai lampiran, modul seperti tampilan, tampilan slide, menu, pengguna, menu yang bagus, quicktab, dan blok khusus dengan tabel, daftar, gambar, video, dll.

Anda dapat membuat menu terpisah menggunakan Menu Taksonomi dan dapat melampirkan menu ini sebagai sublink ke menu yang dihasilkan oleh menu om maxi.

Terima kasih

Jayendra Kainthola
sumber
2

Baru-baru ini saya melakukan sesuatu yang serupa untuk menu kategori produk. Ini hanya untuk 1 level, tetapi dapat dengan mudah dimodifikasi untuk menunjukkan level lebih lanjut.

/**
 * Implements theme_menu_link().
 */
function THEME_menu_link__main_menu($variables) {

  $sub_menu = '';
  $element = $variables['element'];
  $menu_string = $element['#title'];

  if (module_load_include('inc','pathauto','pathauto') !== FALSE) {
    $menu_string =  pathauto_cleanstring($menu_string);
  }

  if ($menu_string == 'categories') {
    $sub_menu = get_categories_menu();
  }

  if ($sub_menu) {
    $element['#attributes']['class'][] = 'haschildren';
  }

  $output = l($element['#title'], $element['#href'], $element['#localized_options']);
  return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
}

function get_categories_menu() {

  $current_category = arg(2); // Get current category from path
  $volcab = taxonomy_vocabulary_machine_name_load('product-categories');
  $tree = taxonomy_get_tree($volcab->vid,0,1);

  $output = '<ul class="menu product-category">';
  foreach ($tree as $term) {
    $safe_term = pathauto_cleanstring($term->name);
    $class = ($current_category==$safe_term) ? ' class="active"' : '';
    $output .= '<li><a' . $class . ' href="/drupal//path/to/' . $safe_term . '">' . $term->name . '</a></li>';
  }
  $output .= '</ul>';

  return $output;
}

Fungsi get_category_menu lebih baik sebagai blok, tetapi ditampilkan di sini sebagai fungsi lain di template.php untuk kenyamanan.

Semoga ini bisa membantu atau setidaknya merupakan langkah menuju solusi.

Paul

paul.linney
sumber