The Wayback Machine - https://web.archive.org/all/20060303233641/http://www.dotclear.net:80/trac/wiki/DotClear/fr/Bidouiller/EnVrac

DotClear

Astuces pour DotClear

Sommaire

  • Changer le lien "Lire la suite"
  • Inverser l'ordre des billets
  • Proposer une case à cocher pour ouvrir les liens dans une nouvelle fenêtre
  • Supprimer la mention de l'auteur
  • Insérer un compte à rebours en jours jusqu'à une date donnée
  • N'afficher qu'une catégorie sur la page d'accueil
  • Exclure une catégorie de la page d'accueil
  • Ouverture d'un lien dans une nouvelle fenêtre (javascript)
  • Enlever les références aux trackbacks et/ou aux commentaires
  • Remplacement des titres en images

Modifier "Lire la suite"

Mots clés : public, billet, suite, modifier

Dans le fichier list.php, chercher la ligne

<?php dcPostAbstract(); ?>

et la remplacer par :

<?php dcPostAbstract('%s','<p><a href="%s">Le texte que je veux</a></p>'); ?>

Si vous souhaitez en profiter pour appliquer un style différent de celui des liens courants, vous pouvez ajouter une classe dans la modification. Par exemple :

<?php dcPostAbstract('%s','<p class="suite"><a href="%s">La suite de l\'article</a></p>'); ?>

Vous pourrez ensuite donner des paramètres de style à .suite a dans la feuille de style de votre thème.

Inverser l'ordre des billets

Mots clés : public, billet, ordre

Objet : Sur la page d'accueil, présenter les billets du plus ancien (en haut) au plus récent (en bas).

Mise en oeuvre :

Au début de votre fichier template.php, ajouter ceci :

  if ($mode == 'home') {
    $news = $blog->getLastNews(dc_nb_post_per_page,$cat_id,'post_dt ASC');
    $news->setBlog($blog);
  }

Il est possible de façon similaire de modifier l'ordre pour les modes 'cat' et 'month'.


Ouvrir les liens dans une autre fenêtre

Mots clés : liens

Objet : Faire en sorte que les liens de la section "liens" (oui oui) s'ouvrent dans une nouvelle fenêtre.

Mise en oeuvre :

copyright : http://www.mee2.net/archives/2004/05/20/70-target-blank

L'astuce suivante a pour but d'afficher une case que l'utilisateur peut cocher si il souhaite que les liens exterieurs au site soient ouverts dans une autre fenêtre

Mettre ce qui suit dans un fichier scripts.js dans le repertoire de son theme :

// JavaScript targeters adapted from holovaty.com via padawan.info
function linksInNewWindow(a) {
var b=a?"site":"_self";
var c=document.links;
for(var i=0;i<c.length;i++) {if(c[i].href.search("site.com")==-1) c[i].target=b};
var date=new Date();
date.setTime(date.getTime()+(14*24*60*60*1000));
document.cookie=a?"newwin=true; expires="+date.toGMTString()+";":"newwin=false;";
}

Et mettre dans le fichier template.php :

<script type="text/javascript" src="http://chemin/vers/le/scripts.js" charset="ISO-8859-1"></script>

Dans l'entête du fichier, et :

<label for="linksnewwin">Ouvrir les liens dans une nouvelle fenêtre</label>
<input type="checkbox" onclick="linksInNewWindow(this.checked);" onkeypress="linksInNewWindow(this.checked);" id="linksnewwin" />

A l'endroit où l'on veut placer la boite à cocher


Supprimer la mention de l'auteur

Mots clés : billet, auteur

Objet : Sur la liste des billets ou sur l'affichage d'un billet, ne pas faire apparaitre le nom de l'auteur. Utile pour éviter de surcharger l'affichage lorsque l'on est le seul auteur des billets d'un blog.

Mise en oeuvre :

Dans le fichier list.php de votre thème ou du thème default s'il n'existe pas pour votre thème, chercher la ligne :

<p class="post-info"><?php dcPostAuthor(); ?>,

et remplacer par :

<p class="post-info">
<!-- 
<?php dcPostAuthor(); ?>,
-->

puis répéter la même opération avec le fichier post.php de votre thème ou du thème default s'il n'existe pas pour votre thème.

Astuce rédigée par : Tortue GT


Insérer un compte à rebours en jours jusqu'à une date donnée

Mots clés : divers

Objet : Faire apparaître un compte à rebours jusqu'à une date donnée. Peut servir pour la sortie d'un film, un anniversaire particulier, ...

Mise en oeuvre :

Créer un fichier texte nommé countdown.php avec le contenu suivant :

