Dotclear a besoin de vous

Je ne vais pas vous présenter Dotclear, si vous ne connaissez pas encore bien que lisant ce blog, je ne peux plus rien pour vous.

L’équipe de ce projet open source que j’affectionne particulièrement lance un appel aux dons pour pouvoir continuer à exister en totale autonomie financière et assurer la pérennité de leurs projets actuels et futurs.

Et ils ne sont pas gourmands, ils ont besoin d’un budget de fonctionnement d’à peine 2000 euros par an :

La semaine dernière, avec l’équipe et les modérateurs du forum, nous avons fait le choix de ne plus faire dépendre ce projet d’une entreprise car même si c’est confortable, ça présente des limites et des contraintes…

Le calcul est assez simple, afin de louer un serveur dédié, payer les noms de domaine et proposer de nouveaux services, nous avons besoin de 2000 euros par an.

C’est donc plus que jamais le moment de faire un don au projet. Évidemment, rien ne vous y contraint, rien ne changera quant à la gratuité de Dotclear mais si vous souhaitez nous soutenir, voici une première façon de le faire.

Olivier : Dotclear a besoin de vous, première partie

Le lien pour faire votre don pour Dotclear.

Moi, c’est fait.

Sortie officielle de Dotclear 2

Et voila, c’est fait, le bébé est là, la gestation fut longue, trop longue je pense, mais Dotclear 2 est enfin lancé.

Bon, vous êtes probablement déjà au courant, mais comme j’ai toujours parlé des évolutions dotclear, je me devait de faire un billet sur le sujet.

Les toutes premières lignes de Dotclear 2 ont été écrites il y a 1040 jours. On compte aujourd’hui plus de 2200 changements dans le code et 326 tickets fermés. Durant ce temps, la documentation a vu le jour, puis, au début de cette année, Dotaddict avec ses dépôts de thèmes et de plugins.

1040 jours qui n’auront pas toujours été de tout repos, dire que nous avons traversé de fortes périodes de doute est un euphémisme. Mais qu’importe, nous y sommes, la version 2.0 est là, elle fonctionne admirablement bien et c’est peu dire que nous en sommes très fiers…
Olivier : Sortie de Dotclear 2.0

Je vais très probablement faire mon choix de migration au mois d’aout entre dotclear 2 et WordPress 2.6. Rien n’est encore fixé il va juste falloir que je prenne le temps de bien étudier le produit.

Encore bravo et merci à la communauté Dotclear.

Solution au problème des URLs dans la fonction Billet suivant/précédent de Dotclear

Voici donc la solution, attention, ce n’est pas très propre, je le rappelle, je ne suis pas développeur :

Il faut reprendre le code que j’avais fourni dans le billet précédent et le modifier ainsi :

  	$strReq = 'SELECT post_id, post_titre, post_dt, post_chapo, post_content, post_titre_url '.
  			'FROM '.$blog->t_post.' '.
  			'WHERE UNIX_TIMESTAMP(post_dt) '.$sign.' \''.$ts.'\' '.
  			$reqPlus.
  			'ORDER BY post_dt '.$blog->con->escapeStr($order).' '.
  			'LIMIT 0,1 '; 	if (($rs = $blog->con->select($strReq)) !== false) {
  		return $rs;
  	}

On a ajouté le SELECT sur post_titre_url, qui manquait cruellement à la fonction.

Ensuite on va créer une variable reprenant cette valeur, comme je suis d’humeur joyeuse, on va l’appeler $youpla et l’on va modifier la partie du script touchant à la variable $url qui fait appel à la variable $titre, en remplaçant la variable $titre par $youpla, ce qui nous donne la chose suivante :

		$id = $rs->f('post_id');
		$titre = $rs->f('post_titre');
		$date = $rs->f('post_dt');
		$ts = strtotime($date);
		$youpla = $rs->f('post_titre_url');
		$url = sprintf($blog->front_url['post'],date('Y',$ts),
		date('m',$ts),date('d',$ts),$id,$blog->str2url($youpla));

