surcharger CSS pour le template d'un type de contenu uniquement

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

J'ai du mal à appréhender les thèmes de Drupal 6.

But: modifier le rendu d'un thème pour un type de contenu

Je dois insérer un site dans mon site Drupal. En clair, garder la partie 'Header' de mon site et offrir la navigation dans la partie 'content'.

J'ai donc créer un type de contenu, sans champ particulier, puis un nœud à partir de ce type de contenu (car je ne suis pas arrivé à associer un template du type: page-monTypedeContenu.tpl.php
Dans la gestion de mes blocs, j'ai pu personnaliser l'affichage en fonction de mon type de contenu.
De là j'ai créer un (une ?) template: node-MonContenu.tpl.php qui ne contient que la déclaration d'iframe. Nickel.

Je voudrai modifier le css du thème (fait par une société tierce) afin de supprimer les images de fond, l'image de l'imprimante etc par exemple, mais uniquement pour ce type de contenu.

Je n'y arrive pas. Une idée svp ?
Le moteur utilisé est phpTemplate.

Par avance merci.

Forum : 
Version de Drupal : 

Bonjour,

Non, ce que je veux c'est uniquement modifier le css du template: node-MonContenu.tpl.php

qui dans ce cas contient une iframe, mais c'est accessoire.

Le node-MonContenu.tpl.php contient:

<iframe
name="iframe"
...
</iframe>

Et je ne pense pas qu'y rajouter une ligne telle que:

link type="text/css" ... avant, serve à quelque chose car la balise est déjà traitée.

Est ce que rajouter une déclaration dans le css du thème: MonContenu.body {...}
serai correctement interprété par Drupal?

Merci d'avoir pris le temps de me répondre.

le thème que tu utilises pour ton site inclut très certainement plusieurs fichier CSS dans ta page,
mais si tu veux travailler sur un fichier a toi dans ce cas tu as juste à le créer dans
/sites/all/themes/[tonTheme]/css/, il sera automatiquement inclut dans toutes les pages de ton site.

J'ai entre autre essayé cela sans succès,
function phptemplate_preprocess_node(&$vars) {
if ($vars['type'] == 'cahier_cfp') {
$css = path_to_theme() . '/css/styles_cahiers.css';
drupal_add_css($css, 'theme', 'all', 1);
} else {
$css = path_to_theme() . '/css/styles.css';
drupal_add_css($css, 'theme', 'all', 1);
}

// Rebuild Drupal's css array:
$css = drupal_add_css();
// Apply that array to the $styles string to be printed in the section of page.tpl.php
$vars['styles'] = drupal_get_css($css);
}

Si le styles_cahiers.css est bien chargé quand j'arrive sur un node de type cahier_cfp, il ne recharge pas la feuille standard pour les autres.

Je n'ai pas dans mon de balise propre à mon node.

Par ailleurs, j'ai effectivement un style.css propre à mon thème. Mais je ne sais pas comment personnaliser la définition de body pour un type de contenu précis, sans affecter tout le site.

Merci encore d'avoir pris le temps de me répondre.

ps:
A quoi correspond dans ce forum le lien "Accepter la réponse" ?

Dans ce cas tu peux charger un fichier css uniquement pour ce type de contenu :

  • tu vas dans le fichier template.php de ton theme
  • tu ajoutes une fonction comme suit

// vars contient toutes les infos du noeud courant dont son type
function [nomTheme]_preprocess_node(&$vars)
if ($vars['type'] == '[tonTypeDeContenu]'){
    drupal_add_css(drupal_get_path('theme', '[nomTheme]') . '/css/[fichierCss].css');
  }
}

je n'ai pas testé mais ça doit etre assez juste. Bien sûr n'oublie pas d'ajouter le fichier css au bon emplacement ;)

edit : Il faut supprimer tes cache quand tu ajoutes un preprocess sinon tu ne verra rien