2010-07-19 8 views
3

Dans le contexte d'un module, comment pouvez-vous déterminer quel thème est chargé pour l'utilisateur actuel?Récupérer le thème Drupal actuel?

drupal_get_path 
path_to_theme 

Aucun de ces éléments ne sont bons, car ils semblent ne fonctionner que dans le template.php d'un thème.

Répondre

3

Si les utilisateurs sont autorisés à sélectionner un thème pour eux-mêmes, le thème qu'ils ont sélectionné est enregistré dans $user->theme, où $user est l'objet utilisateur. La variable globale $custom_theme contient le nom du thème actuellement défini, si un module a défini un thème personnalisé.

L'extrait suivant enregistre dans $current_theme le nom du thème actuellement actif:

global $custom_theme, $theme, $user; 

if (!empty($user->theme)) { 
    $current_theme = $user->theme; 
} 
elseif (!empty($custom_theme)) { 
    $current_theme = $custom_theme; 
} 
else { 
    $current_theme = $theme ? $theme : variable_get('theme_default', 'garland'); 
} 
1

path_to_theme devrait fonctionner très bien, je l'ai testé sur deux installations Drupal, et les deux travaillé. Si le thème n'a pas encore été initialisé, path_to_theme le fera, ce que Drupal utilise en interne pour définir différentes variables de thème globales comme $theme_path, qui est la variable que vous recherchez.

+0

Hm, qui m'a donné le chemin du module quand je l'ai essayé il y a quelques jours – Kevin

+0

@googletorp, Nope - cela dépend de la portée lorsque 'path_to_theme()' est appelé. À partir de la docs:> lorsqu'elle est invoquée dans le cadre d'un appel thématique, elle dépend de > où la fonction de thématisation est gérée. Si implémenté à partir d'un module, > il pointera vers le module. Si implémenté à partir du thème actif, il > pointera sur le thème actif> Source: [API Drupal] (http://api.drupal.org/api/drupal/includes!theme.inc/function/path_to_theme/6) –

Questions connexes