• 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;