Qual è il modo corretto di cambiare il tema di Drupal 7 attivo a livello di codice? Ho usato $custom_theme
in Drupal 6, ma non sta funzionando in Drupal 7.cambia automaticamente il tema Drupal 7 attivo
risposta
È 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.
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
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);
}
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.