Ce qui donne au final le code complet suivant à ajouter dans le fichier prepend.php de votre thème :

  /** * Naviguer d'un billet a l'autre dans la meme categorie
  * @function dcPostNextInCat
  */
  function myGetNextID($ts,$dir=1,$cat=0) {
  	global $blog;
  	$ts = (integer) $ts;
  	$reqPlus = ''; 	if($dir > 0) {
  		$sign = '>';
  		$order = 'ASC';
  	} else {
  		$sign = '<';
  		$order = 'DESC';
  	}
  	if ($blog->pub_mode !== NULL) {
  		$reqPlus .= 'AND post_pub = '.$blog->pub_mode.' ';
  	}
  	if ($blog->lang !== NULL) {
  		$reqPlus .= 'AND post_lang = \''.$blog->con->escapeStr($blog->lang).'\' ';
  	}
  	if ($cat !== 0) {
  	   $reqPlus .= 'AND cat_id = '.$cat.' ';
  	}
  	$strReq = 'SELECT post_id, post_titre, post_dt, post_chapo, post_content, post_titre_url '.
  			'FROM '.$blog->t_post.' '.
  			'WHERE UNIX_TIMESTAMP(post_dt) '.$sign.' \''.$ts.'\' '.
  			$reqPlus.
  			'ORDER BY post_dt '.$blog->con->escapeStr($order).' '.
  			'LIMIT 0,1 '; 	if (($rs = $blog->con->select($strReq)) !== false) {
  		return $rs;
  	} else {
  		$blog->setError('MySQL : '.$blog->con->error(),2000);
  		return false;
  	}
  }
  function dcPostNextInCat($dir,$s='%1$s %2$s %3$s') {
  	global $blog;
  	global $news;
  	$rs = myGetNextID($news->getTS(), $dir, $news->f('cat_id'));
  	if (!$rs->isEmpty())
  	{
		$id = $rs->f('post_id');
		$titre = $rs->f('post_titre');
		$date = $rs->f('post_dt');
		$ts = strtotime($date);
		$youpla = $rs->f('post_titre_url');
		$url = sprintf($blog->front_url['post'],date('Y',$ts),
		date('m',$ts),date('d',$ts),$id,$blog->str2url($youpla));
  		
  		if ($rs->f('post_chapo') != '') {
  			$desc = strip_tags($rs->f('post_chapo'));
  		} else {
  			$desc = util::cutString(strip_tags($rs->f('post_content')),150).'...';
  		}
  		printf($s,$id,$titre,$url,$desc);
  	}
  	else {
  	printf('< h5 >Vous êtes sur le dernier article de la rubrique< /h5 >< p >Le prochain article est, probablement, en cours de rédaction.< /p >< p >Cordialement,< br / >Aymeric Jacquet< /p >');
  	}
  }

N’oubliez pas de personnaliser le texte de remplacement à la fin du code.

Et voila, maintenant nos liens vers les articles précédents et suivants sont bien les liens réels des articles et non plus le titre inséré en lien.

Dotclear 2.0 RC2 est dans les bacs

Oui, je sais, je suis en retard (un poil débordé en ce moment), oui cette information sent le réchauffé, oui cet article n’a pour seul but que de donner des tonnes de backlinks au Site de Dotclear 1 et Dotclear 2, car Le CMS orienté gestion de blogs Dotclear, c’est bien, mangez-en.

Pour plus d’information, rendez-vous sur le blog dotclear pour lire l’article d’Olivier sur le sujet : Dotclear 2.0 RC2.

Il y a personnellement une ligne qui m’a beaucoup fait rire :

« Je souhaite que mon blog soit indexé mais pas archivé par les moteurs de recherche et archiveurs ».
Olivier : Dotclear 2.0 RC2

Dis moi, Olivier, ça a un rapport avec ce commentaire sur le billet Wikio scrap le contenu html ?

Astuce dotclear 1 : billet suivant – précédent de la catégorie

Code avancé pour gérer les billets suivant/précédents au sein d’une catégorie :

Je me suis basé sur l’astuce suivante fournie dans le site le petit dotclear illustré : Billet précédent, billet suivant du blog/de la catégorie.