<?php

function CountDownInDays($year, $month, $day) {

$newDate = mktime(0,0,0, $month, $day, $year);
$actDate = time();

$diffDate = ($newDate-$actDate);
$days = floor($diffDate / 24 / 60 / 60 );


return ($days + 1);
}
?>

Copier ce fichier dans le dossier contenant votre template (là ou se trouve le fichier template.php)

Dans le fichier template.php, là ou vous souhaitez faire apparaitre un compte à rebours, disons jusqu'au 13 mai 2005, insérez :

<?php include dirname(__FILE__).'/countdown.php'; ?>
<?php echo CountDownInDays(2005, 5, 13); ?>

Astuce rédigée par Tortue GT }}}

N'afficher qu'une catégorie sur la page d'accueil

Mots clés : home, catégorie, exclure

Objet : Faire en sorte de n'afficher que les billets appartenant à la catégorie de son choix en page d'accueil.

Mise en oeuvre :

Donc admettons que j'ai fait des catégories diverses et variés mais je ne veux que dotclear m'affiche que la catégorie Annonces sur la page d'accueil (vous changerez annonce par le nom de votre catégorie phare faites gaffe au respect des majuscules)

tout d'abord vous devez avoir un home.php voici un tres bon tut sur comment en obtenir un : http://petit.dotclear.net/pages/2004/12/02/27-creer-une-page-daccueil-differente

maintenant que vous avez un fichier home.php editez le et remplacez le par ca :

<?php $news = $blog->getLastNews(20,'Annonces','post_dt DESC'); //20 est le nombre de post que vous 
//voulez qu'il affiche et Annonces le texte a remplacer par votre catégorie phare ...


while ($news->fetch()) : ?>

    <div class="post">
        <?php dcDayDate('<p class="day-date">%s</p>'); ?>
       
        <h2 id="p<?php dcPostID(); ?>" class="post-title"><a
        href="<?php dcPostURL(); ?>"><?php dcPostTitle(); ?></a></h2>
       
        <p class="post-info">Par <?php dcPostAuthor(); ?>,
        <?php dcPostDate(); ?> &agrave; <?php dcPostTime(); ?>
        <span>::</span> <a href="<?php dcPostCatURL(); ?>"><?php dcPostCatTitle(); ?></a>
        </p>
       
        <div class="post-content" <?php dcPostLang(); ?>>
            <?php dcPostAbstract('%s'); ?>
        </div>
       
        <p class="post-info-co"><a href="<?php dcPostURL(); ?>#co"
        title="commentaires pour : <?php dcPostTitle(); ?>"><?php
        dcPostNbComments('aucun commentaire','un commentaire','%s commentaires');
        ?></a>
        <span>::</span> <a href="<?php dcPostURL(); ?>#tb"
        title="trackbacks pour : <?php dcPostTitle(); ?>"><?php
        dcPostNbTrackbacks('aucun trackback','un trackback','%s trackbacks');
        ?></a></p>
    </div>
<?php endwhile; ?>

Exclure une catégorie de la page d'accueil

Mots clés : home, catégorie, exclure

Objet : Faire en sorte que les billets appartenant à la catégorie de son choix n'apparaissent pas en page d'accueil.

Mise en oeuvre :

Donc admettons que j'ai fait des catégories diverses et variés mais que je ne veux que dotclear m'affiche la catégorie Pensebete sur la page d'accueil (vous changerez bien entendu Pensebete par le nom de votre catégorie à éviter, faites gaffe au respect des majuscules)

tout d'abord vous devez avoir un home.php voici un tres bon tut sur comment en obtenir un : http://petit.dotclear.net/pages/2004/12/02/27-creer-une-page-daccueil-differente

maintenant que vous avez un fichier home.php editez le et remplacez le par ca :

<?php 
    $request = $blog->SQL (" AND C.cat_libelle_url <> 'Pensebete' ", 'post_dt DESC', dc_nb_post_per_page);
    $news = $blog->con->select($request,'xblogpost'); 
    $news->setBlog($blog);

