URL: https://linuxfr.org/users/neria/journaux/dynastie-0-1 Title: Dynastie 0.1 Authors: Grégory Soutadé Date: 2013年02月07日T19:40:32+01:00 License: CC By-SA Tags: Score: 24 Salut tous le monde, Encore un journal pour vous présenter un de mes projet perso. Cette fois-ci, il s'agit de [Dynastie](http://indefero.soutade.fr/p/dynastie), un générateur de blog statique. Il en existe des centaines sur internet, le miens n'est ni meilleur, ni moins bon que les autres, il utilise juste des concepts qu'on ne retrouve pas ailleurs. Au delà du logiciel, c'est avant tout ces concepts que je tiens à présenter. À la base j'avais Joomla pour CMS. C'est un peu lourd pour un petit blog qui tourne sur mon sheevaplug. Du coup, j'ai décidé de passer à un blog statique avec nginx en frontend pour améliorer le temps de réponse. Néanmoins, je ne voulais pas perdre l'édition en ligne, les commentaires, la recherche... J'ai donc crée une application Django qui gère une partie dynamique (édition, commentaires, recherches) et la génération statique. Comme tous les autres générateurs, la partie statique s'appuie sur des templates. Sauf que ceux-ci sont au format xhtml avec des directives , Dynastie est donc un pseudo moteur XSLT si on peut dire. Les articles sont enregistrés dans des fichiers séparés directement en HTML. Les méta données (titre, commentaires, catégorie...) sont stockés dans une base SQLite3. On mélange bien fort et ça génère le site et les flux RSS/Atom correspondants. L'avantage d'avoir les méta données dans une base est de pouvoir les manipuler facilement. Concernant la génération, la règle est simple : * L'architecture de base est définie dans le dossier "sites/" * Le résultat est stocké dans le dossier "sites/_output" * Tous les fichiers qui ne commencent pas par "_" (les templates en général) sont copiés Pour améliorer la réactivité du site, les fichiers HTML résultats ainsi que les JS et les CSS sont pré compressés en gzip. nginx utilise directement les fichiers pré compressés. Quand un lecteur entre un commentaire, celui-ci est transmis au serveur et la page est re générée à la volée. Idem pour la recherche : on envoie une requête au serveur et la liste des résultat est générée (mais non persistante). Contre le SPAM des robots, j'utilise une astuce : il y a deux champs pour l'email. Le premier nommé "email" et invisible par CSS, et le second nommé "mel". Si le premier champs (email) est rempli, on n'enregistre pas le commentaire car il y a de fortes chances qu'il provienne d'un robot (comme quoi, l'appellation mel est utile ;) ). ![Process de Dynastie](http://blog.soutade.fr/images/2013/02/dynastie_process.png) Voilà pour le gros des idées, la suite est plus classique : * Index dans l'ordre anti chronologique * Categories * Tags * Flux RSS/Atom * Commentaires (dynamiques et sans Disqus) * Recherche (dynamique) * éditeur WYSIWYG en ligne * Coloration syntaxique (avec Pygments) * Prévisualisation * Multi blogs * Multi utilisateurs * On ne regénère que ce qui est nécessaire Le template de mon blog est contenu dans les sources du projet. Ça permet d'avoir un exemple de tous ce qui a été implémenté (et c'est pratique pour mon dev perso :)). En réalité, ça couvre surtout mon besoin personnel et n'a pas forcément vocation à être aussi générique qu'un Pelican (même si ça reprend les fonctionalités principales). [Page du projet] (http://indefero.soutade.fr/p/dynastie)

AltStyle によって変換されたページ (->オリジナル) /