Et voici nouveau code que je vous propose pour le fichier prepend.php :

  /** * Naviguer d'un billet a l'autre dans la meme categorie
  * @function dcPostNextInCat
  */
  function myGetNextID($ts,$dir=1,$cat=0) {
  	global $blog;
  	$ts = (integer) $ts;
  	$reqPlus = ''; 	if($dir > 0) {
  		$sign = '>';
  		$order = 'ASC';
  	} else {
  		$sign = '<';
  		$order = 'DESC';
  	}
  	if ($blog->pub_mode !== NULL) {
  		$reqPlus .= 'AND post_pub = '.$blog->pub_mode.' ';
  	}
  	if ($blog->lang !== NULL) {
  		$reqPlus .= 'AND post_lang = \''.$blog->con->escapeStr($blog->lang).'\' ';
  	}
  	if ($cat !== 0) {
  	   $reqPlus .= 'AND cat_id = '.$cat.' ';
  	}
  	$strReq = 'SELECT post_id, post_titre, post_dt, post_chapo, post_content '.
  			'FROM '.$blog->t_post.' '.
  			'WHERE UNIX_TIMESTAMP(post_dt) '.$sign.' \''.$ts.'\' '.
  			$reqPlus.
  			'ORDER BY post_dt '.$blog->con->escapeStr($order).' '.
  			'LIMIT 0,1 '; 	if (($rs = $blog->con->select($strReq)) !== false) {
  		return $rs;
  	} else {
  		$blog->setError('MySQL : '.$blog->con->error(),2000);
  		return false;
  	}
  }
  function dcPostNextInCat($dir,$s='%1$s %2$s %3$s') {
  	global $blog;
  	global $news;
  	$rs = myGetNextID($news->getTS(), $dir, $news->f('cat_id'));
  	if (!$rs->isEmpty())
  	{
  		$id = $rs->f('post_id');
  		$titre = $rs->f('post_titre');
  		$date = $rs->f('post_dt');
  		$ts = strtotime($date);
  		$url = sprintf($blog->front_url['post'],date('Y',$ts),
  		date('m',$ts),date('d',$ts),$id,$blog->str2url($titre));
  		
  		if ($rs->f('post_chapo') != '') {
  			$desc = strip_tags($rs->f('post_chapo'));
  		} else {
  			$desc = util::cutString(strip_tags($rs->f('post_content')),150).'...';
  		}
  		printf($s,$id,$titre,$url,$desc);
  	}
  	else {
  	printf('< h5 >Vous êtes sur le dernier article de la rubrique< /h5 >< p >Le prochain article est, probablement, en cours de rédaction.< /p >< p >Cordialement,< br / >Aymeric Jacquet< /p >');
  	}
  }

A insérer avant le ?> fermant du fichier prepend.php de votre thème.

Important : pour la partie <h5>… en bas du code, il s’agit d’un message personnalisé à afficher si on est sur le dernier article de la catégorie, pensez à créer votre propre texte et si vous utilisez des balises html retirez les espaces après les > et avant les >, ils ne sont là que pour éviter le formatage hrml dans mon bilet dotclear. ;)

Ensuite, dans votre fichier post.php, insérez les lignes suivantes, en fonction de l’endroit ou vous voulez afficher ces éléments :

<div id="avantapres">
<h3>Autres articles de la rubrique : <a href="<?php dcPostCatURL(); ?>/" title="Rubrique <?php dcPostCatTitle(); ?>"><?php dcPostCatTitle(); ?></a></h3>
	<div class="artprecedent">
	<h4>Billet précédent :</h4>
	<?php dcPostNextInCat(-1,'<h5><a href="%3$s">%2$s</a></h5><p>%4$s</p>'); ?>
	</div>
	<div class="artsuivant">
	<h4>Billet suivant :</h4>
	<?php dcPostNextInCat(1,'<h5><a href="%3$s">%2$s</a></h5><p>%4$s</p>'); ?>
	</div>
</div>

Pour ma part, j’ai choisi de l’insérer juste avant le <div id= »comments »>.

