Comment contourner le changement automatique du type d'une donnée dans une opération XML Blogger ?
En tant que développeurs de thèmes, il vous est sûrement déjà arrivé de tomber sur ce message : Error interpreting blog theme - Invalid expression. Le message est généralement accompagné de l'opération invalide afin d'aider à localiser le problème dans le fichier XML du thème.
Souvent, l'erreur provient d'une simple faute de frappe ou encore d'une mauvaise connaissance des syntaxes de la part du développeur. Mais parfois, le problème peut paraître plus complexe, comme le cas d'un changement automatique du type de la valeur d'une donnée qui a été injectée dans une expression XML Blogger.
C'est ce dernier cas que nous allons aborder aujourd'hui.
Souvent, l'erreur provient d'une simple faute de frappe ou encore d'une mauvaise connaissance des syntaxes de la part du développeur. Mais parfois, le problème peut paraître plus complexe, comme le cas d'un changement automatique du type de la valeur d'une donnée qui a été injectée dans une expression XML Blogger.
C'est ce dernier cas que nous allons aborder aujourd'hui.
C'est l'histoire de Toto
Toto est le plus grand fan de Johnny. Pour partager sa passion au monde entier, il a créé un blog sur la plate-forme Blogger (évidemment).Comme tout bon Bloggerien qui se respecte, il lit le mode d'emploi du produit dans le Centre d'Aide et se documente attentivement sur Blogger Code PE pour personnaliser son thème.
Jusqu'à présent, tout se passe bien. Il écrit des articles qu'il classe en 2 groupes de libellés comme suit :
Par année
- 1950
- 1960
- 1970
- 1980
- 1990
- 2000
- 2010
- 2019
- Johnny Cash
- Johnny Hallyday
- Johnny English
data:view.search.label
. La donnée renvoie le libellé de la page de recherche par libellé et la valeur est une chaîne de caractères string. C'est tout juste ce qu'il lui fallait.Il écrit son code dans le fichier XML du thème afin de filtrer les libellés ne contenant que le mot "Johnny". Le résultat est propre, net et sans bavure :
<b:if cond='data:view.search.label contains "Johnny"'> Je suis le plus grand fan de Johnny ! ! ! </b:if>
Mais voilà, bien que le code fonctionne à la perfection sur les bonnes pages de libellés, la joie de Toto est de courte durée, puisqu'il constate que depuis qu'il a enregistré son code, les pages des libellés qu'il avait nommés
"1950"
, "1960"
, "1970"
, etc, renvoient le fameux message d'erreur : "Error interpreting blog theme - Invalid expression"...Que s'est-il passé ?
Rien de bien méchant. Il s'agit juste d'un problème d'analyse syntaxique.Lorsque les libellés
"1950"
, "1960"
, "1970"
, etc, ont été créés, ils ont été enregistrés comme étant des valeurs de type string. Et nous savons que les types de valeurs contenues dans les données sont pratiquement toutes invariables, exceptés lorsqu'ils sont injectés dans une opération et que la chaîne est, pour le cas de Toto, une série de chiffres qui devient 1950
, 1960
, 1970
(sans quote).Hors, la syntaxe de l'opérateur est très stricte sur ce point. Il faut que les opérandes soient absolument des chaînes de caractères :
string contains string
Au moment de l'analyse, Blogger a converti automatiquement la chaîne de caractères en nombre et n'a pas réussi à comprendre la nouvelle syntaxe puisqu'elle n'existe pas dans l'algo. D'où le message d'erreur :
number contains string
Comment aider Toto à réparer son thème ?
Toto sera ravi d'apprendre qu'il existe une solution de contournement qui consiste à repérer les chaînes de caractères ressemblants à des nombres, grâce au signe+
qui est à la fois un opérateur de concaténation et d'addition :Syntaxe Concaténation
string + allType
Syntaxe Addition
number + number
Par conséquent, au moment de l'analyse, Blogger pourra choisir l'une de ces 2 syntaxes lorsqu'il lira cette formule :
<b:if cond='(data:view.search.label + 0) == data:view.search.label'> <b:comment>Vrai, la chaîne est un nombre</b:comment> <b:else/> <b:comment>Sinon, la chaîne n'est pas un nombre</b:comment> <b:if cond='data:view.search.label contains "Johnny"'> Je suis le plus grand fan de Johnny ! ! ! </b:if> </b:if>
Et voilà Toto. Ton modèle est réparé. Ça te coûtera 3 cacahuètes pour le service de dépannage. 😍
Autres tutos
- Peut-on trier les tableaux de nombres ?
- Comment contourner le changement automatique du type d'une donnée dans une opération XML Blogger ?
- Modifier le menu des boutons de partage
- Ajouter des boutons au menu de partage
- Une pagination automatique avec le gadget Pages
- Favicons multi-sets : icon, apple-touch-icon et msapplication
- Masquer des éléments des thèmes dynamiques
- Créer des sous-catégories dans le gadget Libellés
- Une pagination automatique avec le gadget Libellés
- Filtrer les libellés dans les articles
- Créer un sélecteur d'articles
- Ajouter son blog au module de recherche Firefox
- inReplyTo : Développer un module de commentaires avec réponses