while ($news->fetch()) : ?>

    <div class="post">
        <?php dcDayDate('<p class="day-date">%s</p>'); ?>
       
        <h2 id="p<?php dcPostID(); ?>" class="post-title"><a
        href="<?php dcPostURL(); ?>"><?php dcPostTitle(); ?></a></h2>
       
        <p class="post-info">Par <?php dcPostAuthor(); ?>,
        <?php dcPostDate(); ?> &agrave; <?php dcPostTime(); ?>
        <span>::</span> <a href="<?php dcPostCatURL(); ?>"><?php dcPostCatTitle(); ?></a>
        </p>
       
        <div class="post-content" <?php dcPostLang(); ?>>
            <?php dcPostAbstract('%s'); ?>
        </div>
       
        <p class="post-info-co"><a href="<?php dcPostURL(); ?>#co"
        title="commentaires pour : <?php dcPostTitle(); ?>"><?php
        dcPostNbComments('aucun commentaire','un commentaire','%s commentaires');
        ?></a>
        <span>::</span> <a href="<?php dcPostURL(); ?>#tb"
        title="trackbacks pour : <?php dcPostTitle(); ?>"><?php
        dcPostNbTrackbacks('aucun trackback','un trackback','%s trackbacks');
        ?></a></p>
    </div>
<?php endwhile; ?>

Ouverture d'un lien dans une nouvelle fenêtre (en javascript)

<a href="http://votrelien.com" hreflang="fr" onclick="window.open(this.href,'_blank');return false;">Votre Lien</a>

Même résultat qu'un lien target="_blank" mais en gardant une compatibilité XHTML 1.0 Strict.

N'afficher que les billets de la langue par défaut à l'accueil

Afin de n'afficher que la langue par défaut à l'affichage initial du blog il suffit de remplacer dans le fichier prepend.php de votre theme ou du theme par defaut à la ligne 35 :

$lang = (!empty($_GET['l'])) ? $_GET['l'] : NULL;

par

$lang = (!empty($_GET['l'])) ? $_GET['l'] : dc_default_lang;

Enlever les "Aucun commentaire" ou "Aucun trackback" affichés sous chaque billet

La première chose à faire est de désactiver commentaires et/ou trackbacks dans les outils de l'interface d'admin en cliquant sur Configuration de DoctClear?. Il vous suffit de changer la valeur proposée dans "Permettre les commentaires" et/ou "Permettre les trackbacks".

Ensuite s'attaquer au code... Quelques fichiers sont à modifier : post.php, list.php et si le fichier est créé, home.php qui reprend les mêmes modifications que list.php.

post.php

si l'on veut enlever les trackbacks

<div id="trackbacks">
	<h3 id="tb">Trackbacks</h3>
	<?php if ($trackbacks->isEmpty()) : /* Message si aucune trackback */?>
		<p>Aucun trackback.</p>
	<?php endif; ?>
	
	<?php while ($trackbacks->fetch()) : /* Liste des trackbacks */
		// On met le numéro du trackback dans une variable
		$tb_num = $trackbacks->int_index+1;
	?>
		<p id="c<?php dcTBID(); ?>" class="comment-info">
		<span class="comment-number"><a href="#c<?php dcTBID(); ?>"><?php echo $tb_num; ?>.</a></span>
		Le <?php dcTBDate(); ?> à
		<?php dcTBTime(); ?>, de
		<strong><?php dcTBAuthor(); ?></strong></p>
		
		<?php /* on affiche le trackback */ ?>
		<blockquote>
		<?php dcTBContent(); ?>
		</blockquote>
	<?php endwhile; ?>
	
	
	<?php /*Le lien pour ajouter un trackback si ceux-ci sont autorisés*/ ?>
	<?php if (dcPostOpenTrackbacks() && dc_allow_trackbacks) : ?>
		<p>Pour faire un trackback sur ce billet :
		<?php echo dcPostTrackBackURI(); ?></p>
	<?php else: ?>
		<p>Les trackbacks pour ce billet sont fermés.</p>
	<?php endif; ?>
</div>

si l'on veut enlever les commentaires :

<div id="comments">
	<h3 id="co">Commentaires</h3>
	<?php if ($comments->isEmpty()) : /* Message si aucune commentaire */	?>
		<p>Aucun commentaire pour le moment.</p>
	<?php endif; ?>
	
	<?php while ($comments->fetch()) : /* Boucle de commentaires */
		// On met le numéro du commentaire dans une variable
		$co_num = $comments->int_index+1;
	?>
		<p id="c<?php dcCommentID(); ?>" class="comment-info">
		<span class="comment-number"><a href="#c<?php dcCommentID(); ?>"><?php echo $co_num; ?>.</a></span>
		Le <?php dcCommentDate(); ?> à
		<?php dcCommentTime(); ?>, par
		<strong><?php dcCommentAuthor(); ?></strong></p>
		
		<?php /* on affiche le commentaire */ ?>
		<blockquote>
		<?php dcCommentContent(); ?>
		</blockquote>
	<?php endwhile; ?>
	
	<h3>Ajouter un commentaire</h3>
	<?php if (dcPostOpenComments() && dc_allow_comments) : /* Si les commentaires sont permis */?>
		<?php if (dc_allow_comments) : /* Si les commentaires sont permis */?>
			<?php include dirname(__FILE__).'/form.php'; ?>
		<?php endif; ?>
	<?php else : ?>
		<p>Les commentaires pour ce billet sont fermés.</p>
	<?php endif; ?>
