2011-11-16 8 views

risposta

8

È possibile utilizzare hook_custom_theme():

function mymodule_custom_theme() { 
    if ($some_condition_is_true) { 
    return 'my_theme'; 
    } 
} 

Se è necessario basare la selezione sul percorso quindi il modo migliore per andare è quello di ignorare lo theme callback per particolari voci del router di menu. See here for an example.

1

Anche se non sono sicuro di quale sia la condizione in cui si desidera modificare il tema, ma se si desidera modificare il tema in base a un url, un tipo di nodo, un termine di tassonomia, una pagina di visualizzazione ecc., È possibile gestirlo utilizzando il contesto. modulo che farà questo per te e non dovrai neanche scrivere una singola riga di codice. Check this out: http://drupal.org/project/context

Questo è un modulo molto utile e ha una bella integrazione con i moduli quasi tutti i famosi come pannelli, tema omega, delta ecc

0

Drupal variabile theme_default è quello che si deve impostare per passare tema utilizzando la funzione variable_set.

variable_set('theme_default', 'your_theme_name'); 

È possibile cambiare il tema di default attraverso un hook_update_N se si dispone di un modulo personalizzato già installato. Assicurati inoltre di chiamare il codice in hook_install per eseguirlo durante il periodo di installazione nel caso in cui desideri condividere il modulo con qualcun altro e desideri modificare il tema attivo durante il periodo di installazione.

/** 
* Implements hook_update_N(). 
*/ 
function mymodule_update_7000() { 
    $theme_list = array(
    'bootstrap', 
    'mytheme', 
    'shiny', 
); 
    theme_enable($theme_list); 
    $theme_default = 'mytheme'; 
    // The below code would change the default active theme to 'mytheme' 
    variable_set('theme_default', $theme_default); 
    $admin_theme = 'shiny'; 
    variable_set('admin_theme', $admin_theme); 
} 
0

Mentre variable_set() lavorerà per hook_install() o hook_update_N(), non si dovrebbe usare all'interno di un modulo. Chiamando variable_set() si svuota la tabella cache_bootstrap, che rappresenta un grave calo di prestazioni sui siti occupati.

Vorrei raccomandare il ThemeKey module se non avete bisogno della piena potenza del Contesto. Tuttavia, i contesti sono facilmente esportabili per il controllo delle versioni, mentre per quanto ne so non c'è modo di esportare le regole di ThemeKey.