it-swarm-id.com

Bagaimana cara mengubah tema berdasarkan URL?

Saya memiliki turunan Drupal berjalan di example.org. Yang memiliki tema X diinstal dan diaktifkan. Sekarang untuk periode terbatas acara seharusnya diadakan di situs yang memiliki bagian khusus telah "diukir." Semua hal yang terkait dengan acara itu akan masuk ke example.org/event2011.

Saya ingin memiliki tema yang berbeda untuk ditampilkan setiap kali halaman di bawah bagian ini dilihat (misalnya http://example.org/event2011/about , http://example.org/event2011/node/12 ). Bagaimana aku melakukan itu?

Saya telah melalui banyak modul, tetapi tidak ada satupun yang mendukung Drupal 7. Lebih disukai, saya ingin itu dilakukan dengan menggunakan modul dan tidak ingin mengubah apa pun pada level kode saya sendiri .

38
Samyak Bhuta

Menimbang bahwa perubahan itu untuk jangka waktu terbatas, dan bahwa menerapkan kode tersebut tidak sulit, saya akan menyarankan untuk mengimplementasikan modul khusus yang mengubah tema yang digunakan untuk halaman tertentu.

Cukup untuk mengimplementasikan hook_custom_theme() sebagai berikut:

function mymodule_custom_theme() {
  if (arg(0) == 'event2011') {
    return 'the theme to use for that page';
  }
}

Jika Anda perlu mengubah tema hanya untuk http://example.com/event2011 , tetapi tidak untuk http://example.com/event2011/node/12 , maka kode harus diubah menjadi

function mymodule_custom_theme() {
  if (arg(0) == 'event2011' && !arg(1)) {
    return 'the theme to use for that page';
  }
}

Adapun untuk menggunakan tema panggilan balik dalam definisi menu panggilan balik, dokumentasi mengatakan:

Sebagai aturan umum, penggunaan fungsi panggilan balik tema harus dibatasi pada halaman yang fungsinya sangat terkait dengan tema tertentu, karena mereka hanya dapat ditimpa oleh modul yang secara khusus menargetkan halaman tersebut dalam hook_menu_alter(). Modul yang menerapkan fungsionalitas alih tema yang lebih umum (misalnya, modul yang memungkinkan tema disetel secara dinamis berdasarkan peran pengguna saat ini) harus menggunakan hook_custom_theme() sebagai gantinya.

33
kiamlaluno

Solusi khusus seperti komentar lain menyarankan mungkin yang terbaik, tetapi jika Anda benar-benar ingin menggunakan modul, taruhan terbaik Anda adalah ThemeKey . Pada 5/23/11, ia memiliki rilis yang stabil.

22
tim.plunkett

Atau Anda dapat menggunakan opsi theme callback Baru dari sistem menu hook_menu_alter() seperti diuraikan di bawah ini. p.s Checkout hook_menu () untuk detail lebih lanjut tentang theme callback

<?php
/**
* Implements hook_menu_alter().
*/
function mymodule_menu_alter(&$items) {
  // Set the theme callback function for all node pages. As per the
  // standard behavior for hook_menu() properties, this will be
  // inherited by all paths underneath node/%node as well, unless
  // they define their own theme callback.
  $items['node/%node']['theme callback'] = 'mymodule_default_node_theme';

  // Set a different theme callback for node edit pages, and pass
  // along the node object to this function so we can make decisions
  // based on it.
  $items['node/%node/edit']['theme callback'] = 'mymodule_edit_node_theme';
  $items['node/%node/edit']['theme arguments'] = array(1);
}
/**
* Defaults to using the 'some_theme' theme for node pages.
*/
function mymodule_default_node_theme() {
  return 'some_theme';
}

/**
* For editing page nodes, uses the 'some_other_theme' theme.
*/
function mymodule_edit_node_theme($node) {
  return $node->type == 'page' ? 'some_other_theme' : mymodule_default_node_theme();
}
?>

Selain itu ada juga contoh penggunaan hook_custom_theme() yang lebih tradisional

<?php 
/**
* Implements hook_custom_theme().
*/
function mymodule_custom_theme() {
  // check path using arg(0)
  // check $user
  // do whatever special checking you want and simply return theme key (name of theme folder most of the time)
    return 'special_theme';
  }
}
?>

Diambil dari: http://drupal.org/node/224333#custom_theme

8
electblake

Menggunakan ThemeKey sederhana dan merupakan modul yang paling populer dan kuat sejauh ini (dengan dukungan untuk 8.x) untuk pengalihan tema aturan yang memungkinkan pemilihan otomatis tema tergantung pada jalur saat ini, istilah taksonomi, bahasa, tipe-simpul, dan banyak, banyak properti lainnya. Itu juga dapat dengan mudah diperluas untuk mendukung properti tambahan yang diekspos oleh modul lain. Di samping fitur standar, ThemeKey secara otomatis memperluas fitur dari banyak modul contrib dan memiliki modul yang memperluasnya.

Penggunaan (7.x)

