URL’yi temel alan bir temayı nasıl değiştiririm?


38

Example.org'da çalışan bir Drupal örneğim var. Bir tema X yüklü ve aktif olan. Şimdi sınırlı bir süre için, özel bir bölümün "oyulmuş" olduğu yerde bir etkinlik yapılması gerekiyordu. Bu olayla ilgili her şey example.org/event2011 adresine gidecektir.

Bu bölümün altındaki bir sayfa görüntülendiğinde gösterilmek üzere farklı bir temaya sahip olmak istiyorum (örn. Http://example.org/event2011/about , http://example.org/event2011/node/123 ). Bunu nasıl yaparım?

Birçok modülden geçtim, ancak hiçbiri Drupal 7'yi desteklemiyor. Tercihen, modüller kullanılarak yapılmasını istiyorum ve kod düzeyinde kendi kendime bir şey değiştirmek istemiyorum.


1
/ Event2011 / node / 123 yolu altında tamamen ayrı bir siteye mi ihtiyacınız var?
Jeremy Fransızca

Yanıtlar:


33

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

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

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 , ancak http://example.com/event2011/node/123 için değiştirmemeniz gerekiyorsa, kodun değiştirilmesi gerekir.

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

Geri arama temasını menü geri arama tanımında kullanmaya gelince , dokümantasyon şöyle diyor:

Genel bir kural olarak, tema geri çağırma işlevlerinin kullanımı, işlevleri belirli bir temaya çok yakından bağlı olan sayfalarla sınırlı olmalıdır, çünkü bunlar yalnızca bu sayfaları özel olarak hedefleyen modüller tarafından geçersiz kılınabilir hook_menu_alter(). 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ına izin veren bir modül) hook_custom_theme()bunun yerine kullanılmalıdır.


Current_path () işlevini api.drupal.org/api/drupal/includes%21path.inc/function/… öneririm . Daha kolay "için" bir koşul olacaktır
Ağustos

22

Diğer yorumların önerdiği gibi özel bir çözüm muhtemelen en iyisidir, ancak gerçekten bir modül kullanmak istiyorsanız, en iyi seçeneğiniz ThemeKey'dir . 5/23 / 11'den itibaren, istikrarlı bir sürüm var.


8

Alternatif theme callbackolarak, menü sisteminin yeni seçeneğini hook_menu_alter()aşağıda belirtildiği gibi kullanabilirsiniz. hakkında daha fazla bilgi için ps Checkout hook_menu ()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();
}
?>

Ek olarak, daha geleneksel olanı kullanmanın bir örneği de var. hook_custom_theme()

<?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ığı kaynak: http://drupal.org/node/224333#custom_theme


6

Sadece kullanabilirsiniz Bağlam ve temasını kullanmak yolu cotext durumundaki yolu / event2011 / yapabilirsiniz basit kurulum olduğunda uygulanacak almak ve içerik eylem temasını değiştirmek. Bu, URL'ye dayalı bir sitedeki temalar arasında kolayca geçiş yapabilirsiniz. Cep telefonları için bile çalışır;)


tema eylemi özel değişkenleri temaya geçirir, aslında değiştirmez
Alex Weber

6

ThemeKey'i kullanmak basittir ve mevcut yola, taksonomi terimlerine, dile, düğüm türüne ve birçok seçeneğe bağlı olarak bir temanın otomatik olarak seçilmesini sağlayan tema değiştirme kuralları için şimdiye kadarki en popüler ve en güçlü modüldür (8.x desteği ile), diğer birçok özellik. Diğer modüllerin maruz kaldığı ilave özellikleri desteklemek için kolayca genişletilebilir. Standart özelliklerin yanı sıra ThemeKey, pek çok katkıda bulunan modüllerin özelliklerini otomatik olarak genişletir ve genişleten modüllere sahiptir.

Kullanım (7.x)

