Suppression de feuilles de styles ou de scripts d'un thème Drupal
Un problème classique sous Drupal, chaque module pouvant potentiellement ajouter ses feuilles de style et ses javascript, comment imposer la suppression d'un ensemble de feuilles ou scripts qui posent problème au sein du thème en front ?
Ce peu par exemple se révéler utile lorsque l'on a besoin d'utiliser un jQuery dernière génération non dispo dans Jquery Update ou encore pour virer les feuilles de style de coeur de drupal qui implique trop de modifications sur les feuilles du thème.
Suppression d'un script
Le principe de base est de regénérer la variable de template $script. Ce n'est pas idéal car cela oblige Drupal à effectuer deux fois un traitement mais c'est le mieux que j'ai pu trouver jusqu'à maintenant.
function mon_theme_preprocess_page(&$variables) {
// Récupération du tableau de scripts. Ce tableau a comme première clef le domaine (code, module, settings, theme, etc..) et comme seconde clef, le nom du fichier JS.
$scripts = drupal_add_js();
// Ici on supprime tous les scripts émis par le coeur de drupal
$scripts['core'] = array();
// Regénération du code XHTML d'insertion des scripts (cela comprend la passe de l'optimisateur)
$variables['scripts'] = drupal_get_js('header', $scripts);
}A placer dans le template.php du thème à altérer
Bien évidement il est possible de rendre tout ceci conditionnel, par exemple sur un chemin donné.
Suppression de styles
Même principe que pour les scripts, mais cette fois sur la variable de template $styles :
function mon_theme_preprocess_page(&$variables) {
// On récupère le tableau des feuilles de styles déclarées
$stylesheets=drupal_add_css();
// Et on en supprime certaines
unset($stylesheets['all']['module']['modules/system/defaults.css']);
unset($stylesheets['all']['module']['modules/system/system.css']);
unset($stylesheets['all']['module']['modules/system/system-menus.css']);
// Regénération du code XHTML d'insertion des feuilles de style (cela comprend la passe de l'optimisateur)
$variables['styles']=drupal_get_css($stylesheets);
}A placer dans le template.php du thème à altérer