Blog de Geeek, le blog geek par excellence par Ludovic Toinel ...

Balise - dotclear2

Fil des billets - Fil des commentaires

dimanche 25 mai 2008

Astuce Dotclear #2 : Comment poster des articles dans Dotclear2 depuis Flickr ?

flickr.gif

Et bien oui, il est tout à fait possible de publier des images sur son blog Dotclear2 depuis Flickr.

Dotclear2 possède à cet effet une interface Webservice XML/RPC compatible "Movable Type", qui permet d'administrer son blog à distance depuis une application tierce.

Activation du Webservice

Pour activer cette interface Webservice, il suffit simplement de se rendre sur la page d'administration de son blog et de cocher la case associée :

dotclear_xmlrpc_snap1.png


Ensuite, recopiez l'URL du service qui s'affichera en bas de la page d'administration :

dotclear_xmlrpc_snap2.png


Interconnexion Flickr-Dotclear2

Enfin, connectez-vous à Flickr, et allez sur la page "Vous->Votre Compte->Extensions de Flickr"


Cliquez sur "ajouter un blog" et à la question "De quel type de weblog disposez-vous ?" répondez "Blog Movable Type".

dotclear_xmlrpc_snap4.png


Dans le formulaire, coller l'URL que vous avez copiez précédemment et renseignez le login et le mot de passe qui vous permettent de vous connecter à votre blog Dotclear2 :

dotclear_xmlrpc_snap3.png


Si une erreur apparait en vous disant que votre blog n'existe pas, alors éditez le fichier "inc/core/class.dc.xmlrpc.php" et remplacez a ligne :

$this->blog_id = $blog_id

Par ceci :

$token = explode("/", $blog_id);
$this->blog_id = $token[0];

Cela permet d'ignorer l'extension d'URL fourni par Flickr et qui provoque une erreur de reconnaissance du blogId.

Publication de photos

Ensuite depuis n'importe quelle photo "publique" sur Flickr, vous avez la possibilité la publier la photo directement sur votre blog juste avec un simple clique.

dotclear_xmlrpc_snap5.jpg

Ce n'est pas beau tout ça ? :-)

mardi 13 mai 2008

Widget Nabaztag pour Dotclear2

dotclear_logo.png

Voici un petit billet destiné à aider les utilisateurs du plugin Nabaztag pour Dotclear2.

Suite aux évolutions réalisées par Violet sur l'API Nabaztag, le plugin Nabaztag pour Dotclear2 en version 1.0 ne fonctionne plus correctement.

Pour qu'il fonctionne à nouveau, il suffit de remplacer la ligne 48 du fichier _public.php du plugin :

if( stristr($nabaztagReply, 'SEND') === false || stristr($nabaztagReply, 'NOTSEND') === true )

par la ligne suivante :

if( stristr($nabaztagReply, 'SENT') === false || stristr($nabaztagReply, 'NOTSENT') === true )

La modification parait tout simple, mais il fallait la trouver ;-)

L'auteur du plugin a été prévenu.

jeudi 1 mai 2008

Dotclear 2.0 RC1 : La délivrance !

dotclear_logo.png

Et bien voilà :-)

Après plusieurs mois d'attente, la RC1 de Dotclear2 vient d'être officiellement publiée :

http://www.dotclear.net/blog/post/2008/05/01/Dotclear-20-RC1

dimanche 13 avril 2008

Astuce #1 pour Dotclear2 : Taille des images tu optimiseras

dotclear2 astuce

En fonction de votre thème, la colonne qui contient les articles peut être plus ou moins large.

Afin d'avoir des images au format "Medium" qui remplissent la largeur de vos articles, il est possible de positionner la taille des images "Medium" dans la console d'administration de Dotclear2 au niveau de la rubrique "Paramètres du blog".

dotclear2_astuce1.png

Ceci indiquera à Dotclear que vos images "Medium" doivent avoir une largeur de 448 pixels. Lorsque vous posterez une image de 800 pixel de large par exemple, Dotclear vous produira une image "Medium" de 448 pixels de large et vous la mettra à disposition via le "Gestionnaire de média".

mardi 8 avril 2008

Dotclear 2 RC sortira le 1er Mai 2008

dotclear_logo.png

Après de nombreux mois d'attente, la nouvelle est officiellement annoncée :

