Aller au contenu

#Publier

Un thème installé, importé, dupliqué ou poussé arrive toujours en brouillon. Il faut un second geste pour qu’il remplace celui que voient les visiteurs. Ce guide dit ce que ce geste change exactement, ce qui se passe pour quelqu’un qui charge la page pendant, comment revenir en arrière, et pourquoi le thème publié refuse d’être supprimé.

#Brouillon et publié

Un site a au plus un thème publié — la base le garantit par un index partiel, ce n’est pas une convention. Tous les autres sont des brouillons, en nombre libre.

BrouillonPublié
Visible par les visiteursnonoui
Prévisualisableoui — /site/apercu/<id>c’est le site
Modifiable dans l’éditeur visueloui — /site-web?theme=<id>oui
Modifiable au CLIouioui, mais suivre prévient
Supprimableouinon — 409 theme_publie
Combien par siteautant qu’on veutun seul
Note

Un brouillon se regarde, et il se modifie. L’aperçu /site/apercu/<id> rend n’importe quel thème du site courant avec son contenu réel — pages, menu, articles — derrière la session, et il sert ses propres fichiers d’assets sous le segment _a. La route publique /theme-assets/<id>, elle, ne sert que le thème publié, et c’est très bien ainsi : un brouillon en cours de refonte n’a pas à se lire en devinant un identifiant.

Dans le CMS : Site web → sur une carte de brouillon, Voir en grand pour le regarder, Modifier pour l’ouvrir dans l’éditeur visuel.

Ce n’était pas vrai à l’origine, et ce guide l’a longtemps affirmé : publier était alors la seule façon de regarder. Ça ne l’est plus.

#Le brouillon de travail

Un brouillon parmi les autres, avec une règle en plus : il n’y en a qu’un par site, et c’est la base qui le garantit — un index unique partiel sur themes.issu_de (migration 0077), de la même façon et pour la même raison que « un seul publié ».

C’est celui que fabrique Site web → Modifier le thème → Travailler sur un brouillon : une copie du thème en ligne, nommée <nom> — brouillon, qui reporte les empreintes d’origine de sa source — sans quoi la mise à jour de thème considérerait chacun de ses fichiers comme retouché par le client, donc n’en remplacerait plus aucun.

Astuce

Recliquer sur Modifier le thème ne fabrique pas une seconde copie : la route rend celle qui existe, avec le travail qu’elle contient. C’est ce qui rend le geste répétable — sans quoi trois semaines de clics donneraient trois brouillons divergents, et rempliraient les 40 emplacements de thèmes du site.

Par l’API, POST /api/themes :

json
{ "action": "brouillon" }

Voir Thèmes. La réponse porte reutilise: true quand elle rend un brouillon qui existait déjà, et répond 201 quand elle vient d’en créer un.

#Ce que publier change réellement

Trois écritures, dans cet ordre, et rien d’autre. Les deux premières sont dans la même transaction — la fonction SQL publier_theme (migration 0077).

  1. L’ancien thème est démis

    Tous les thèmes du site dont le rôle vaut publie repassent en brouillon. L’ordre compte et il est contraint : il faut démettre avant de promouvoir, sinon deux thèmes publiés coexistent le temps d’une instruction et l’index de la base refuse la seconde écriture.

    Cet ordre traverse donc forcément un état à zéro thème publié. Il n’est pas évitable : themes_un_seul_publie est un index unique partiel, et Postgres n’accepte deferrable que sur une contrainte, qui ne peut pas porter de clause where. Un update … set role = case … end sur les deux lignes ne sauve rien non plus — un index non différable est validé au fil de la visite des lignes, et l’ordre de visite ne se commande pas.

  2. Le nouveau est promu

    Son rôle passe à publie et son maj_le est mis à l’heure. Ses fichiers ne bougent pas — ils étaient déjà en base depuis le pousser, l’installation ou l’import. Publier ne déplace aucun octet.

    Si le thème était le brouillon de travail, son issu_de est remis à null : il n’en est plus un, et le laisser renseigné empêcherait d’en créer le suivant.

  3. Une page d’accueil est garantie

    Si le site n’a pas de page marquée comme accueil, elle est créée. Publier un thème, c’est mettre un site en ligne ; sans page d’accueil, l’écran « Pages » reste vide et le référencement n’a nulle part où poser un titre.

    Cette création est sans conséquence sur la publication : elle a lieu après, et si elle échoue, le thème reste bien en ligne. Une page qui ne se crée pas ne doit pas faire échouer un thème qui, lui, fonctionne.

Ce que publier ne change pas, et qui surprend :

  • Ni le contenu, ni les pages, ni le menu, ni les articles. Ils n’appartiennent pas au thème. Changer de thème change l’habillage, pas ce qu’il y a dedans.
  • Ni les réglages de l’ancien thème. Ils vivent dans le config/settings_data.json de ce thème-là et l’attendent s’il revient.
  • Aucun fichier. Un brouillon publié puis démis retrouve exactement l’état dans lequel il était.

