Ce blog est sous Pélican depuis quelques mois maintenant, et j'en suis très content. Je trouve l'écriture plus facile avec ça, quoiqu'il y ait quelques contraintes (mais où n'y en a t-il pas ? Wordpress aussi avait son inconfort !).

Lors de la migration, j'ai essayé de faire en sorte que le nouveau blog donne les mêmes résultats que le blog wordpress précédent. Ainsi, les adresses des articles ont-elles la même syntaxe, que je trouve super : /année/mois/jour/nom-lang/.

ARTICLE_URL         = "{date:%Y}/{date:%m}/{date:%d}/{slug}-{lang}/"
ARTICLE_SAVE_AS     = "{date:%Y}/{date:%m}/{date:%d}/{slug}-{lang}/index.html"
ARTICLE_LANG_URL    = "{date:%Y}/{date:%m}/{date:%d}/{slug}-{lang}/"
ARTICLE_LANG_SAVE_AS    = "{date:%Y}/{date:%m}/{date:%d}/{slug}-{lang}/index.html"

DAY_ARCHIVE_SAVE_AS     = "{date:%Y}/{date:%m}/{date:%d}/index.html"
MONTH_ARCHIVE_SAVE_AS   = "{date:%Y}/{date:%m}/index.html"
YEAR_ARCHIVE_SAVE_AS    = "{date:%Y}/index.html"

Seul soucis, les articles sont maintenant pour beaucoup bilingues. Il y avait donc là ma première volonté de customisation.

Plugin Lang-Category

Dès le départ j'ai réglé mes adresses pour qu'elles indiquent la langue de l'article à la fin. Mais je voulais aussi avoir une page par langue du blog. Pélican fournit de base un fil RSS ou ATOM par langue, mais pas de page HTML.

J'ai donc fait une requête pour une modification de pelican qui fournisse la liste des articles d'une langue sur une page particulière, comme une catégorie. Cette requête a été refusée par les auteurs de Pélican, mais un développeur a écrit un plugin pour répondre à ma demande.

Il est à noter que j'utilise aussi le plugin Sitemap, qui génère automatiquement le sitemap du site, et le plugin comment_system, qui me permet d'avoir des commentaires sur les articles.

Ce nouveau plugin s'apelle Lang-Category parce que le comportement de la langue est celui d'une catégorie : elle a son template pour sa page HTML dédiée, son url…

Conf' : LANGUAGE_URL = '{lang}/index' LANGUAGE_SAVE_AS = '{lang}/index.html'

J'ai donc maintenant les url suivantes :

Le tout fonctionne, en apparence, de la même manière que le plugin Polylang, que j'utilisais sous wordpress, et les liens, notamment RSS, sont maintenus, ce qui fait que les gens qui me suivent n'ont même pas eu à changer leur conf' normalement.

J'ai, en parallèle, customisé mon thème Pélican pour pouvoir utiliser le nouveau plugin.

Thème

Le thème est dev-random de Sam Hocevar, que j'ai légèrement modifié.

Ma version est publiée ici : dev-random3.

J'ai, dès le départ, ajouté un widget links, qui n'existait pas dans le thème original, puis une page d'erreur 404. J'ai aussi modifié légèrement quelques couleurs et fontes du texte.

Pour ajouter des liens dans le widget links (à gauche immédiatement), il suffit d'inclure ce tuple dans votre fichier de configuration et y ajouter ou enlever vos liens :

LINKS =  (('http://www.22decembre.eu','22decembre'),  
('http://getpelican.com/','Pelican'),  
('http://python.org/','Python.org'),  
('http://jinja.pocoo.org/','Jinja2'),  
…  
('http://blog.chown.me/','Vigdis'),  
('http://www.blog-libre.fr/','Cyrille Borne & co'),  
('http://maniatux.fr/','Maniatux'),)

Puis, quand on a commencé à discuté du plugin, j'ai adapté mon thème à nouveau, avec le widget languages, qui indique la liste des langues disponible sur le blog.

C'est malheureusement encore peu fonctionnel. En effet, la configuration se fait à la main pour l'instant, grâce à ceci dans votre pelicanconf.py :

# ((code, name, url),)  
LANGUAGES= (('fr','french','fr/'),  
    ('en','english','en/',),)

Conf' Nginx

Si vous voulez avoir un blog du tonnerre, vous avez intérêt, à un moment où à un autre, à custom la conf' du serveur web aussi. Ici, c'est Nginx, qui est super pour les fichiers statiques, autrement-dit parfait pour pélican.

# rss.xml est le nom du flux rss généré par pélican
# Quand les gens font une requête sur le flux sur le flux wordpress
# (http://…/feed/), ils tomberont en fait sur ce fichier.
index index.html rss.xml;

error_page 404 /404.html;
location  /404.html {
    internal;
}

# Si vous avez des fichiers à télécharger.
# L'autoindex est une option Nginx, similaire à l'option Apache
# qui permet de se passer allégement de la maintenance d'une page ici.
# Il faut être feignant à bon escient.
location ~* ^/downloads/ {
    autoindex on;
}

# Idem
location ~* ^/drafts/ {
    autoindex on;
}

# faillite du nom de l'article
location ~* ^/([0-9]+)/([0-9]+)/([0-9]+)/(.+)/$ {
    try_files $uri $uri/ /$1/$2/$3/;
    }

# faillite du jour
location ~* ^/([0-9]+)/([0-9]+)/([0-9]+)/$ {
    try_files $uri $uri/ /$1/$2/;
    }

# faillite du mois
location ~* ^/([0-9]+)/([0-9]+)/$ {
    try_files $uri $uri/ /$1/;
    }

# faillite de l'année
location ~* ^/([0-9]+)/$ {
    try_files $uri $uri/ /;
    }

Adaptations futures

J'espère continuer à améliorer le plugin et le thème. J'aimerais également fournir la liste des pages, pas seulement la liste des articles d'une langue.