</div>

list.php

si l'on veut enlever les trackbacks

	<span>::</span> <a href="<?php dcPostURL(); ?>#tb"
	title="trackbacks pour : <?php dcPostTitle(); ?>"><?php
	dcPostNbTrackbacks('aucun trackback','un trackback','%s trackbacks');
	?></a>

si l'on veut enlever les commentaires :

<a href="<?php dcPostURL(); ?>#co"
	title="commentaires pour : <?php dcPostTitle(); ?>"><?php
	dcPostNbComments('aucun commentaire','un commentaire','%s commentaires');
	?></a>

Remplacer des titres en images

Suite à une recherche sur le web et une demande auprès d'Alex, je vous propose de découvrir les étapes à suivre pour mettre en place le remplacement des titres en images. Je tiens à rappeler que cela fut mis en place et intégré avec intelligence au sein du thème Tutti Frutti.

1. Placer dans le fichier prepend.php dans le répertoire du thème utilisé ou, s'il n'est pas présent dans celui-ci, dans le répertoire du thème default, juste avant la balise ?>, les 2 fonctions suivantes :

function myWordWrap($txt,$font,$size,$width)

{

// Définition du nombre de ligne de l'image

$nbre_ligne = 1;

   /*
       word-wrapper.  gets bounding box sizes for each word in a string, then 
       strings words together up to desired width. calls strpos and 
       imagettfbbox only once per word - so very fast. 
       this version reconcatenates the words with a <br> character where 
       the line break should be.
   */

   $txt.=" "; // guaranteed to find end of line
   $spaces=array();
   $wids=array();
   $i=0;

   while(true)

   {

       $j=strpos(substr($txt,$i)," ");

       if(!($j===false))

       {

           $spaces[]=$j+$i;

@           $bbox=imagettfbbox($size,0,$font,substr($txt,$i,$j+1));

           $left=($bbox[0]>$bbox[6])?$bbox[6]:$bbox[0];
           $right=($bbox[2]>$bbox[4])?$bbox[2]:$bbox[4];
           $wids[]=$right-$left;
           $i=$j+$i+1;

       }

       else    break;

   }

   $lastspace=-1;
   $cum=0;
   $t2="";

   for($i=0;$i<count($spaces);$i++)

   {

       if((($cum>0)&&($cum+$wids[$i])>$width)) // time for a line break

       {

           $t2.="\n";
           $nbre_ligne++;
           $cum=0;
           $i--;

       }

       else

       {

           // we'll always get at least one word (even if too wide) thanks to
           // ($cum>0) test above

           $t2.=substr($txt,$lastspace+1,$spaces[$i]-$lastspace);
           $cum+=$wids[$i];
           $lastspace=$spaces[$i];

       }
   }

   $image_created = array("$t2","$nbre_ligne");
   return $image_created;

}
 