http://www.dotclear.net/blog/post/2008/04/05/En-mai-fais-ce-quil-te-plait

dimanche 6 janvier 2008

Mise à jour du Widget Google Analytics pour Dotclear2

dotclear.png

C'est avec l'accord de son auteur Nicolas Merouze, que je viens de mettre à jour le widget Google Analytics pour Dotclear 2. Ce widget permet d'inclure avec un simple drag & drop le code Javascript de Google Analytics sur votre blog Dotclear2.

widget_google_analytics.gif

Cette version 1.2 prend en compte les nouveaux scripts Javascript fournis par Google Analytics.

mardi 18 décembre 2007

Dotclear : Ajouter un lien de partage Facebook sur votre blog

dotclear,facebook

Voici une petite astuce pour ajouter un lien "Facebooker" à vos articles sur Dotclear2. Ce lien permet à vos visiteurs de communiquer l'article qu'ils trouvent intéressant à leur communauté Facebook.

1) Ouvrez le fichier home.html de votre thème.

2) Trouvez la ligne :

<p class="post-info-co">

3) Ajouter la ligne suivante juste en dessous :

<a href="http://www.facebook.com/share.php?u={{tpl:EntryURL}}" class="facebook_link">Facebooker</a>

4) Ouvrez la feuille de style de votre thème (souvent appellée style.css)

5) Ajoutez ce style dans la feuille de style le style suivant :

.facebook_link {
        background: transparent url(img/facebook.gif) no-repeat 0 50%;
}

6) Ajoutez l'icone Facebook.gif en attachement de ce billet dans le répertoire "img" de votre thème.

That's all !

Si vous souhaitez offrir la possibilité à vos visiteurs de partager l'article sur d'autres réseaux, je vous conseille l'excellent plugin "Partager".

lundi 3 décembre 2007

Qui dit week end pluvieux dit nouveaux plugins Dotclear2 !

Le week-end pluvieux que nous avons eu a permis à quelques plugins Dotclear 2 de naître.

Parmi la liste des nouveaux arrivants :

  • Live Counter , un plugin très pratique qui permet d'afficher en direct le nombre de personnes connectées sur votre blog. Il ressemble au plugin Connected de Dotclear 1 que vous connaissez peut être.

page_livecounter.gif

  • MenuFreshy, un plugin qui permet d'ajouter un menu horizontal en dehors de la sidebar.

page_menufreshi.gif

  • HTTP Redirect, un plugin qui permet de rediriger facilement vos billets vers une autre page Web.

page_httpredirect.gif

  • MultiFeeds, un plugin qui permet de visualiser l'ensemble des billets d'une plateforme multiblog qui sont publiés. Pratique pour surveiller l'ensemble des nouveaux articles.

page_multifeed.gif

  • Lite Box, Un visionneur d'images léger et performant basé sur la première version de Lightbox.

page_lightbox.gif


Ce qui nous fait 5 nouveaux plugins dans le week-end, bravo à Sacha pour les trois plugins ;-)

Vous pouvez suivre l'actualité des nouveaux plugins Dotclear 2 depuis cette parge Web :

http://plugins-dotclear.geeek.org/

vendredi 23 novembre 2007

Plugin Dotclear2 : GoogleSpy

dotclear,plugin,google

Voici un nouveau plugin pour Dotclear2 qui a comme objectif de proposer des articles contenant un ou plusieurs des mots clefs utilisés par votre visiteur lors de sa précédente recherche dans Google.

Ce plugin permet de diminuer le nombre de rebonds et permet de garder vos nouveaux visiteurs plus longtemps sur votre blog. Ce plugin est compatible Dotclear2 beta 7.

Comment ça marche ?

Pour voir ce que donne ce plugin, allez sur cette page :

http://www.google.fr/search?q=plugin+googleSpy

Et cliquez sur le premier lien. Vous devriez tomber sur ce billet normalement. Vous verrez une liste de propositions d'articles en dessous du billet portant la mention "A Lire".

Télécharger le plugin

Voici les fichiers de ce plugin :

Installer le plugin

Après avoir installé ce plugin, éditez le fichier "post.html" de votre thème Dotclear2 et insérez le tag :

{{tpl:googleSpyPurposePosts num_links="6" num_keywords="3" title="A lire : " description="ce que vous voulez"}}