Setelah mengaktifkan modul, buka admin/config/user-interface/themekey. Ada banyak opsi untuk mengganti tema, tetapi mungkin Anda akan tertarik dengan path:node_alias, jadi atur nilainya seperti yang Anda inginkan seperti yang Anda katakan/my_url dan kemudian pilih tema yang ingin Anda aktifkan di url ini. Anda juga dapat menggunakan wildcard seperti web/* atau /^web/.*.

Periksa: Bagaimana Memuat Tema Untuk Path

Penggunaan lanjutan

ThemeKey 7.x berisi modul opsional yang disebut Contoh ThemeKey untuk menunjukkan kepada pengembang cara memperluas ThemeKey.

Bantuan (7.x)

Lihat tutorial video oleh Mustardseed (7.x).

Bantuan lebih lanjut tentang topik itu dapat ditemukan di /admin/help/themekey.

Juga periksa pertanyaan SE lainnya yang terkait dengan themekey .


Atau ada juga Switchtheme (7.x) yang menambahkan blok untuk memungkinkan pengguna untuk beralih di antara tema yang diaktifkan.

6
kenorb

Anda cukup menggunakan Konteks dan menggunakan tema untuk diterapkan ketika path adalah/event2011/Anda dapat dengan mudah mengatur path dalam kondisi cotext dan mengubah tema dalam aksi konten. Ini adalah Anda dapat dengan mudah beralih antar tema di situs berdasarkan URL. Bahkan berfungsi untuk ponsel;)

6
Amitav Roy

Saat menggunakan alias URL atau modul Pathauto , waspadai perbedaan dan perbedaan saat menggunakan komponen jalur Drupal saat ini.

Ada situasi di mana Anda mungkin tidak ingin menggunakan arg () . Bahkan, dokumentasi API Drupal sebenarnya menyarankan untuk menghindari penggunaan fungsi ini jika memungkinkan, karena kode yang dihasilkan sulit dibaca.

Pertimbangkan contoh berikut, seperti yang diusulkan oleh kiamlaluno :

function mymodule_custom_theme() {
  if (arg(0) == 'event2011') {
    return 'custom_theme_machine_name';
  }
}

Dalam Drupal 7, jika sebuah node memiliki alias event2011, menggunakan arg(0) akan mengembalikan node sebagai yang pertama Komponen URL, tidak seperti alias.

print_r(arg(0));

Array
(
    [0] => node
    [1] => 150
)

Sebaliknya, jika Anda perlu bekerja dengan alias ada beberapa cara untuk mendapatkan URL saat ini di Drupal , termasuk menu_get_object(), current_path(), request_path() dan lain-lain.

Berikut adalah contoh yang dikerjakan ulang yang menggunakan alias sebagai pemicu untuk mengalihkan tema:

function mymodule_custom_theme() {
  $current_page_path = explode('/', request_path());      

  if ($current_page_path[0] == 'event2011') {
    return 'custom_theme_machine_name';
  }
}
5
rjb

Cara beralih tema tergantung pada peran pengguna:

Buat modul khusus dan salin & tempel yang berikut ini:

<?php
/**
 * Implementation of hook_init().
 */
function mymodule_init() {
  global $custom_theme, $user;
  if (in_array('my special role', $user->roles)) {
    $custom_theme = 'mytheme';
  }
}
?>

Anda harus mengganti:

mymodule => dengan nama modul Anda

peran khusus saya => dengan nama peran yang harus dimiliki pengguna Anda agar mereka dapat melihat tema yang berbeda.

mytheme => dengan nama tema yang ingin Anda alihkan

3
drupalfever

Anda dapat menggunakan modul Tema Halaman untuk mencapai hal itu

Modul Tema Halaman adalah modul sederhana dan mudah digunakan yang memungkinkan untuk menggunakan tema yang berbeda dari standar situs pada halaman tertentu.

Fitur

  • Tetapkan tema ke satu halaman atau daftar halaman. (Tetapkan halaman sebagai Drupal path)
  • Izinkan untuk menggunakan karakter '*' sebagai wildcard di Drupal paths.
  • Izinkan untuk mengatur tema. (Jika beberapa halaman ditentukan, tema pertama dalam daftar akan digunakan)
  • Izinkan untuk mengaktifkan/menonaktifkan tema.
  • Drupal pemula yang ramah.
1
IT Pro Manager

Anda dapat menggunakan modul Tema Halaman untuk mencapai hal itu: Modul Tema Halaman adalah modul sederhana dan mudah digunakan yang memungkinkan untuk menggunakan tema yang berbeda dari standar situs pada halaman tertentu.

Fitur :

Tetapkan tema ke satu halaman atau daftar halaman. (Tetapkan halaman sebagai Drupal path) Izinkan untuk menggunakan karakter '*' sebagai wildcard di Drupal path. Izinkan untuk mengatur tema. (Jika halaman adalah beberapa ditentukan, tema pertama dalam daftar akan digunakan) Izinkan untuk mengaktifkan/menonaktifkan tema. Drupal ramah pemula.

seperti yang akan Anda gunakan: Bagian yang memiliki sebagian besar fitur yang sama dengan Page Theme, tetapi menambahkan pilihan berdasarkan peran dan area "php snippet" untuk memilih tema.

tetapi jika Anda ingin menggunakan tema yang berbeda dari standar situs pada pembuatan konten, pengeditan, dan melihat halaman Anda dapat menggunakan Tema Konten yang memungkinkan untuk menggunakan tema yang berbeda dari standar situs pada pembuatan, pengeditan, dan melihat halaman.

0
onlink