> HTML Logic

Sommaire

[modifier] Présentation de l'HTML Logic

[modifier] Qu'est-ce que l'HTML Logic ?

L'HTML Logic est utilisé dans les skins pour afficher un resultat suivant des conditions. Il permet d'inserer des structures de contrôle PHP comme if et else.

[modifier] Comment utiliser l'HTML Logic ?

Exemple : Mettre le titre des sujets épinglés en rouge. Pour cela aller dans AdminCP > Skins & Templates > Skin Manager > IPB Default Skin > Edit Root Skin Template HTML > Forum Index > render_forum_row Remplacer

{$data['title']}

Par

<if="data['pinned']">
{$data['title']}
</else>
{$data['title']}
</if>

Voila un exemple simple d'utilisation du HTML Logic.

[modifier] Comment l'HTML Logic est-il géré par IPB

Lors de l'enregistrement du template IPB vas convertir l'HTML Logic en php.

Gestion de variable :

Toutes les variables : ipb.member, ipb.vars, ipb.skin, ipb.lang et ipb.input
vont être converties en $ibforums->member, $ibforums->vars, $ibforums->skin, $ibforums->lang et $ibforums->input

Toutes les autres entrées rencontrées (par exemple : data['pinned']) vont être remplacées par $entrée (ce qui donne : $data['pinned'])
d'où un inconvénient on ne peut pas utiliser de fonctions dans les conditions. (voir la rubrique "Astuce" pour y remédier.)

[modifier] Exemple de syntaxe

[modifier] Structure de contrôle

Il existe deux structures possibles.

[modifier] if (si ... alors ...)

<if="condition">
code HTML
</if>

si vous avez juste à afficher quelque chose quand la condition est vraie.

[modifier] if...else (si ... alors ... sinon ...

<if="condition">
code HTML si la condition est vraie
</else>
code HTML si la condition est fausse
</if>

Structure à utiliser si un affichage est nécessaire que la condition soit vraie ou fausse.

[modifier] Syntaxe de la condition

[modifier] Simple

<if="data['pinned']">

La condition sera vraie si la variable $data['pinned'] est définie et différente de 0, FALSE ou NULL

[modifier] Comparraison

<if="data['pinned'] == 1">

Dans ce cas la condition est vraie si $data['pinned'] est égal a 1.

Autre syntaxe de comparaison :

  • 'x > y' : vrai si 'x' est strictement supérieur a 'y'
  • 'x < y' : vrai si 'x' est strictement inférieur a 'y'
  • 'x >= y' : vrai si 'x' est supérieur ou égal a 'y'
  • 'x <= y' : vrai si 'x' est inférieur ou égal a 'y'
  • 'x === y' : vrai si 'x' est egal a 'y' est de même type (à partir de PHP4 seulement)
  • 'x <> y' ou 'x != y': vrai si 'x' est différent de 'y'

[modifier] Utilisation d'opérateur logique

Permet de mettre plusieurs conditions

  • 'cond1 or cond2' : vrai si cond1 ou cond2 est vraie
  • 'cond1 and cond2' : vrai si cond1 et cond2 sont vraies
  • '! cond1' : vrai si cond1 est fausse

[modifier] Astuces

Ici, on va voir comment utiliser des fonctionnalités de PHP non prévues dans l'HTML Logic. Ce qui suit a été testé sur IPB 2.0

[modifier] Utilisation de fonction PHP

On a vu que lors de l'enregistrement du template, IPB ajoutait automatiquement $ devant les variables. Mais le problème c'est qu'il ne fait pas la différence entre les variables et les fonctions donc on ne peut pas utiliser de fonctions dans les conditions.
En fait il y a moyen de bluffer IPB, car il utilise, les opérateurs or et and, comme séparateur des différentes conditions contenues dans le if="...". Donc l'astuce c'est d'utiliser d'autres opérateurs qu'IPB ne reconnait pas comme tels mais que PHP saura utiliser. Par exemple || à la place de or et && à la place de and Si on écrit

<if="data[0] == 1 && data[1] == 1">

IPB va transformer ça en

if( $data[0] == 1 && data[1] == 1)

Comme vous le remarquez il manque le $ devant data[1] c'est peut-être un bug mais il vas nous être très utile. Puisque comme ça on vas pouvoir utiliser une fonction par exemple avec

<if="ibforums && in_array($ibforums->member['g_id'], explode(',', '4,7')">.....</if>

$ibforums est une des classes principales du forum et elle est disponible dans tous les skins donc la condition $ibforums sera toujours vraie. Pour PHP le code ci-dessus sera donc équivalent à

if( in_array($ibforums->member['g_id'], explode(',', '4,7') )

PS : Autre opérateur non pris en charge par IPB xor (ou exclusif) donc si vous souhaitez l'utiliser il faut penser à mettre le $ devant la deuxième variable ou si c'est une variable du type ipb.qqc remplacer par $ibforums->qqc Exemple :

<if="data[0] == 1 xor $ibforums->member['id'] != 1">...</if>

vrai si ($data[0] == 1 et $ibforums->member['id'] == 1) ou ($data[0] != 1 et $ibforums->member['id'] != 1). Il faut qu'une des deux condition soit vraies mais pas les deux.


--Fantome 24 oct 2005 à 16:55 (CEST)