En dessous de :

<div class="post-content">{{tpl:EntryContent}}</div>
  • num_links = Le nombre billets à rechercher dans la base.
  • num_keywords = Les 'n' premiers mots clefs google à utiliser dans la recherche d'article, plus ce chiffre est grand plus le temps d'affichage de la page peut devenir important.
  • title = Le titre à positionner au dessus de la liste de liens.
  • description = Le texte qui s'affichera en dessous du titre (title).

Liste des mises à jour :

v0.1 :

  • Première release.

v0.2 :

  • Ajout d'un filtre sur les mots clefs de recherche.
  • Externalisation des paramètres.
  • Modification de la requête SQL.

v0.3 :

  • Mise en minuscule des mots clefs de recherche.
  • Correction de la requète SQL.

v0.4 :

  • Correction du split sur la chaine de caractères qui était incorect.
  • Correction du filtre sur les mots clefs.
  • Ajout de mots anglophone dans le filtre.
  • Ajout du paramètre "description"

v0.5 :

  • Correction de l'encodage du descriptif du plugin
  • Ajout d'une page d'aide dans le panneau d'administration de Dotclear2
  • Prise en compte de vos patch (numlink, vérification de la présence du REFERER, multi-blog).

v0.6 :

  • Gestion de Google Blogsearch

dimanche 18 novembre 2007

Optimisation de Dotclear 2 Beta 7 : La face cachée de la base de données

dotclear2,sql,performance

Après mon précédent article concernant quelques pistes d'optimisations de Dotclear 2, voici un nouvel article qui liste quelques pistes d'optimisations pour la base de données de Dotclear2 beta 7.

Remarque : Je tiens à mettre l'accent sur le "beta 7" car ces optimisations ne seront pas forcément applicables à la beta 8 ...

1) Tracker les requêtes SQL les plus lentes

Dotclear2 étant développé très proprement (merci à l'équipe de développement de Dotclear2), toutes les requêtes SQL passent par un composant qui se nomme "dblayer", qui est une couche d'abstraction à l'accès de la base de données.

inc/clearbricks/dblayer/

Cette couche permet à Dotclear2 de communiquer proprement avec sa base de données, celle-ci est composée d'une classe php "dblayer.php" et de plusieurs autres classes spécifiques aux bases de données que Dotclear 2 supporte.

Après une étude rapide du fichier dblayer.php, on se rend très vite compte que les requêtes de consultation "select" passent par la méthode "select()" de la classe dbLayer présent dans le fichier.

Pour connaitre la liste des requêtes SQL les plus longue, il suffit donc de tracer les requêtes depuis cette méthode ;-)

Voici la méthode "select()" avant patch:

public function select($sql)
        {
                $result = $this->db_query($this->__link,$sql);

                $this->__last_result =& $result;

                $info = array();
                $info['con'] =& $this;
                $info['cols'] = $this->db_num_fields($result);
                $info['rows'] = $this->db_num_rows($result);
                $info['info'] = array();

                for ($i=0; $i<$info['cols']; $i++) {
                        $info['info']['name'][] = $this->db_field_name($result,$i);
                        $info['info']['type'][] = $this->db_field_type($result,$i);
                }

                return new record($result,$info);
        }

Et la voici après patch :

public function select($sql)
        {
                $starttime = microtime();
                $result = $this->db_query($this->__link,$sql);
                $endtime = microtime();

                $tracesql = false;
                $totaltime = $endtime - $starttime;

                // Si la requête est plus longue que 0.5 secondes
                if ($totaltime > 0.5 ){
                        $tracesql = true;
                }

                // On trace la requête SQL
                if ($tracesql){

                        $fp = fopen("/tmp/db.log", "a");

                        $data = $totaltime . ";" . $sql . "\n";

                        // Write the data to the file
                        fwrite($fp, $data);

                        // Close the file
                        fclose($fp);
                }

                $this->__last_result =& $result;

                $info = array();
                $info['con'] =& $this;
                $info['cols'] = $this->db_num_fields($result);
                $info['rows'] = $this->db_num_rows($result);
                $info['info'] = array();

                for ($i=0; $i<$info['cols']; $i++) {
                        $info['info']['name'][] = $this->db_field_name($result,$i);
                        $info['info']['type'][] = $this->db_field_type($result,$i);
                }

                return new record($result,$info);
        }

