Help - Search - Member List - Calendar
Full Version: Utilisation du HTML Logic
IPBR-FR > Divers > Documentation
Fantome
Utilisation du HTML Logic
IPB 2.0.x




Présentation

Qu'est-ce que le HTML Logic ?
Le HTML Logic est utilisé dans les skins pour afficher un resultat suivant des conditions.
Il permet d'inserer des structure de côntrole PHP comme if et else.

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
HTML
<if="data['pinned']">
<span style='color:red'>{$data['title']}</span>
</if>
<else>
{$data['title']}
</else>
Voila un exemple simple d'utilisation du HTML Logic.

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 :
Toute les variables : ipb.member, ipb.vars, ipb.skin, ipb.lang et ipb.input
vont être convertis 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é (ce qui donne : $data['pinned'])
d'ou un inconvénient on ne peut pas utiliser de fonctions dans les conditions. (voir la rubrique "Astuce" pour y remédier.)



Exemple de syntaxe

Structure de contrôle
Il exite deux structure possible.
if simple
HTML
<if="condition">
code HTML
</if>
si vous avez juste a afficher quelque chose quand la condition est vrai.
if...else
HTML
<if="condition">
code HTML si la condition est vrai
</if>
<else>
code HTML si la condition est fausse
</else>
Structure a utilisé si un affichage est nécéssaire que la condition soit vrai ou fausse.

Syntaxe de la condition
Simple :
HTML
<if="data['pinned']">
La condition seras vrai si la variable $data['pinned'] est définie et différente de 0, FALSE ou NULL
Comparraison :
HTML
<if="data['pinned'] == 1">
Dans ce cas la condition est vrai si $data['pinned'] est egal 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 (appartir de PHP4 seulement)
  • x <> y ou x != y: vrai si x est différent de y
Utilisation d'opérateur logique : permet de mettre plusieurs conditions
  • cond1 or cond2 : vrai si cond1 ou cond2 est vrai
  • cond1 and cond2 : vrai si cond1 et cond2 sont vrais
  • ! cond1 : vrai si cond1 est faux
Astuce

