Bagaimana cara menambahkan kelas ke tag BODY secara dinamis berdasarkan jalur halaman / kedalaman?

22

Bagaimana cara menambahkan kelas ke tag tubuh secara dinamis seperti contoh di bawah ini?

-Home
-Cities      
--Melbourne       <body class="melbourne">
--- Taman Hiburan       <body class="melbourne theme_parks">
--- Restoran       <body class="melbourne restaurants">
-new York       <body class="new_york">
--- Taman Hiburan       <body class="new_york theme_parks">
--- Restoran       <body class="new_york restaurants">
-Kontak Kami       <body class="contact_us">

Drupal newbie di sini dan tanpa latar belakang pemrograman. Karena itu, saya sangat menghargai jika Anda dapat sedetail mungkin ketika berbagi solusi.

kyooriouskoala
sumber

Jawaban:

37

Untuk menguraikan jawaban Nikhil Mohan, Anda dapat menerapkan template_preprocess_html()di dalam file template.php tema Anda. Baca dokumentasi tentang Overriding Themable Output untuk memahami dasar-dasar apa yang terjadi di sini.

Dalam fungsi ini, Anda memiliki akses ke variabel $vars['classes_array'], yang berisi daftar kelas yang akan diterapkan pada <body>tag HTML pada halaman.

Sayangnya, informasi tentang lokasi halaman saat ini di menu tidak segera tersedia. Anda dapat menggunakan menu_get_item()dan kemudian menu_get_ancestors()untuk mendapatkan informasi ini, tetapi itu adalah banyak kekuatan pemrosesan untuk sesuatu yang mungkin bisa kita dapatkan dengan pendekatan yang lebih sederhana.

Dengan asumsi Anda menggunakan modul pathauto untuk secara otomatis membuat jalur semantik untuk halaman konten Anda berdasarkan jalur menu (yaitu, halaman Melbourne Theme Parks Anda akan memiliki jalur 'melbourne / theme_parks'), Anda dapat menggunakan jalur halaman untuk membuat kelas yang Anda inginkan. mencari:

function THEMENAME_preprocess_html(&$vars) {
  $path = drupal_get_path_alias();
  $aliases = explode('/', $path);

  foreach($aliases as $alias) {
    $vars['classes_array'][] = drupal_clean_css_identifier($alias);
  } 
}

Itu dia. Drupal sekarang akan melihat alias path dari halaman saat ini dan menambahkan kelas ke <body>tag untuk setiap potongan alias path.

sheena_d
sumber
1
Jika jalur tidak berfungsi, maka parsing menu_get_active_breadcrumb juga menjadi pilihan. Kemungkinan ada di staticcache pada saat itu, jadi hampir tidak ada overhead.
mpdonadio
3
Terima kasih semua, terutama @sheena_d untuk penjelasannya beserta kodenya! Harus melakukan sedikit pencarian tentang cara membuatnya berfungsi pada Omega Theme dan berhasil membuatnya bekerja: D Ini adalah baris untuk membuatnya berfungsi pada Omega Theme: $vars['attributes_array']['class'][] = drupal_clean_css_identifier($alias);
kyooriouskoala
1

Anda dapat menggunakan template_preprocess_html, variabel Preprocess mana untuk html.tpl.php

Lihat juga html.tpl.php

Implementasi tema default untuk menampilkan struktur html dasar dari satu halaman Drupal

niksmac
sumber
1

Berikut adalah modul untuk menambahkan kelas pada tag tubuh berdasarkan peran atau halaman.

Kelas Tubuh Umum

Thakur Sanjay Singh Chauhan
sumber
0

Membuat modul Drupal Kelas Tubuh untuk membantu ini. Jangan ragu untuk membuat masalah untuk menambahkan lebih banyak poin integrasi kelas tubuh.

RobLoach
sumber