web-gelistirme-sc.com

Bir temayı URL'ye göre nasıl değiştiririm?

Bir Drupal örneğim var. X'in yüklü ve etkinleştirilmiş bir teması var. Şimdi sınırlı bir süre için özel bir bölümün bulunduğu sitede bir olay olması gerekiyordu Bu olayla ilgili her şey example.org/event2011 adresine gidecek.

Bu bölümün altındaki bir sayfa görüntülendiğinde farklı bir temanın gösterilmesini istiyorum (örn. http://example.org/event2011/about , http://example.org/event2011/düğüm/12 ). Bunu nasıl yaparım?

Birçok modülden geçtim, ama hiçbiri desteklemiyor Drupal 7. Tercihen, modülleri kullanarak yapılmasını istiyorum ve kod düzeyinde kendimi değiştirmek istemiyorum .

38
Samyak Bhuta

Değişikliğin sınırlı bir süre için olduğunu ve böyle bir kodun uygulanmasının zor olmadığını göz önüne alarak, belirli sayfalar için kullanılan temayı değiştiren özel bir modül uygulamanızı öneririm.

Aşağıdaki gibi hook_custom_theme() uygulamak yeterlidir:

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

Temayı yalnızca http://example.com/event2011 için değiştirmeniz gerekiyorsa http://example.com/event2011/node/123 , daha sonra kodun

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

Bir menü geri aramasının tanımında tema geri çağrılarını kullanmaya gelince, belgeler diyor ki:

Genel bir kural olarak, tema geri arama işlevlerinin kullanımı, işlevselliği belirli bir temayla çok yakından bağlantılı olan sayfalarla sınırlandırılmalıdır, çünkü bunlar yalnızca hook_menu_alter() içindeki bu sayfaları özellikle hedefleyen modüller tarafından geçersiz kılınabilir. Daha genel tema değiştirme işlevselliği uygulayan modüller (örneğin, temanın geçerli kullanıcının rolüne göre dinamik olarak ayarlanmasını sağlayan bir modül) yerine hook_custom_theme() kullanmalıdır.

33
kiamlaluno

Diğer yorum gibi özel bir çözüm muhtemelen en iyisidir, ancak gerçekten bir modül kullanmak istiyorsanız, en iyi bahsiniz ThemeKey . 23.05.2011 itibarıyla, istikrarlı bir sürümü var.

22
tim.plunkett

Alternatif olarak, aşağıda açıklandığı gibi hook_menu_alter() menü sisteminin yeni theme callback Seçeneğini kullanabilirsiniz. s. theme callback hakkında daha fazla bilgi için Checkout hook_menu ()

<?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();
}
?>

Ayrıca daha geleneksel hook_custom_theme() kullanımına bir örnek de vardır.

<?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';
  }
}
?>

Alındığı yer: http://drupal.org/node/224333#custom_theme

8
electblake

ThemeKey kullanmak basittir ve tema değiştirme için şimdiye kadarki en popüler ve güçlü modüldür (8.x desteği ile) geçerli yola, sınıflandırma terimlerine, dile, düğüm tipine ve daha birçok özelliğe bağlı olarak bir temanın otomatik olarak seçilmesine izin veren kurallar. Diğer modüllerin maruz kaldığı ek özellikleri desteklemek için kolayca genişletilebilir. ThemeKey, standart özelliklerin yanı sıra birçok katkıda bulunan modülün özelliklerini otomatik olarak genişletir ve genişleten modüllere sahiptir.

Kullanım (7.x)

