Utiliser uniquement les attributs définis dans la feuille de style liée au thème
Outre la restriction imposée au rédacteur, cette solution nécessite la modification de la feuille de styles du thème. Cela peu devenir un cauchemar pour des site présentant plusieurs thèmes, sauf à inclure ces mise en forme propre aux billets dans une feuille séparée incluse.
Définir des style inline dans le texte du billet.
Il faut pour cela que le rédacteur maîtrise la syntaxe CSS et écrive ses billet en XHTML.
Définir les styles appliqués au billets ailleurs, pour les intégrer au code généré par le template
La maintenance et l'administration de ces définitions peut devenir un cauchemar si l'on considère un grand nombre de définitions et l'effet cascade propre à la mise en forme par CSS. Il faudrait pour simplifier la compréhension du système pouvoir définir simplement une classe CSS applicable à un billet donné (le numéro d'identification pouvant servir à désigner précisément la classe). Mais dans ce cas, la gestion de ces identifiants peut être fastidieuse.
Alors comment faire ?
Déjà limiter le nombre de mise en formes particulières.
Le plus important dans le contenu c'est le message, la communication, pas la calligraphie ou l'apparence (même si ceux-ci sont important, parce que c'est plus joli et qu'il y a des règle d'écriture, que ça facilite la lecture,blah blah blah ... ). Un ensemble de texte sera plus lisible avec une mise en page cohérente.
Créer quelques mises en forme de base
La création de quelques mises en forme de base suffit à couvrir la majorité des besoins. On peut définir des mise en forme de position (« center », « left », « right »), des écritures en couleur, etc. Ces mises en forme pourront être insérer dans la feuille de style du thème ou dans une feuille annexe incluse ou liée en modifiant le fichier template.php.
définir des style avec un billet
Définir des styles dans une meta-donnée (avec le plugin twMetaDonnée) et lire des données, pour les inclure dans l'entête du fichier XHTML.
- les styles sont définis pour les billets dans la meta-donnée 'CSS'
- La fonction suivante est incluse dans le thème (fichier extended.php)
[php] // liste les CSS définis pour les billets de la page // JL-20060516 /* Utilisation <head> ... <style type="text/css"> <?php listCSS(); ?> </style> ... */ // version 0.1 : Les CSS sont défini via le plugin MetaDonnées avec la variable css function listCSS() { global $news, $con; if (isset($news)) { $news->moveStart(); $ids = array(); while ($news->fetch()) { $ids[] = $news->f('post_id'); } $sql = 'SELECT DISTINCT meta_value' . ' FROM ' . DB_PREFIX . 'post_meta' . ' WHERE meta_key = "CSS"' . ' AND post_id IN (' . implode(',',$ids) . ')'; $rec = $con->select($sql); if ($rec === false || $rec->isEmpty()) { return false; } else { while ($rec->fetch()) { echo $rec->f('meta_value')." "; } } } } - Cette fonction est appelée dans le template.php au moment de générer l'entête XHTML
... <style type="text/css"> <?php listCSS(); ?> </style> ...
Bon, ainsi c'est presque bien, mais cela peut être fastidieux de gérer des CSS ainsi, nous risquons rapidement d'avoir des effet de débordement si par exemple nous définissons une mise en forme pour des élément identifier de façon trop générique.
La solution serait de pouvoir identifier un élément en fonction du billet. Pour cela nous pouvons nous aider du numéro de billet.
Insertion de l'identifiant d'un billet dans le nom d'une classe CSS
Dans le fichier list.php ou dans le fichier post.php, sont affiché les informations relative aux billets. Ces informations sont encapsulées dans un bloc DIV. Un simple examen du code XHTML généré, nous permet de voir qu'un classe CSS 'post' est attribuée à ce bloc. Rien n'interdit d'attribuer une deuxième classe à ces blocs ou un identifiant.
Exemple dans post.php :
remplacer <div class="post"> par (pour avoir un id par billet ) <div class="post" id="post<?php dcPostID(); ?>" > ou par (pour avoir une classe par billet ) <div class="post" post<?php dcPostID(); ?>" >
Reste à automatiser un peu la partie administration et le tour sera joué.
Aprés ce n'est que cosmétique;
Commentaires
Excellent, le code final est exactement ce que je veux (auparavent, j’avais envisagé de modifier la structure de mes billets pour leur mettre un div id="le numero", le tout en manuel. Je sentais bien que l’on pouvait faire mieux.
David LatapieEncore merci
Je viens de penser à une méthode combinant le meilleur des deux
David Latapie- la méthode 2 permet d’avoir une CSS à la demande
- la méthode 3 permet de n’appliquer que les styles d'un billet
Proposition :
méthode 4 : appel CSS par PHP comme pour la méthode 2 mais qui n’appelle que le contenu du billet (par exemple, en faisant une corrélation entre id du billet et #postid dans la CSS et en ne chargeant dans le billet final que les entrées commençant par #postid.
- Avantage :
-- c'est véritablement de la CSS embarquée
-- pas de CSS embarquée kilométrique
- Inconvénient :
-- ben faut le coder…
Qu'en penses-tu ? Ou bien une intégration dans DotClear 2 ?
J'avais dans le temps essayé de généré les CSS via un petit script PHP, ça n'a rien de difficile. Le problème survenait lors de l'utilisation. C'est le cache du navigateur qui était en cause. Soit le CSS était appelé toujours pareil: le cache n''était pas rafraîchie, et donc les modification CSS d'une page à l'autre n'était pas prise en compte. Soit le CSS était appelé via une URL avec paramètre et là, on perdait tous les avantage du cache. Le CSS étant généré lors de chaque appel, le serveur s'en trouvait surchargé.
JérômeMais il doit bien exister une solution viable et fiable.
Historique de ma recherche sur la question : tag CSS:embarquée Pour ceux qui se demandent à quoi servent les CSS embarquées : Ne pas encombrer la CSS principale de multiples styles qui ne seront utilisés qu’un seule fois. Ce problème...
Enfin des CSS embarquées dans DotClear ! (Empyrée)take peaceful living people and makes their RV's a maximum security prison with restrictions, stipulations and rules-rules-and more rules
North Face Outlets