2009-09-11 5 views
7

Je dois utiliser drupal_add_css pour appeler des feuilles de style sur des pages Drupal 6 simples. Je ne veux pas éditer la feuille de style du thème principal car il y aura un ensemble de pages individuelles qui ont toutes besoin de styles complètement nouveaux - la feuille principale serait massive si je la mettais tout dedans.drupal_add_css ne fonctionne pas

Ma solution était de modifier la page en mode éditeur PHP et faire ceci:

<?php 
drupal_add_css("/styles/file1.css", "theme"); 
?> 

<div id="newPageContent">stuff here in html</div> 

Mais quand je vois la source, il n'y a rien là! Pas même un lien CSS cassé ou quoi que ce soit, c'est simplement refuser d'ajouter la feuille CSS au paquet CSS placé dans la tête de la page.

Les variations ne semblent pas fonctionner soit:

drupal_add_css($path = '/styles/file1.css', $type = 'module', $media = 'all', $preprocess = TRUE) 

Mon-tête de modèle ressemble à ceci, je ne l'ai pas changé quoi que ce soit de la valeur par défaut autre que l'ajout d'un JavaScript personnalisé.

<head> 
    <?php print $head ?> 
    <title><?php print $head_title ?></title> 
    <?php print $styles ?> 
    <?php print $scripts ?> 
    <script type="text/javascript" src="<?php print base_path() ?>misc/askme.js"></script>  
    <!--[if lt IE 7]> 
     <?php print phptemplate_get_ie_styles(); ?> 
    <![endif]--> 
</head> 

Pourquoi cette fonction ne fonctionne-t-elle pas?

+1

Si vous avez réussi à le faire, vos paramètres de mise en cache ont-ils changé? –

Répondre

2

La réponse était beaucoup d'utiliser le module CSS Injector - super petit addon!

Voici un extrait de sa page du projet:

Permet aux administrateurs de CSS injectent dans la sortie de page en fonction de règles configurables. C'est utile pour ajouter des modifications CSS simples sans modifier le thème officiel d'un site. Le CSS est ajouté en utilisant la fonction standard drupal_add_css() de Drupal et respecte la mise en cache des pages, etc. Le 2.x brach s'appuie sur CTools pour que CSS puisse être inclus avec les changements de fonctionnalités (CSS qui améliore l'apparence d'une vue).).

4

Cette fonction ne fonctionnera pas dans les modèles. La raison en est que la variable $ styles qui contiendra tout le fichier html de la feuille de style aura déjà été générée à ce stade, ainsi drupal_add_css ne fonctionnera pas comme il ajoute à cela. si vous voulez faire dans votre thème, vous auriez probablement ajouter le fichier css manuellement

<link rel="stylesheet" ... /> 

L'autre façon serait d'utiliser drupal_add_css dans un module, mais vous pourriez avoir du mal à ajouter le code CSS correct fichiers sur les pages que vous voulez.

+0

vraiment? Je l'ai fait travailler il y a une semaine sur un autre site: o - J'avais édité drupal_add_css dans une page en mode PHP. – MrFidge

+0

Je pense que vous avez raison de dire pourquoi la fonction ne fonctionnera pas mais qu'elle ne peut pas être faite dans la couche thématique. Vois ma réponse. –

+0

@Jeremy J'étais un peu incertain si vous pouviez ou ne pouvais pas le faire fonctionner de cette façon, c'est pourquoi j'ai dit probablement. Mais l'utilisation de preprocess_page ne vous aidera pas beaucoup si vous voulez le faire par page. Vous pourriez aussi bien le faire dans un module alors. – googletorp

7

Il n'est pas très clair où vous sélectionnez le modèle que vous avez dans votre exemple. Si vous le sélectionnez dans un module, vous pouvez simplement utiliser drupal_add_css dans le module plutôt que dans le modèle.

Si vous avez votre propre thème, vous pouvez utiliser template_preprocess_page et mettre de la logique là pour ajouter le CSS approprié (vous pouvez également l'utiliser pour sélectionner le modèle à utiliser).

+0

Salut, je suis vraiment désolé mais j'ai absolument eu ce travail directement à partir d'une page l'autre semaine. J'ai pensé "oh super c'est facile" et construit le reste de mon site. Maintenant, je reviens pour l'implémenter et ça ne marche pas. Typique: P – MrFidge

+8

Une autre remarque à ce sujet, si vous utilisez template_preprocess_page avec drupal_add_css() assurez-vous de l'ajouter dans le tableau des styles comme ceci: 'drupal_add_css (path_to_theme()." /css/page.css "," theme ") \t $ vars ['styles'] = drupal_get_css(); ' – joelpittet

3

Il est possible d'utiliser drupal_add_css() dans votre fichier template.php; this page a un bon exemple de comment faire exactement cela.

0

Merci pour le lien, wyrmmage. C'est très utile. Je pense que le reste du code sur la page n'est pas nécessaire. Vous avez probablement juste besoin de ceux-ci puisque drupal 6 vérifie déjà automatiquement l'existence du fichier:

drupal_add_css(path_to_theme() . '/css/yourcss.css', 'theme'); 
// Add the following to regenerate $styles. 
// This is needed for template_preprocess_page() since css is already generated at this point. 
$variables['styles'] = drupal_get_css(); 
1

Ce code dans le modèle.php fonctionne pour moi:

function alagna_preprocess_page(&$vars) { 
     drupal_add_css(path_to_theme() . '/header_1.css', 'theme'); 
     $vars['css'] = drupal_add_css(); 
     $vars['styles'] = drupal_get_css(); 
} 

expliqué:

  1. alagna est le nom du thème
  2. header_1.css est le fichier css requis.
6

J'ai remarqué quelque chose de bizarre et il pourrait résoudre votre problème:

drupal_add_css(drupal_get_path('theme','themname') . '/working.css','module' ,'all' , false); 

drupal_add_css(drupal_get_path('theme','themname') . '/path/to/folder/notworking.css','module' ,'all' , false); 

Le premier travaillera ebcause le style dans le dossier principal les La deuxième ligne ne fonctionnera pas parce que le style est dans un sous-dossier!

Edit:

Je pense que ça n'a pas marché parce que je n'ai pas écrit le chemin du fichier de style correctement: S alors s'il vous plaît ne pas tenir compte ma réponse

drupal_add_css(drupal_get_path('theme','test') . '/pages/subpage/style.css','theme'); 

travaille

1

drupal_add_css est attend un chemin par rapport au chemin de base alors que drupal_get_path ne retourne pas le chemin par rapport au chemin de base.

global $base_path;
drupal_add_css($base_path . drupal_get_path('module/theme','name') . "/styles/file1.css", "module/theme");

Vous pouvez choisir entre le module et le thème en conséquence.

+1

Vous n'avez pas besoin de $ base_path, n'est-ce pas? – jlstrecker

0

Essayez cette common.inc drupal_get_css($css = NULL)

Paramètres

$ css: (en option) Un tableau de fichiers CSS. Si aucun tableau n'est fourni, le tableau de stylesheets par défaut est utilisé à la place.

$css = $vars['css']; 
// unset the system css files 
$unset_css = array 
    'modules/system/system.css', 
    'modules/system/system-menus.css', 
); 

foreach($unset_css as $css_f) { 
    if(isset($css['all']['module'][$css_f])) { 
     unset($css['all']['module'][$css_f]); 
    } 
} 

// add css 
$css['all']['theme'][drupal_get_path('theme', 'openpublish_theme') . '/css/style.css'] = true; 
$vars['styles'] = drupal_get_css($css);