Modülü etkinleştirdikten sonra admin/config/user-interface/themekey 'A gidin. Temayı değiştirmek için birçok seçenek vardır, ancak muhtemelen path:node_alias İle ilgilenirsiniz, bu nedenle değeri/my_url dediğiniz gibi ayarlayın ve ardından bu url'de etkinleştirmek istediğiniz temayı seçin. web/* Veya /^web/.* Gibi joker karakterleri de kullanabilirsiniz.

Kontrol edin: Yol İçin Bir Tema Nasıl Yüklenir

Gelişmiş kullanım

ThemeKey 7.x, geliştiricilere ThemeKey'i nasıl genişleteceklerini göstermek için ThemeKey Örneği adlı isteğe bağlı bir modül içerir.

Yardım (7.x)

Check out Mustardseed tarafından video eğitimi (7.x).

Bu konuda daha fazla yardım /admin/help/themekey Adresinde bulunabilir.

Ayrıca themekey ile ilgili diğer SE sorularını da kontrol edin.


Alternatif olarak, kullanıcıların etkinleştirilmiş temalar arasında geçiş yapmasına izin vermek için bir blok ekleyen Switchtheme (7.x) de vardır.

6
kenorb

Context öğesini kullanabilir ve yol/event2011 olduğunda temayı kullanmak için temayı kullanabilirsiniz/yolu, metnin durumuna göre basit bir şekilde ayarlayabilir ve içeriğin eylemindeki temayı değiştirebilirsiniz. Bu, URL'ye dayalı bir sitede temalar arasında kolayca geçiş yapabileceğinizdi. Cep telefonları için bile çalışır;)

6
Amitav Roy

RL takma adları veya Pathauto modülü kullanırken, geçerli Drupal yolunun bileşenlerini kullanırken inceliklerin ve farklılıkların farkında olun.

Kullanmak istemeyebileceğiniz durumlar vardır arg () . Aslında, Drupal API belgeleri aslında bu fonksiyonun mümkün olan yerlerde kullanılmasından kaçınılmasını önerir, çünkü ortaya çıkan kodun okunması zordur.

kiamlaluno tarafından önerildiği gibi aşağıdaki örneği düşünün:

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

Drupal 7'de, bir düğümün event2011 takma adı varsa, arg(0) kullanıldığında ilk URL bileşeni olarak node döndürülür, takma adın aksine.

print_r(arg(0));

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

Bunun yerine, bir takma adla çalışmanız gerekiyorsa menu_get_object(), current_path(), request_path() ve diğerleri.

Aşağıda temayı değiştirmek için bir takma ad kullanan bir yeniden çalışılan örnek verilmiştir:

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

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

Kullanıcı rolüne bağlı olarak tema nasıl değiştirilir:

Özel bir modül oluşturun ve aşağıdakileri kopyalayıp yapıştırın:

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

Değiştirmelisiniz:

mymodule => modül adınızla

özel rolüm => kullanıcılarınızın farklı bir tema görebilmeleri için sahip olmaları gereken rolün adıyla.

mytheme => geçmek istediğiniz temanın adıyla

3
drupalfever

Tam olarak bunu başarmak için Page Theme modülünü kullanabilirsiniz

Sayfa Teması modülü, belirli sayfalarda site varsayılanından farklı temaların kullanılmasını sağlayan basit ve kolay bir modüldür.

Özellikleri

  • Tek bir sayfaya veya sayfa listesine bir tema atayın. (Bir sayfayı Drupal yol) olarak ayarlayın
  • Drupal yollarında '*' karakteri joker karakter olarak kullanılmasına izin verin.
  • Temaları düzenlemeye izin ver. (Sayfalar birkaç tanımlıysa, listedeki ilk tema kullanılır)
  • Bir temayı etkinleştirmeye/devre dışı bırakmaya izin ver.
  • Drupal acemi dostu.
1
IT Pro Manager

Tam olarak bunu başarmak için Sayfa Teması modülü kullanabilirsiniz: Sayfa Teması modülü, belirli sayfalarda site varsayılanından farklı temaların kullanılmasına izin veren kullanımı kolay ve basit bir modüldür.

Özellikleri :

Tek bir sayfaya veya sayfa listesine bir tema atayın. (Bir sayfayı Drupal yol) olarak ayarlayın = Drupal yollarında '*' karakteri joker karakter olarak kullanılmasına izin verin. Temaların düzenlenmesine izin verin. birkaç tanımlı, listedeki ilk tema kullanılacak) Bir temayı etkinleştirmek/devre dışı bırakmak için izin ver. Drupal acemi dostu.

kullanabileceğiniz gibi: Sayfa Teması ile aynı özelliklerin çoğuna sahip olan ancak temayı seçmek için role dayalı bir seçim ve bir "php snippet" alanı ekleyen bölümler.

ancak içerik oluşturma, düzenleme ve görüntüleme sayfalarında site varsayılanından farklı temalar kullanmak isterseniz, içerik oluşturma, düzenleme ve içerik oluşturmada site varsayılanından farklı temaların kullanılmasına izin veren Content Theme kullanabilirsiniz. sayfaları görüntüleme.

0
onlink