Attention : ce code est parfaitement adaptable à vos besoins, pour ma part, j’ai privilégié un balisage avancé pour faire un habillage en deux colonnes géré via la feuille de style CSS, au besoin, n’hésitez pas à demander si vous avez des problèmes de mise en forme.

L’habillage CSS correspondant sur l’AJblog est le suivant :

#avantapres {background:#F5F5F5;padding:10px;}
#avantapres h3 {color:#5D5D5D;padding:0 0 5px 0;margin:0 0 5px 0;border-bottom:1px solid #A4A4A4;}
.artsuivant, .artprecedent {width:230px;text-align:justify;font-size:0.9em;}
.artsuivant {float:right;}
.artprecedent {float:left;}

A vous de le personnaliser en fonction de vos besoins.

Pour le rendu, c’est simple, c’est juste en dessous de cet article.

Ps : pour les coins arrondis, je triche, j’utilise jQuery.

Edit : si vous utilisez des urls personnalisées ne correspondant pas forcément au titre du billet, vous trouverez la solution sur ce billet : Solution au problème des URLs dans la fonction Billet suivant/précédent de Dotclear

Relooking extrême du blog

Si vous n’avez rien vu, voici ce qui a été modifié :

  • Les titres des billets : passés en Police de caractères Georgia et en tout majuscules, ils me plaisent plus comme ça et je les trouve plus clairement identifiables.
  • Le formulaire de commentaires : exit les fonds striés estampillés web2.0 que je n’ai jamais aimé pour un formulaire plus sobre et que je pense plus lisible.
  • Les rétroliens : ils passent tout en bas de la page d’articles, de façon à mieux mettre en avant les commentaires que je trouve personnellement plus importants.
  • Les citations : ça, ça fait déjà quelques temps que je les ai modifiées, maintenant je les trouve visibles et à mon goût.
  • Le corps des articles : Ca va faire plaisir à Florent.V, j’ai uniformisé les marges des titres et des paragraphes pour éviter l’effet d’escalier.
  • Le pied de page : Retouche des listes de billets, travail sur le nuage de tags pour le rendre plus exploitable (et il y a encore du travail).
  • Formulaires multiples et divers (contact, envoyer à un ami…) : début d’uniformisation avec le formulaire de commentaires.
  • Les liens : retrait de la couleur bleu, vieux reliquat d’un ancien thème, le temps de trouver une solution qui me convienne.
  • Flux RSS : Ajout par défaut de la catégorie dans le titre du billet ainsi que quelques informations complémentaires, mais je vais revenir dessus dans un futur billet.

C’est tout pour le moment, mais c’est déjà pas mal.

Donc, comme toujours, si vous avez des critiques, des conseils, etc. Quand on est le nez dans un design, on ne se rend pas toujours compte des détails gênants ou améliorations possibles qui peuvent servir à l’utilisateur final.

Analyse assez complète de Dotclear 2 RC1

Bon, vous savez, probablement, toutes et tous maintenant que la version Dotclear 2 RC1 (Release candidate soit version quasi définitive) est sortie, mais savez vous que l’hyperactif Bruno Bichet de CSS4Design en a fait une analyse assez poussée ? Non ? Et bien, c’est par là :

La première Release Candidate de Dotclear 2 vient de sortir après une longue gestation qui a nuit à l’image de cette solution de blogging pourtant 100% française, codée dans les règles de l’art et respectueuse des standards du web.
On dit que tout vient à point à qui sait attendre… Je suis sûr qu’une partie de ceux qui n’ont pas attendu gagnerait à étudier de près cette nouvelle version !
Pour ma part, après avoir testé la bêta 6, je ne m’attendais pas à de grosses surprise avec cette RC1. Et pourtant les surprises sont de tailles et pourraient bien faire de Dotclear 2 un WordPress killer dès la prochaine rentrée des classes. Bon, je sais que la dcTeam n’aime pas que l’on compare les CMS entre eux, mais il faut se rendre à l’évidence : le blogueur aime savoir qu’il utilise le nec plus ultra en matière de blogging et est donc à l’affût de toutes les informations qui pourraient le conforter dans son choix ou le faire changer d’avis… Magnéto :
Bruno Bichet : Dotclear 2.0 RC1 à la loupe (WordPress killer inside).

