Simon Tirant's blog

đŸ‡«đŸ‡· 🇬🇧
← All blog posts
Impression industrielle de journaux en activité

Nimble Blog (1/2)

by Simon Tirant (3 min read)

Tagged as elixir phoenix web blog nimblepublisher

This post also exists in english

La gĂ©nĂšse d’une librarie 📖

Il y a trois ans de cela (c-Ă -d. en 2020), JosĂ© Valim, le crĂ©ateur d’Elixir, a publiĂ© un article sur le blog de Dashbit racontant la nouvelle façon avec laquelle ils ont dĂ©cidĂ© de concevoir leur nouveau blog. Comme c’est pricnipalement un site avec du contenu statique, ils ne voulaient pas s’embĂȘter avec un CMS lourd comme WordPress ou autres (existe-t-il vraiment d’autres que Wordpress en rĂ©alitĂ© ❓❓❓).

Vous avez aussi les gĂ©nĂ©rateurs de sites statiques, tels que le trĂšs rĂ©putĂ© Jekyll, pour transformer vos repos Git de fichiers Markdown en une belle page HTML. Signification: vous Ă©crivez, vous git add ., vous git commit -m "Mon super nouveau post", vous git push et voilĂ  ! C’est publiĂ© ! Mais vous devez aussi construire votre page en amont, donc il n’y a absolument aucun contenu dynamic. MĂȘme pas un tout petit peu. ConcrĂštement, cela veut dire que vous ne pouvez ni filtrer, ni trier, ni paginer vos articles comme vous pourriez l’attendre d’un super blog tel que celui que vous ĂȘtes actuellement en train de lire (n’est-ce pas ? S’il vous plaĂźt, dites “Oui“ đŸ„ș🙏).

Alors, la question Ă  1 million de dollars (en vrai c’est gratuit car c’est open source) est : “Seigneur, comment puis-je obtenir le meilleur des deux mondes ? Comment puis-je avoir un blog lĂ©gĂšrement dynamique compilĂ© Ă  partir de simple fichiers Markdown situĂ©s sur un repertoir Git dĂ©diĂ© ??? S’il te plaĂźt, aide-moi ! AIDE-MOI !“

Calme-toi Jean-Jean, JosĂ© t’assure le coup ! En effet, pour commencer, l’article prĂ©cĂ©demment mentionnĂ© continue de dĂ©crire la façon dont ils ont fait un blog dynamique, en utilisant Phoenix pour prĂ©-compiler et charger en mĂ©moire leurs posts Markdown situĂ©s Ă  l’intĂ©rieur d’un fichier du framework (Ă  savoir sur le disque et non pas en base de donnĂ©es!).

En un mot, quand ton projet compile, nous lisons tous les posts de blog depuis le disque et nous les convertissons en des structures de données en mémoire.

JosĂ© Valim (traduit depuis l’anglais)

L’article va assez profondĂ©ment dans le code afin que vous puissiez tout voir: la dĂ©finition de la struct %Post{}, la fonction pour appeler les fichiers .md afin de les transformer en une liste de %Post{}, triĂ©e par date de publication descendante et stockĂ©e Ă  l’intĂ©rieur d’un module attribute (l’opĂ©rateur @)). Ce module peut ensuite ĂȘtre appelĂ© via une fonction publique nommĂ©e list_post/0, servant lors de l’éxĂ©cution le contenu stockĂ© en mĂ©moire durant la compilation.

Et bien voici, juste devant vos beaux yeux, les 17 lignes de code qui résument à elles-seules le coeur de leur application de blog :

  defmodule Dashbit.Blog do
    alias Dashbit.Blog.Post

    posts_paths = "posts/**/*.md" |> Path.wildcard() |> Enum.sort()

    posts =
      for post_path <- posts_paths do
        @external_resource Path.relative_to_cwd(post_path)
        Post.parse!(post_path)
      end

    @posts Enum.sort_by(posts, & &1.date, {:desc, Date})

    def list_posts do
      @posts
    end
  end

Ensuite, plus qu’un simple article tutoriel, JosĂ© a dĂ©cidĂ© de faire de ces lignes de codes une librairie Hex nommĂ©e NimblePublisher. Maintenant vous pouvez faire pareil que Dashbit sans avoir Ă  analyser les fichiers Markdown en des structs (sauf si vous voulez personaliser l’analyse) ou convertir la syntaxe Markdown en un bon vieux HTML lors de la compilation (ce qui est en rĂ©alitĂ© fait par les dĂ©pendances Earmark et MakeupElixir).

Et c’est exactement ce que nous allons voir dans le prochain article: un tutoriel sur NimblePublisher propulsĂ© par Phoenix 1.7, la derniĂšre version du framework qui ammĂšne des changements dans le mĂ©canisme des vues!

Go up arrow