Quelque astuce qui permette de faire des choses impossible avec la syntaxe classique.
Utilisation de fonction
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 contenuent 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
HTML
<if="data[0] == 1 && data[1] == 1">
IPB vas tranformer ça en
CODE
if( $data[0] == 1 && data[1] == 1)
Comme vous le remarquer 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 utilisé une fonction par exemple avec
HTML
<if="ibforums && in_array($ibforums->member['g_id'], explode(',', '4,7')">.....</if>
$ibforums est une des classes principale du forum et elle est disponible dans tous les skins donc la condition $ibforums seras toujours vraie.
Pour PHP le code ci-dessus seras donc equivalent a
CODE
if( in_array($ibforums->member['g_id'], explode(',', '4,7') )

Vous savez comment utiliser une fonction dans les condition du HTML Logic.
PS : Autre opérateur non pris en charge par IPB xor ou exclusif donc si vous souhaité l'utilisé il faut pensé a mettre le $ devant la deuxèime variable ou si c'est une variable du type ipb.qqc remplacer par $ibforums->qqc
Exemple :
HTML
<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 vrai mais pas les deux.


Pour utiliser du code php plus poussé rendez ici.
Fantome
ipb.member
voila deja le debut d'une des variables

exemple :
CODE
Array
(
   [id] => 1
   [name] => fantome
   [mgroup] => 4
   [member_login_key] => 83c85e8f8b374ee0ab80ccc5af76e061
   [email] => fantome@ipbr-fr.com
   [restrict_post] => 0
   [view_sigs] => 1
   [view_avs] => 1
   [view_pop] => 1
   [view_img] => 1
   [auto_track] => 0
   [mod_posts] => 0
   [language] =>
   [skin] => 2
   [new_msg] => 0
   [show_popup] =>
   [msg_total] => 0
   [time_offset] =>
   [posts] => 24
   [joined] => 1099312551
   [last_post] => 1114456007
   [subs_pkg_chosen] => 0
   [ignored_users] =>
   [login_anonymous] => 0&1
   [last_visit] => 1114456469
   [last_activity] => 1114456779
   [dst_in_use] => 0
   [view_prefs] => -1&-1
   [org_perm_id] =>
   [mgroup_others] =>
   [temp_ban] => 0
   [sub_end] => 0
   [g_id] => 4
   [g_view_board] => 1
   [g_mem_info] => 1
   [g_other_topics] => 1
   [g_use_search] => 1
   [g_email_friend] => 1
   [g_invite_friend] => 0
   [g_edit_profile] => 1
   [g_post_new_topics] => 1
   [g_reply_own_topics] => 1
   [g_reply_other_topics] => 1
   [g_edit_posts] => 1
   [g_delete_own_posts] => 1
   [g_open_close_posts] => 1
   [g_delete_own_topics] => 1
   [g_post_polls] => 1
   [g_vote_polls] => 1
   [g_use_pm] => 1
   [g_is_supmod] => 1
   [g_access_cp] => 1
   [g_title] => Admin
   [g_can_remove] => 0
   [g_append_edit] => 1
   [g_access_offline] => 1
   [g_avoid_q] => 1
   [g_avoid_flood] => 1
   [g_icon] =>
   [g_attach_max] => 50000
   [g_avatar_upload] => 1
   [g_calendar_post] => 1
   [prefix] => Master
   [suffix] =>
   [g_max_messages] => 50
   [g_max_mass_pm] => 6
   [g_search_flood] => 0
   [g_edit_cutoff] => 5
   [g_promotion] => -1&-1
   [g_hide_from_list] => 0
   [g_post_closed] => 1
   [g_perm_id] => 4
   [g_photo_max_vars] => 50:150:150
   [g_dohtml] => 1
   [g_edit_topic] => 1
   [g_email_limit] => 10:15
   [g_bypass_badwords] => 1
   [g_can_msg_attach] => 1
   [g_attach_per_post] => 0
   [is_mod] => 1
)

id : l'id du membre
name : le pseudo
mgroup : l'id du groupe auquel le membre appartient
member_login_key : le hach md5 du mot de passe du membre
email : l'e-mail
restrict_post : restrictiion d'écriture pour le membre
  • 0 : le membre peut poster normalement
  • 1 : interdiction de poster
  • 1114457477:1114464677:2:h :
    • timestamp1 date de début de l'interdiction de poster, au format timestamp UNIX
    • timestamp2 date de fin de l'interdiction de poster, au format timestamp UNIX
    • multiple la durée de la restriction
    • unitée unité de la valeur précédente valeur possible : h (pour heures) ou d (pour jours)
view_sigs : voir les signatures
view_avs : voir les avatars
view_pop : afficher les popups
view_img : afficher les images
auto_track : Notification par email de nouveau message dans tout les message créer ou dans lequels le membre a répondu :
  • 0 : l'option n'est pas activer
  • none : pas de notification
  • immediate : imédiatement
  • delayed : retarder
  • daily : tout les jours
  • weekly : toutes les semaines
mod_posts : modération des post du membre :
  • 0 : le membre peut poster normalement
  • 1 : modération ilimité
  • 1114457477:1114464677:2:h :
    • timestamp1 date de début de la modération, au format timestamp UNIX
    • timestamp2 date de fin de la modération, au format timestamp UNIX
    • multiple la durée de la modération
    • unitée unité de la valeur précédente valeur possible : h (pour heures) ou d (pour jours)
language : repertoir de la langue choisie par le membre pour le forum (NULL = langue par defaut)
skin : l'id du skin choisi par le membre (0 = skin par defaut)
new_msg : nombre de nouveau Message Privé
show_popup : 1 si il y as un popup en attente d'ouverture (ex: nouveau MP)
msg_total : nombre total de messages dans la boite du membre
time_offset : décalage horaire en heure (ex: parais GMT+1 -> time_offset=1)
posts : nombre de posts
joined : date où le membre à join le forum, au format timestamp UNIX
last_post : date du dernier post, au format timestamp UNIX
subs_pkg_chosen : ça doit se rapporté au Achat d'abonnement payant mais j'ai pas réussi a faire varier la valeur.
ignored_users : liste des id des utilisateurs ignorés (ex: ,5,46,500, )
login_anonymous : ex: 0&1
annonyme : l'utilisateur n'apparais pas dans la liste des connectés
connecté : l'utilisateur est en ligne
last_visit : date de la dernière visite, au format timestamp UNIX
last_activity : date de la dernière activité (dernier clique), au format timestamp UNIX
dst_in_use : heure d'été/d'hiver (1= été, 0=hiver), ajoute une heure a l'heure normal
view_prefs : utilise les préférence pour le nombre de topics et de posts par page (ex: 20&30 : 20 posts par page et 30 topics par page; -1 = valeur par defaut)
org_perm_id : liste des id des masques de permision appliquer au membre en plus de celui rattacher a son groupe.
mgroup_others : liste des id des groupes secondaire du membre
temp_ban : bannissement temporaire d'un membre
  • 0 : le membre n'est pas banni
  • 1114457477:1114464677:2:h :
    • timestamp1 date de début du bannissement, au format timestamp UNIX
    • timestamp2 date de fin du bannissement, au format timestamp UNIX
    • multiple la durée de bannissement
    • unitée unité de la valeur précédente valeur possible : h (pour heures) ou d (pour jours)
sub_end : date de la fin de la souscription des abonnement payant, au format timestamp UNIX
g_id : id du groupe du membre
g_view_board : 1 = peut voir le forum, 0 = interdiction d'accéder au forum (banni)
g_mem_info : peut afficher la liste des membres et voir le profile des membres
g_other_topics : peut voir les topics dont il n'est pas l'auteur
g_use_search : peut utiliser la recherche
g_email_friend : peut envoyer un mail aux autres membres
g_invite_friend : variable non-utiliser
g_edit_profile : peut éditer son profile
g_post_new_topics : peut commencer un nouveau topic
g_reply_own_topics : peut répondre a ses topic
g_reply_other_topics : peut répondre au topic commencé par un autre membre
g_edit_posts : peut éditer ses posts
g_delete_own_posts : peut supprimer ses posts
g_open_close_posts : peut ouvrir et fermer ses topics
g_delete_own_topics : peut supprimer ses topics
g_post_polls : peut créer un sondage
g_vote_polls : peut voter dans les sondage
g_use_pm : peut utiliser les messages privés
g_is_supmod : super modérateur : peut utiliser toute les options de modération sur touts les posts/topics
g_access_cp : a accés a la console d'administration.
g_title : titre du groupe (ex Ipbr-fr: Admins, Modérateurs, Moddeurs/Traducteurs, Testeurs, Membres, Validation)
g_can_remove : variable non-utiliser
g_append_edit : peut ne pas marquer qu'un message a était éditer ("Ajouter la ligne 'Modifié par' dans ce message ?")
g_access_offline : peut accéder au forum quand il est Offline
g_avoid_q : n'est pas soumit a la modération
g_avoid_flood : n'est pas soumis au controle de flood
g_icon : image associer au groupe d'utilisateur (ex : style_images/ipbr-fr_bleu/folder_team_icons/moderateur.gif)
g_attach_max : taille de stokage des fichiers atachés :[list][*]-1 : Upload désactiver
[*]0 : taille ilimité
[*]xxx : taille de xxx Ko de stokage
g_avatar_upload : peut uploader un avatar
g_calendar_post : peut ajouter un evénement dans le calandrier
prefix : prefix du groupe
suffix : suffix du groupe
g_max_messages : nombre de MP que le membre peut stoker (0 = désactiver)
g_max_mass_pm : nombre destinataire max pour les MP de masse (0 = MP de Masse désactivé)
g_search_flood : temps minimum entre deux recherche, temps en secondes
g_edit_cutoff : temps, en minutes, pendant le quel l'utilisateur peut éditer son message si il a l'autorisation d'éditer ses messages (0 = illimité), n'as pas d'influence si le mebre est un moddérateur
g_promotion : [list][*]-1&-1 : le membre ne seras pas promus automatiquement
[*]5&50 : quand le membre atteindra 50 message il seras promus dans le groupe d'id 5
g_hide_from_list : cacher le membres dans la liste des membres
g_post_closed : peut répondre aux topics fermé
g_perm_id : liste de(s) l'id du(des) masque(s) de permision auquel le membre est soumis
g_photo_max_vars : 50:100:150
Taille de la photo en Ko (0 = upload de photo interdit)
Largeur de la photo
Hauteur de la photo
g_dohtml : peut utiliser du code HTML dans ses posts
g_edit_topic : peut éditer le titre est la description de ses topics
g_email_limit : 10:15
peut envoyer 10 email toute les 20 heures, a raison de 1 toute les 15 minute
g_bypass_badwords : peut poster sans filtrage des mots
g_can_msg_attach : peut joindre des fichier attacher a ses MP
g_attach_per_post : taille total maximum des fichiers join a un post
is_mod : le membre est modérateur dans le forum courant
Fantome
Quelques variables supplémentaires

Voila une variable qui apparait quand le membre appartient a un groupe qui modère un forum (ici le forum 9, première partie du code) ou le membre est le modérateur d'un forum (ici le forum 6, deuxième partie)

Exemple :
CODE
   [_moderator] => Array
       (
           [9] => Array
               (
                   [mid] => 3
                   [forum_id] => 9
                   [member_name] => -1
                   [member_id] => -1
                   [edit_post] => 0
                   [edit_topic] => 0
                   [delete_post] => 1
                   [delete_topic] => 1
                   [view_ip] => 1
                   [open_topic] => 0
                   [close_topic] => 0
                   [mass_move] => 0
                   [mass_prune] => 0
                   [move_topic] => 0
                   [pin_topic] => 0
                   [unpin_topic] => 0
                   [post_q] => 0
                   [topic_q] => 0
                   [allow_warn] => 0
                   [edit_user] => 0
                   [is_group] => 1
                   [group_id] => 3
                   [group_name] => Members
                   [split_merge] => 0
                   [can_mm] => 0
               )

           [6] => Array
               (
                   [mid] => 2
                   [forum_id] => 6
                   [member_name] => fantome2
                   [member_id] => 2
                   [edit_post] => 0
                   [edit_topic] => 0
                   [delete_post] => 1
                   [delete_topic] => 1
                   [view_ip] => 1
                   [open_topic] => 0
                   [close_topic] => 0
                   [mass_move] => 0
                   [mass_prune] => 1
                   [move_topic] => 0
                   [pin_topic] => 0
                   [unpin_topic] => 0
                   [post_q] => 0
                   [topic_q] => 0
                   [allow_warn] => 0
                   [edit_user] => 0
                   [is_group] => 0
                   [group_id] =>
                   [group_name] =>
                   [split_merge] => 0
                   [can_mm] => 1
               )

       )


mid : id de la modération
forum_id : id du forum modéré
member_name : nom du membre (-1 quand c'est un groupe)
member_id : id du membre (-1 quand c'est un groupe)
edit_post : peut éditer les posts et sondages
edit_topic : peut éditer le titre des topics
delete_post : peut supprimer les posts
delete_topic : peut supprimer les topics et sondages
view_ip : peut voir les IP des membres
open_topic : peut ouvrir un topic fermé
close_topic : peut fermer un topic ouvert
mass_move : peut déplacer en masse des topics
mass_prune : peut élager/déplacer en masse des topics
move_topic : peut déplacer un topic
pin_topic : peut épingler un topic
unpin_topic : peut desépinglé un topic
post_q : peut rendre visible/invisible un post
topic_q : peut rendre visible/invisible un topic
allow_warn : peut avertir un membre
edit_user : peut éditer l'avatar et la signature d'un utilisateur
is_group : est un groupe
group_id : id du groupe qui modére
group_name : nom du groupe qui modére
split_merge : peut separer ou fusioner des topics
can_mm : peut utiliser la multi-modération
Fantome
voila deja le debut de la variable ipb.member.
La suite arriveras mais ça prend du temps j'y est deja passe au moin 1h30
Fantome
Poste supprimer pour une meuilleur mise en page.
Merci de votre compréhension

QUOTE(MKris @ samedi 23 avril 2005 à 13:33)
Moi j'ai une remarque. Quel est l'intérêt de l'HTML logic ?
*




QUOTE(Fantome @ samedi 23 avril 2005 à 16:18)
L'interet principal que j'ai trouver c'est d'avoir des affichage conditionnel spécifique a chaque skin.

Mais bon je ne l'utilise pas donc j'ai fais se sujet pour ce qui serais intéresser et pour partager les petites astuces.

Pour ma part je me contente de donner une solution.
*




QUOTE(Youp3 @ lundi 25 avril 2005 à 12:14)
Le HTML Logic est aussi intéressant pour mettre des conditions pour l'affichage de certains éléments sans avoir à modifier le code des mods ou du forum.
*




QUOTE(Fabien @ lundi 25 avril 2005 à 13:06)
Une liste des principales conditions que l'on peut utiliser serait intéressant (si quelqu'un à ça, je prend ^^).
*




QUOTE(Fantome @ lundi 25 avril 2005 à 14:47)
Je comprend pas trop tas question fabien.
Est ce que tu parle des différente variable que tu peut tester ?
*




QUOTE(Fabien @ lundi 25 avril 2005 à 18:06)
Oui, c'est ça. Par exemple, dans ton exemple tu utilise "data['pinned']". Je sais qu'il y a aussi "ipb.member['id']" mais après... unsure.gif
*




QUOTE(Fantome @ lundi 25 avril 2005 à 18:23)
Tu as tout ce qui est dans la variable $ibforums


  • ipb.member : info relative a l'utilisateur

  • ipb.vars : variable du fichier config

  • ipb.skin : le skin

  • ipb.lang : langue

  • ipb.input : toutes les entré GET, POST, COOKIE

aprés pour le reste ça depend des variables de chaque fonction.

PS: si tu veux je peut faire une liste plus compléte.
*




QUOTE(Fabien @ lundi 25 avril 2005 à 18:37)
Intéressant, je ne savais pas qu'il y avait aussi la possibilité de mettre des conditions selon le skin ou selon la langue smile.gif

Je dis pas non smile.gif
*




QUOTE(prolag @ lundi 25 avril 2005 à 20:09)
super p'tit guide biggrin.gif

Bon boulot smile.gif
*

Fantome
Voila pour la fonction ipb.member j'espère que j'en est pas oublier si vous trouver d'autre variable dite le moi que je les rajoute.
Youp3
Merci Fantome, beau boulot.
AlfredNakache
Salut Fantome,

Je cherche à afficher un élément lorsque je suis dans la fenetre de post, uniquement lorsque je suis dans un certain forum. Tu penses que je peux le faire avec l'HTML Logic ? Si oui, est-ce qu'il existe une variable du type "forum_id" qui me permettrait de faire ma condition ?

happy.gif
Fantome
Oui, la variable ipb.input['f'] retourne l'id du forum ou en php $ibforums->input['f']
AlfredNakache
QUOTE(Fantome @ jeudi 28 avril 2005 à 14:40)
Oui, la variable ipb.input['f'] retourne l'id du forum ou en php $ibforums->input['f']
*


Parfait. J'ai testé et ça a marché du premier coup wink.gif


Bravo pour ce tutorial smile.gif
Fabien
Quelqu'un sait si avec le HTML Logic c'est possible d'afficher un message uniquement si le forum d'ID x à des messages non-lu ?
Youp3
pour ma part, je ne sais pas.
Fantome
A quel endroit tu veux afficher le message.
Fabien
Là, je pensais mettre ça dans la template "stats_header" (Groupe "Board Index").
Fantome
je dirais que c'est pas possible.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2012 Invision Power Services, Inc.