J'essaie d'ajouter des feuilles de style conditionnellement à mon site Drupal 6. J'ai ajouté le code suivant à mon fichier template.php pour le tester, et cela ne fonctionne pas. Le fichier css n'est pas ajouté à mon site.
function ben_preprocess_page(&$vars) {
drupal_add_css('/sites/all/themes/ben/advice.css','theme','all',FALSE);}
Ce code fonctionne bien lorsque je le mets dans un module personnalisé que j'ai créé à l'aide de hook_init() mais je pense que je dois le mettre dans mon fichier template.php car je veux vérifier la page sur laquelle je suis.
Toute aide serait très appréciée.
Ben
2 réponses
IIRC, les liens de la feuille de style ont déjà été rendus lorsque les fonctions *_preprocess_page()
sont appelées et le balisage généré a été placé dans $variables['styles']
. Il est donc trop tard pour utiliser drupal_add_css()
d'ici là.
Vous pouvez soit assembler vous-même le balisage <link ...>
pour vos ajouts et l'ajouter à $variables['styles']
, soit trouver un meilleur endroit pour votre appel à drupal_add_css()
plus tôt dans la chaîne de traitement (probablement à partir de dans un module).
Il est difficile de dire à quel endroit ce serait sans savoir ce que vous entendez exactement par "vérifier la page sur laquelle je suis", mais si nous parlons de pages de nœuds, hook_nodeapi()
serait un candidat.
EDIT après clarification dans les commentaires : Si la décision sur les feuilles de style à ajouter est basée uniquement sur le chemin, hook_init
(dans un module personnalisé) serait un bon endroit pour le faire, car le chemin ne changera pas après cela. Le seul élément « difficile » dans ce cas serait d'accéder aux URL propres. Si (comme je suppose) vous utilisez des URL propres, vous ne pouvez pas utiliser arg(0)
pour obtenir le premier élément du chemin, car cela renverrait le premier élément du chemin interne de Drupal (par exemple « nœud » pour les pages de nœud). Vous devez donc d'abord obtenir la version propre de l'URL :
// Get current path alias, if any (will return original path, if no alias set)
$path = drupal_get_path_alias($_GET['q']);
// Extract first element
$path_elements = explode('/', $path);
// Do we have at least one element?
if (0 < count($path_elements) {
// Yes, add stylesheet based on that
switch ($path_elements[0]) {
case 'advice':
drupal_add_css('path/to/advice.css');
break;
case 'services':
drupal_add_css('path/to/services.css');
break;
// TODO: Add other variations ...
default:
// Might add a default alternative here
break;
}
}
(REMARQUE : code non testé, attention aux fautes de frappe)
J'ai mis le code suivant dans un module personnalisé et il ajoute maintenant le fichier css :
function defprofile_preprocess_page(&$vars) {
drupal_add_css('sites/all/themes/ben/advice.css','theme','all',FALSE);
$vars['styles'] = drupal_get_css(); }
Questions connexes
De nouvelles questions
css
CSS (Cascading Style Sheets) est un langage de feuille de style de représentation utilisé pour décrire l'apparence et la mise en forme des documents HTML (HyperText Markup Language), XML (Extensible Markup Language) et des éléments SVG, y compris (mais sans s'y limiter) les couleurs, la mise en page, les polices, et animations. Il décrit également comment les éléments doivent être affichés à l'écran, sur papier, dans un discours ou sur d'autres supports.