samedi, juin 30 2007, 15:31
Améliorations sur le blog
Par Guillaume Lelarge - PostgreSQL - Lien permanent
... ou comment se faciliter la vie avec PostgreSQL.
Depuis que je suis passé à DotClear 2, je n'avais pas fait le nécessaire pour récupérer les images. Du coup, tous mes billets de la catégorie voyages étaient beaucoup plus dénudés. J'ai donc décidé de corriger ça aujourd'hui. J'avais un peu peur d'avoir à me reprendre tous les billets manuellement un par un. Heureusement, j'ai installé DotClear 2 avec la base de données PostgreSQL. Du coup, je me suis intéressé au schéma de la base utilisée par DotClear.
Son contenu est assez compréhensible. 17 tables que voici :
- dc_blog, liste des blogs
- dc_category, liste des catégories
- dc_comment, tous les commentaires
- dc_link, liste des liens
- dc_log, journal d'activité
- dc_media, liste des médias (voir le gestionnaire des médias)
- dc_meta, liste des meta-données (tags par exemple)
- dc_permissions, droits par utilisateur
- dc_ping,
- dc_post, liste des billets
- dc_post_media, lien billet/média
- dc_session, session en cours
- dc_session_old, ?
- dc_setting, paramétrage
- dc_spamrule, liste des règles antispam
- dc_user, liste des utilisateurs
- dc_version, version de DotClear.
Dans mon cas, je m'intéresse à la description des billets. Je souhaite modifier l'adresse des images. Voici donc le contenu de la table dc_post :
- post_id, identifiant du post
- blog_id, identifiant du blog associé
- user_id, identifiant du créateur
- cat_id, identifiant de la catégorie
- post_dt, date (de création ?)
- post_tz, fuseau horaire
- post_creadt, date de création
- post_upddt, date de mise à jour
- post_password, mot de passe
- post_type, type
- post_format, format
- post_url, url
- post_lang, langue
- post_title, titre
- post_excerpt, extrait (wiki)
- post_excerpt_xhtml, extrait (xhtml)
- post_content, contenu (wiki)
- post_content_xhtml, contenu (xhtml)
- post_notes, notes
- post_words, mots significatifs
- post_meta, liste des tags (à priori dans une structure PHP)
- post_status, état du billet
- post_selected, billet sélectionné
- post_open_comment, commentaires acceptés
- post_open_tb, rétroliens acceptés
- nb_comment, nombre de commentaires
- nb_trackback, nombres de rétroliens
On remarque aussi des index et des clés étrangères, ce qui démontre une belle utilisation des possibilités de PostgreSQL.
Trois champs m'intéressent particulièrement : post_upddt, post_content et post_content_xhtml. Je dois chercher dans les deux derniers le texte /~gleu/dotclear/ecrire/images/ et le remplacer par /public/images_dc1. Il me faut aussi mettre à jour post_upddt pour indiquer la date de mise à jour. Voici la requête que j'ai utilisé :
UPDATE dc_post SET post_upddt=current_timestamp, post_content=replace(post_content, '/~gleu/dotclear/ecrire/images/', '/public/images_dc1/'), post_content_xhtml=replace(post_content_xhtml, '/~gleu/dotclear/ecrire/images/', '/public/images_dc1/') WHERE post_content like '%/~gleu/dotclear/ecrire/images/%' OR post_content_xhtml like '%/~gleu/dotclear/ecrire/images/%';
Après exécution de cette requête, toutes les images pointent maintenant vers le bon répertoire. Trop bien 
PS : j'ai aussi ajouté des tas de tags, mais c'était beaucoup moins drôle.
aucun commentaire