Négocier avec des Champs Manquants
Parfois vous voulez créer un gabarit qui s'affiche différemment en fonction des champs qui sont inclus dedans. Par exemple, un listing d'annonces immobilières pourrait afficher des images de maisons à vendre si elles sont encore à vendre, et dans les autres cas automatiquement y substituer une image du Château de Neuschwanstein. Cela peut être réalisé avec la commande de bloc if.
Supposons que vous ayez le masque simple suivant :
<html>
<head><title>{$ .headline $}</title></head>
<body>
<h1>Tous savoir sur {$ .headline $}</h1>
{$ .body $}
</body>
</html>
Si l'article contient un titre, disons, Singes, et un corps d'article, disons, Les singes sont nos amis, cela s'affichera exactement comme vous voulez :
<html>
<head><title>Singes<title></head>
<body>
<h1>Tout savoir sur Singes</h1>
Les singes sont nos amis
</body>
</html>
Mais si l'article ne contient pas de titre, vous obtenez :
<html>
<head><title><title></head>
<body>
<h1>Tout savoir sur Singes</h1>
Les singes sont nos amis
</body>
</html>
L'absence d'un titre est un problème et avoir "Qui sommes-nous ?" comme titre est un peu laid. Cela peut être résolu en utilisant les blocs if blank ou if nonblank pour détecter les champs manquants et faire quelque chose de différent. La syntaxe du bloc if est :
{$ if blank .field $}
texte conditionnel
{$ endif $}
ou :
{$ if nonblank .field $}
texte conditionnel
{$ endif $}
Dans le premier cas de figure, tout ce qui est contenu à l'intérieur du bloc (texte conditionnel) est affiché si, et seulement si, le champ est blanc. Dans le second cas, tout ce qui est à l'intérieur du bloc est affiché si le champ n'est pas vide. Ainsi nous pouvons fixer nos masques comme suit :
<html>
<head>
<title>
{$ if blank .headline $}
Un autre Article
{$ endif $}
{$ if nonblank .headline $}
{$ .headline $}
{$endif$}
</title>
</head>
<body>
<h1>
{$ if blank .headline $}
Un autre Article Anonyme
{$ endif $}
{$ if nonblank .headline $}
Tout savoir sur Négocier avec des Champs Manquants
{$endif$}
</h1>
{$ .body $}
</body>
</html>
Vous pouvez utiliser if avec n'importe quel nom de variable ou nom de champ. Vous pouvez même l'utiliser à l'intérieur d'une boucle :
{$foreach x in (all)$}
{$x.headline$}
{$ if nonblank x.sidebar $}
Avec Sidebar!
{$endif$}
{$ if blank x.sidebar $}
Pas de Sidebar sur celui-là.
{$endif$}
<br>
{$next$}