Cette semaine, il y a eu pas mal de développements sur le blog, et donc pas mal de problématiques à solutionner!

S'il y a beaucoup de liens de corrélation dans la vie - cause, conséquence darling - il y en a un que j'expérimente chaque jour : tu fais un développement ou une intégration, tu te tapes un problème.

Ça déclenche fatalement un forage de tête, plusieurs essais, de la lecture sur des forums ou autres blogs, parfois des appels à l'aide, et au final : une solution :-)

Cette semaine, voici les sujets que l'on va aborder :

Ordonner une liste de type <ol><li> en sens inverse

L'idée ici était d'utiliser les balises <ol> et <li> pour établir un Top 5 décroissant : on part de la 5ème position pour arriver à la première.

Cela peut paraître basique... Et ça peut l'être en spécifiant la valeur de la position dans l'attribut value de la balise <li>. Cette solution - bien que fonctionnelle - nous oblige à spécifier la position : elle n'est donc pas optimale.

Il existe une autre solution qui consiste - sans avoir à spécifier la position pour chaque élément - à ajouter l'attribut reversed à la balise <ol>. Dans les faits, ça donne ça :

<ol reversed> <li>Un élément de la liste</li> <li>Un autre élément de la liste</li> <li>Encore un élément de la liste</li> <li>Un dernier élément de la liste</li> </ol>

C'est pratique, et cela nous apparaît comme plus optimisé.

Planifier une action sur un hébergement OVH mutualisé sans passer par leur planificateur de tâches

Là encore, le problème paraît trivial... Une tâche ou une url à lancer, à intervalle régulier, le tout sur un hébergement mutualisé d'OVH. Et bien, c'est la galère : impossibilité de passer plus d'un paramètre, déclenchement aléatoire ou inexistant...

Après plusieurs échanges avec le support d'OVH (qui bien qu'agréable, ne s'est montré ni réactif, ni efficace sur ce sujet), je me suis résolu à chercher une solution alternative.

L'astuce vient du blog de Geoffrey Monté, et solutionne ce problème. Le site https://www.easycron.com/ vous permet d'appeler de manière simple une url - en lui passant des paramètres si nécessaire - à des intervalles prédéfinis. L'interface est pratique et précise. Suivant le nombre de tâches planifiées et les services souhaités - email de confirmation de traitement, log -, le coût variera de 0 à 50 $ par an.

Grâce à ce service, le sitemap du blog est généré, puis envoyé aux moteurs de recherche. Alors on dit quoi ?! Merci Geoffrey !

Activer la vérification syntaxique native d'un navigateur dans un objet TinyMCE

Quel blogueur n'a pas laissé traîner une coquille dans un billet, malgré plusieurs relectures... Qu'il me jette la première pierre TinyMCE possède un plugin SpellChecker, que je n'ai trouvé ni pratique, ni facilement implémentable.

Par contre, votre navigateur préféré, lui, en possède un ! Pour l'activer dans un objet TinyMCE, une petite ligne lors de l'initialisation est nécessaire :

tinymce.init({ ... browser_spellcheck: true });

Et voilà le travail ! En cas d'erreur, une belle vague rouge soulignera le méchant mot incriminé.

Remplacer une chaîne de caractères par une autre dans le champ d'une table MySQL

Encore une petite astuce bien pratique, qui vous fera gagner du temps si vous avez besoin de remplacer une chaîne de caractères par une autre, dans un champ d'une table MySQL.

Cette semaine, nous avons pu la mettre en pratique. Nous avions à remplacer dans la colonne de contenu de la table des billets du blog, toutes les occurrences https://media.oreros-online.com/ par https://media.oreros-online.com/, suite à la mise en place du CDN sur la partie des médias (images, etc.). Evidemment, on aurait pu se faire ça à la main - avec les risques d'erreur ou d'oubli - mais on n'est pas comme ça chez nous !

Nous avons donc opté pour une petite requête MySQL de ce type :

UPDATE ma_table SET mon_champ = replace(mon_champ, 'ancienne chaine', 'nouvelle chaine');

En 3 minutes - le temps de sauvegarder la base de données au préalable - la mise à jour était faite. N'oubliez pas d'échapper vos quotes si la chaîne à rechercher ou à remplacer en contient.

C'est tout... pour le moment