Du beau travail, on voit qu’il n’a que ça à faire de ses journées. ;)

Spams involontaires suite à tests sur le plugin CommentMail

Sébastien Delorme vient de m’indiquer qu’il recevait de nombreux messages de notification de nouveaux commentaires pour les billets auxquels il s’était abonné.

Il s’agit d’un problème lié à ma nouvelle installation du plugin commentMail et des manipulations nécessaires pour le faire fonctionner au travers de Spamplemousse et Spamclear.

Les personnes ayant eu des abonnements aux commentaires d’anciens billets reçoivent donc des notifications de nouveaux commentaires qui en fait ne sont que des tentatives de Spams.

Spamplemousse et Spamclear les empêchent d’être publiés sur le blog, mais vous êtes quand même notifiés de ces nouveaux commentaires, ce qui entraine le spam de vos boîtes email.

Je viens donc de désinstaller le plugin CommentMail et de supprimer toutes les modifications que j’avais effectué sur les deux antispams, normalement, vous ne devriez plus être inquiétés.

Encore désolé pour ce désagrément.

Besoin d’aide pour faire fonctionner le plugin Dotclear CommentMail sur ce blog

Parce que c’est pas que ça commence à me chauffer, mais un peu.

Pour ceux qui ne connaissent pas, CommentMail est un plugin créé à l’initiative d’Eric Dupin du Presse Citron, et permettant de créer des notifications de nouveaux commentaires par email sur abonnement.

Le plugin a bien fonctionné ici à une époque, mais depuis, le blog a connu de nombreux changements, dont l’installation de divers antispams (spamplemousse et spamclear) et un passage à dotclear 1.2.7 (tiens, au passage, la version 1.2.8 est sortie).

Depuis, rien, nada, impossible de recevoir les emails de notification, et j’ai testé diverses manipulations que l’on trouve à droite et à gauche :

Donc si un gentil codeur passe par là et à envie d’obtenir la reconnaissance éternelle de toute la communauté dotclear 1 (et la mienne au passage), qu’il fasse signe et me dise ce dont il a besoin pour faire fonctionner ce satané plugin.

Une landing page dotclear 1 pour vos visiteurs google

Voici le premier billet sur la série SEO pour dotclear. Nous parlerons de landing page. Les quelques lignes de code que je vais vous fournir proviennent d’une recherche personnelle sur ce blog, et adaptée depuis peu sur le blog d’emob. Nicolas à d’ailleurs rédigé un article plus que complet sur les landing page, pour ceux qui souhaiteraient en savoir un peu plus ! Pour les quelques lecteurs que nous aurions en commun, les fameuses sources sont donc dans la suite, avec quelques explications.
Wilfried (adaero) : SEO dotclear // landing page – Adaero.fr

Une landing page, pour quoi faire ?

En résumé, une landing page vous permet de fournir à vos visiteurs un contenu personnalisé en fonction de leur origine (lien dans un autre site, requête dans un moteur de recherche, etc…). Ca vous donne donc les moyens d’accueillir votre visiteur d’une façon un peu personnalisée tout en mettant en avant certaines fonctionnalités et certains contenus clés du site/blog.

Et il est bien ce script de landing page Dotclear ?

Il existe un plugin spécifique pour WordPress, mais je n’avais encore rien trouvé pour Dotclear, c’est maintenant chose faite avec le script de Wilfried du blog adaero, qu’il en soit 1000 fois remercié.

Quelques petits bugs dans les résultats, mais rien de bien méchant, et comme je le dis en commentaire sur son blog, si ça fonctionne sur la majorité des requêtes, c’est un plus indéniable, donc, à prendre.

Attention : le script demande de toucher à un fichier du moteur Dotclear en lui même et à votre base de données, donc suivez vraiment à la lettre les indications données et ne le faites que si vous êtes à l’aise avec ces opérations.