#Ce que voit un visiteur pendant

Rien de particulier, et c’est voulu.

Une requête arrivée avant la mise à jour rend l’ancien thème et se termine normalement ; la suivante rend le nouveau. Aucun visiteur ne voit l’état à zéro thème publié : les deux écritures sont dans une transaction, donc invisibles de l’extérieur tant qu’elle n’est pas validée — et si la seconde échoue, la première est annulée avec elle. C’est ce que la migration 0077 a corrigé : en deux requêtes séparées, un visiteur arrivé entre les deux trouvait un site sans thème publié, donc rendu par l’ancien moteur, et un échec l’y laissait.

En revanche il y a bien un cache à purger, et publier le fait : le rendu public passe par un cache de 60 secondes marqué site:<id>, que PATCH /api/themes invalide juste après avoir publié. Sans cette purge, le client rechargerait son site et le verrait inchangé pendant une minute.

Concrètement : quelqu’un qui lit une page ne voit rien ; il verra le nouveau thème au clic suivant.

Note

Le seul scénario où un visiteur voit quelque chose de bizarre est celui d’une page mise en cache par son navigateur, avec une feuille de style qui, elle, a changé d’adresse — l’adresse d’un asset contient l’identifiant du thème (/theme-assets/<id>/theme.css), donc changer de thème change l’adresse. Un rechargement forcé règle le cas.

#Publier

Site web → dans Brouillons, le bouton Publier de la ligne voulue.

Une confirmation apparaît : « Tes visiteurs verront ce thème immédiatement, à la place de celui qui est en ligne. Tu pourras remettre l’ancien quand tu veux. »

Ce que tu dois voir ensuite : la ligne quitte la liste des brouillons et remonte en haut de l’écran avec la pastille En ligne, l’ancien thème descend dans les brouillons, et l’aperçu se recharge.

#Revenir en arrière

Publier l’ancien. Il n’y a pas d’autre mécanisme, et il n’en faut pas d’autre : l’ancien thème est redevenu un brouillon au moment où le nouveau a été promu, avec tous ses fichiers et tous ses réglages intacts.

  1. Retrouver l’ancien

    node scripts/theme.mjs lister id nom version rôle modifié 22222222 Forge v2 1.0.0 publié il y a 2 min 11111111 Forge 1.0.0 brouillon il y a 4 j
  2. Le republier

    node scripts/theme.mjs publier --theme=11111111

    Ou, dans le CMS, le bouton Publier de sa ligne dans les brouillons.

  3. Vérifier

    Recharge l’adresse publique. Le retour est immédiat, pour la même raison que l’aller : l’échange des rôles est une transaction, et la purge du cache public part avec elle.

Astuce

Renomme tes thèmes. « Forge (copie) », « Forge (copie) (copie) » ne dit rien trois semaines plus tard, et c’est cette ligne-là qu’il faudra retrouver en urgence. « Forge — avant refonte janvier » se lit tout seul. Le nom n’apparaît que dans ton espace, jamais sur le site : Site web → menu à trois points → Renommer.

#Pourquoi le thème publié ne se supprime pas

Réponse de l’APIjson
{
  "error": "theme_publie",
  "message": "Ce thème est celui que voient tes visiteurs. Publie-en un autre avant de le retirer."
}

409, et c’est délibéré. Supprimer le thème publié éteindrait l’apparence du site en un clic, sans rien pour la remplacer — et il n’y a pas de corbeille : le code et les modifications partiraient définitivement. La garde force le geste qu’on voudrait de toute façon, dans l’ordre où on le voudrait : publier l’autre d’abord, retirer ensuite.

Deux gardes voisines relèvent de la même logique :

Les fichiers indispensables409 fichier_requis

layout/theme.liquid, templates/index.json et config/settings_schema.json ne se suppriment pas, même dans un brouillon. Sans coquille ni template, le thème ne rend plus rien.

Le repli du rendusilencieux

Si un thème publié perd malgré tout sa coquille, le rendu rend la main au lieu de servir une page vide : le site repart sur l’ancien moteur et reste debout. Un thème à moitié écrit ne doit pas éteindre un site — mais tu verras alors l’apparence d’avant, pas ton thème, et c’est la première chose à soupçonner devant un site qui « a perdu son thème ».

#Retirer un brouillon

Une fois qu’un autre thème est en ligne, le retrait ne demande rien de particulier. Site web → menu à trois points → Retirer le thème, avec la confirmation qui va bien : « Tout le code de ce thème sera effacé, y compris tes modifications. Télécharge-le d’abord si tu veux pouvoir y revenir. »

Prends l’avertissement au sérieux : Télécharger exporte le thème entier en un fichier JSON, réimportable tel quel. C’est la seule sauvegarde qui existe.

Astuce

Un site dont l’essai est terminé peut encore retirer un brouillon — c’est la seule écriture de thème qui reste permise, parce qu’elle ne change rien à ce que voient les visiteurs. Publier, pousser et importer, eux, répondent 402.

#La suite