Cette modification devrait nous permettre de tracer les requêtes select qui répondent en plus de 0.5 secondes dans un fichier qui se nomme "db.log" et qui sera créé dans le répertoire temporaire "/tmp".

2) Analyse de requêtes SQL

Après un peu de trafic le blog, vous devriez obtenir des requêtes SQL dans le fichier "/tmp/db.log". Si ce n'est pas le cas, soit votre blog ne contient pas beaucoup d'articles, soit vous avez un serveur avec pas mal de CPU ;-)

Note: Le premier chiffre qui se trouve devant la requête est le temps d'exécution de celle-ci.

Voici les trois requêtes SQL les plus redondantes qui ont été tracées sur mon blog. Les requêtes tracées dépendent énormément de la configuration de votre blog, de la quantité d'articles que contient votre blog, et de la qualité de votre hébergement Web :

SELECT meta_id, meta_type, COUNT(M.post_id) AS count FROM dc_meta M LEFT JOIN dc_post P ON M.post_id = P.post_id WHERE P.blog_id = 'default'  AND meta_type = 'tag' AND ((post_status = 1 AND post_password IS NULL ) ) GROUP BY meta_id,meta_type,P.blog_id ORDER BY count DESC LIMIT 50

SELECT P.post_id, P.blog_id, P.user_id, P.cat_id, post_dt, post_tz, post_creadt, post_upddt, post_format, post_password, post_url, post_lang, post_title, post_excerpt, post_excerpt_xhtml, post_content, post_content_xhtml, post_notes, post_type, post_meta, post_status, post_selected, post_open_comment, post_open_tb, nb_comment, nb_trackback, U.user_name, U.user_firstname, U.user_displayname, U.user_email, U.user_url, C.cat_title, C.cat_url FROM dc_post P INNER JOIN dc_user U ON U.user_id = P.user_id LEFT OUTER JOIN dc_category C ON P.cat_id = C.cat_id WHERE P.blog_id = 'default' AND ((post_status = 1 AND post_password IS NULL ) ) AND post_type = 'post' AND (       (post_dt = '2006-03-29 22:49:37' AND P.post_id < 315)        OR post_dt < '2006-03-29 22:49:37' )  ORDER BY post_dt DESC, P.post_id DESC  LIMIT 1

SELECT C.comment_id, comment_dt, comment_tz, comment_upddt, comment_author, comment_email, comment_site, comment_content,  comment_trackback, comment_status, comment_spam_status, comment_spam_filter, comment_ip, P.post_title, P.post_url, P.post_id, P.post_password, P.post_dt, P.user_id, U.user_email, U.user_url FROM dc_comment C INNER JOIN dc_post P ON C.post_id = P.post_id INNER JOIN dc_user U ON P.user_id = U.user_id WHERE P.blog_id = 'default' AND ((comment_status = 1 AND P.post_status = 1 AND post_password IS NULL ) ) ORDER BY comment_dt DESC  LIMIT 10

La première chose à vérifier est que les éléments présents après le "WHERE" des requêtes possèdent bien un index en base :

  • Sur la première requête, il manque des index sur meta_type, post_status et post_password.
  • Sur la deuxième requête, il manque un index sur post_type.
  • Sur la dernière requête, il manque un index sur comment_status et comment_dt

Voici les requêtes SQL pour créer ces index en base :

ALTER TABLE `dc_post` ADD INDEX ( `post_status` , `post_password` )  ;
ALTER TABLE `dc_post` ADD INDEX ( `post_type` )  ;

ALTER TABLE `dc_meta` ADD INDEX ( `meta_type` )  ;

ALTER TABLE `dc_comment` ADD INDEX ( `comment_status` )  ;
ALTER TABLE `dc_comment` ADD INDEX ( `comment_dt` )  ;

Après ces modifications, les requêtes que vous trouverez dans votre fichier db.log devraient être moins nombreuses. J'ai ouvert un post sur le forum de Dotclear2, mais je n'ai pas encore de réponse quand à mes optimisations.

Je souhaite remercier l'équipe Dotclear2 pour leur travail et les féliciter de cet merveilleux outil qu'est Dotclear2 !

- page 1 de 4