Kirby : plugin et controllers

Un an plus tard, je remets les mains dans le cambouis de Kirby.

Je n’ai pas du tout respecté mon processus de déploiement avec Git… Il va falloir que je me penche à nouveau dessus.

J’avance sur un projet de bibliothèque en ligne (en m’inspirant de celle de Hidde de Vries et de biblio[zen]dodo) avec pour ambition de terminer ça si possible d’ici la rentrée. Je tâtonne encore un peu, j’en reparlerai sans doute quand ça sera un peu plus clair dans ma tête.

En parallèle, j’ai enfin pris le temps de nettoyer et factoriser le code de mes templates !

Gérer les variations avec les controllers partagés

Je souhaitais gérer des variations dans mes templates, tout en évitant de dupliquer mon code1.

En fouillant dans la documentation de Kirby, je suis tombée sur les controllers partagés, Shared controllers. La « recette » proposée est vraiment prête à l’emploi et facilement adaptable.

J’ai pu mettre en place un titre de page différent (<title>), limiter la suppression des emojis à mon gabarit de note et appeler une feuille de style spécifique à un template sans difficulté.

Suppression des emojis

Sur certains billets, j’utilise des emojis décoratifs dans le titre. Ces emojis, masqués par ailleurs aux lecteurs d’écran, étaient repris dans le titre de la page (balise <title>).

J’avais bricolé quelque chose de bien sale pour les supprimer, m’obligeant à répéter tout le contenu de l’entête du site directement dans mon template note.php, car je n’arrivais pas à faire marcher ma fonction ailleurs.

J’ai enfin pu reprendre ce code après avoir compris quoi faire de l’aide obtenue sur le forum Kirby.

Pour mes besoins, il « suffisait » de créer un plugin personnel et d’y stocker ma fonction sans chercher à aller plus loin.

Dans le dossier plugins, j’ai donc ajouté un dossier custom dans lequel se trouve un fichier index.php avec le code PHP suivant, trouvé sur Stack Overflow :

function removeEmoji($text) {

 $text = iconv('UTF-8', 'ISO-8859-15//IGNORE', $text);
 $text = preg_replace('/\s+/', ' ', $text);
 return iconv('ISO-8859-15', 'UTF-8', $text);
}

Il est assez ingénieux par rapport aux autres solutions proposées, pas de liste ou de regex à mettre à jour à chaque nouvelle vague d’emojis.

Le principe2 :

  1. Convertir le texte avec iconv() dans un jeu de caractères qui ne supporte pas les emojis.
  2. Avec preg_replace(), on supprime tous les espaces.
  3. On reconvertit le texte en UTF-8.

Une solution perfectible

La fonction a néanmoins des limites embêtantes. Puisque ISO-8859-15 ne permet pas de gérer certains caractères typographiques ou diacritiques, comme l’apostrophe courbe ou le ć croate de mon nom, ces derniers sont supprimés également.

Pour l’instant, je conserve ce code que je pourrai adapter si besoin en passant à ISO-8859-16 pour au moins gérer le croate. Au pire, je pourrai également repasser sur une fonction moins élégante.

Il est aussi fort possible que je décide de me passer complètement des emojis3. Tout ça pour ça !


  1. J’adhère complètement au principe du Don't Repeat Yourself (DRY), mais je finis souvent par faire du bidouillage crade, faute de temps ou de connaissance technique suffisante. ↩︎

  2. Je me tiens assez bien à ma résolution de ne plus copier du code que je ne comprends pas. C’est beaucoup plus long, mais je pense que c’est payant et que j’apprends beaucoup plus ainsi. ↩︎

  3. Peut-être parce qu’ils sont partout dans la communication web, j’ai une sensation de saturation et de facilité. Lire notamment What happened when I stopped using Emojis↩︎

Contact

Vous souhaitez réagir ? N’hésitez pas à m’écrire à contact@luce.carevic.eu.