function create_title($titre,$couleur_texte,$couleur_fond,$taille_texte,$chemin_police)

                {         

//              echo "Chemin police : $chemin_police";
               

//Définition de la largeur maximum de l'image générée

                $width_max = 500;
               

//Définition du nom de l'image en fonction du titre et des attributs passés dans la fonction

                //$titre_affiche = strtoupper($titre);

                $titre_affiche = $titre;
                $nom_image = md5($titre.$chemin_police.$taille_texte.$couleur_fond.$couleur_texte);
                $chemin_repertoire = $_SERVER['DOCUMENT_ROOT']."/".substr($GLOBALS['img_path'],1)."titres";

               

if(!file_exists($chemin_repertoire))

                {

@            mkdir($chemin_repertoire,0777) or die("Impossible de créer le répertoire d'image titre '$chemin_repertoire'");

                }

$chemin_image = $chemin_repertoire."/".$nom_image.".png";               

if(!file_exists($chemin_image))

                               {

                // Test de la taille de l'image et définition du nombre de ligne

                               $tableau = myWordWrap($titre_affiche,$chemin_police,$taille_texte,$width_max);

                               $titre_image = $tableau[0];
                               $nbre_ligne = $tableau[1];
                              

                // Calcul de la taille de l'image

@                            $taille_image = imagettfbbox($taille_texte,0,$chemin_police,"$titre_image");
                               $taille_image_largeur = (abs($taille_image[0])+abs($taille_image[2])+5);
                               if($taille_image_largeur > $width_max) $taille_image_largeur = $width_max;
                               $taille_image_hauteur = (abs($taille_image[6])+abs($taille_image[7])+2) * $nbre_ligne;
                              

                // Création du cadre d'image

                               $img = imagecreate($taille_image_largeur,$taille_image_hauteur);

                // Définition de la couleur du texte

                               $couleur_texte = hexdec(str_replace('#','',$couleur_texte));
                               $couleur_texte = imagecolorallocate($img,($couleur_texte & 0xFF0000) >> 16,($couleur_texte & 0x00FF00) >> 8,($couleur_texte & 0x0000FF));
                                              

                // Définition de la couleur du fond

                               $couleur_fond = hexdec(str_replace('#','',$couleur_fond));
                               $couleur_fond = imagecolorallocate($img,($couleur_fond & 0xFF0000) >> 16,($couleur_fond & 0x00FF00) >> 8,($couleur_fond & 0x0000FF));
                                              

                // Remplissage du fond de l'image avec la couleur définie avant

                               imagefill($img,0,0,$couleur_fond);
                                              

                // Ajout du texte, affichage ligne par ligne si le texte compporte plus d'une ligne

                               if($nbre_ligne > 1)

                                               {

                                               $titre_image = explode("\n",$titre_image);
                                               $i = 0;

                                               while($i != $nbre_ligne)
                                                               {
                                               imagettftext($img,$taille_texte,0,0,$taille_texte + (20*$i),$couleur_texte,$chemin_police,$titre_image[$i]);
                                                               $i++;
                                                               }
                                               }
                               else
                                               {
@                                            imagettftext($img,$taille_texte,0,0,$taille_texte,$couleur_texte,$chemin_police,"$titre_image");
                                               }
                              

// Création de l'image et écriture sur le serveur

                               @imagepng($img,$chemin_image) or die ("Impossible d'écrire dans le répertoire d'images...");
                               imagedestroy($img);
                               }

$chemin_image = $GLOBALS['img_path']."titres/".$nom_image.".png";

if(file_exists($_SERVER['DOCUMENT_ROOT'].$chemin_image))

                {
                $taille_image = getimagesize($_SERVER['DOCUMENT_ROOT'].$chemin_image);
                $taille_image_largeur = $taille_image[0];
                $taille_image_hauteur = $taille_image[1];

    echo "<span style=\"display:none\">$titre</span><img src=\"".$chemin_image."\" style=\"border:0px;\" alt=\"$titre\" />"; //width:".$taille_image_largeur."px;height:".$taille_image_hauteur."px;\" /></span>";
                }
else
                {
                echo $titre;
                }
}


2. Choisir la police (exemple : ta_police.ttf) et la copier dans le répertoire du thème utilisé.

3. Dans le fichier list.php du thème utilisé ou dans celui du thème default, remplacer la ligne 31 (normalement) :

href="<?php dcPostURL(); ?>"><?php dcPostTitle(); ?></a></h2>

Par :

href="<?php dcPostURL(); ?>"><?php create_title($GLOBALS['news']->f('post_titre'),"#ccccccc","#FFFFFF","12",$_SERVER['DOCUMENT_ROOT'].$GLOBALS['theme_uri'].$GLOBALS['__theme']."/ta_police.ttf");?></a></h2>

4. Dans le fichier post.php du thème utilisé ou dans celui de default, remplacer ligne 25 (normalement) :

<h2 class="post-title"><?php dcPostTitle(); ?></h2>

Par :

<h2 class="post-title"><?php create_title($GLOBALS['news']->f('post_titre'),"#cccccc","#FFFFFF","12",$_SERVER['DOCUMENT_ROOT'].$GLOBALS['theme_uri'].$GLOBALS['__theme']."/ta_police.ttf"); ?></h2>

5. Utiliser le code ci-dessous pour appeler une image à la place d'un titre dans ton template.php

<?php create_title("Ton Texte blablabla","#cccccc","#ffffff","12",$_SERVER['DOCUMENT_ROOT'].$GLOBALS['theme_uri'].$GLOBALS['__theme']."/ta_police.ttf");?>

Avec comme valeurs dans les exemples ci-dessus #cccccc la couleur du texte, #FFFFFF la couleur de fond, 12 la taille du texte, et ensuite le chemin de la police de caractères (nommé ta_police.ttf ci-dessus).

6. Admirer le travail !

PROPOSEZ UNE ASTUCE / SAVOIR-FAIRE

Add comment