Modülü etkinleştirdikten sonra adresine gidin admin/config/user-interface/themekey. Temayı değiştirmek için pek çok seçenek var, ancak muhtemelen ilginizi path:node_aliasçekecektir, bu yüzden istediğiniz şekilde değeri / my_url olarak ayarlayın ve sonra bu URL'de etkinleştirmek istediğiniz temayı seçin. Ayrıca web/*veya gibi joker karakterleri de kullanabilirsiniz /^web/.*.

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

Gelişmiş kullanım

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

Yardım (7.x)

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

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

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


Alternatif olarak, kullanıcıların etkin temalar arasında geçiş yapmasını sağlamak için bir blok ekleyen Switchtheme (7.x) de vardır .


5

Kullanırken URL takma adları veya OtoYol modülü Mevcut Drupal yolunun bileşenlerini kullanırken, inceliklerini ve farklılıklara dikkat.

Arg () kullanmak istemediğiniz durumlar olabilir . Aslında, Drupal API belgeleri aslında mümkün olduğunda kodun okunması zor olduğundan, bu fonksiyonun kullanılmasından kaçınılmasını önerir.

Kiamlaluno tarafından önerilen aşağıdaki örneği göz önünde bulundurun :

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

Drupal 7'de, eğer bir düğüm event2011'in takma ismine sahipse , takma adın aksine ilk URL bileşeni olarak arg(0)geri dönülür node.

print_r(arg(0));

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

Eğer bir takma ad ile çalışmak gerekiyorsa yerine, orada birkaç Drupal mevcut URL almak için yollar da dahil olmak üzere menu_get_object(), current_path(), request_path()ve diğerleri.

Temayı değiştirmek için tetikleyici olarak takma ad kullanan, yeniden çalışılmış bir örnek:

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

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

3

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ştirmen gerekiyor:

mymodule => modül adınızla

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

mytheme => Geçiş yapmak istediğiniz temanın ismiyle


1

Tam olarak elde etmek için Sayfa Teması modülünü kullanabilirsiniz.

Sayfa Teması modülü, belirli sayfalarda site varsayılanından farklı temalar kullanmanıza izin veren basit ve kolay bir modüldür.

Özellikleri

  • Tek bir sayfaya veya sayfa listesine tema atayın. (Bir sayfayı Drupal yolu olarak ayarlayın)
  • '*' Karakterini, Drupal yollarında joker karakter olarak kullanmaya izin ver.
  • Temaları düzenlemeye izin ver. (Sayfalar birkaç tanımlıysa, listedeki ilk tema kullanılacaktır)
  • Bir temayı etkinleştirmek / devre dışı bırakmak için izin ver.
  • Drupal acemi dostu.

0

Tam olarak şunu elde etmek için Sayfa Teması modülünü kullanabilirsiniz: Sayfa Teması modülü, belirli sayfalarda site varsayılanından farklı temalar kullanmanıza izin veren basit ve kolay bir modüldür.

Özellikleri :

Tek bir sayfaya veya sayfa listesine tema atayın. (Sayfayı Drupal yolu olarak ayarla) Drupal yollarında '*' karakterini joker olarak kullanmaya izin ver. Temaları düzenlemeye izin ver. (Sayfalar birkaç tanımlıysa, listedeki ilk tema kullanılacaktır) Bir temayı etkinleştirmek / devre dışı bırakmak için izin verin. Drupal acemi dostu.

Kullanabileceğiniz gibi: Sayfa Teması ile aynı özelliklerin çoğuna sahip olan bölümler, ancak temayı seçmek için rol tabanlı bir seçim ve "php snippet" alanı ekler.

ancak içerik oluşturma, düzenleme ve görüntüleme sayfalarında içerik varsayılanında, sitenin varsayılanından farklı temalar kullanmak istiyorsanız, içerik oluşturma, düzenleme ve görüntüleme sayfalarında sitenin varsayılanından farklı temalar kullanmanıza izin veren İçerik Teması'nı kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.