Voir la version complète : vBulletin 3.6.x Pourquoi ce code ne fonctionne pas
analyste
26/11/2006, 20h34
bonjour
c'est dans la template postbit_legacy
je voudrais afficher quelque chose si le nombre de post est supérieur à un certain chiffre (x)
il ya une variable "$post[posts]" deja existante sur la template et sur laquelle j'ai inséré cette condition pour un eventuel affichage répondant à cette condtion
<if condition="$post[posts]>'x'">
affichage
</if>
où "x" serait le nombre de post du membre
la condition fonctionne mais pas à tous les coups
ce qui est bizarre c'est que la condition n'est pas rempli si le nombre serait compris entre 1000 et 2000 posts
cad pour les membres qui n'ont pas dépassé les 1000 posts oubien pour ceux qui ont plus 2000 la condtion est rempli et le code fonctionne
pour ceux qui le nombre de post est compris entre 1000 et 2000 , ce code ne fonctionne pas.
je suis pas codeur, mais, il m'arrive quelques fois d'essayer des trucs
j'ai remarqué que l'affichage du nombre de post sur VB est plutôt bizarre.
ils sont affiché avec un espace entre les milliers et les centaines
1021 post serait affiché 1 021
je ne sais pas pourquoi la condition est rempli quand le nombre de post dépasse les 2000 malgrés que c'est le même type d'affichage.
2021 posts sont affichés de la même maniére 2 021
peut-on trouver la faille oubien me signaler le bon code pour cette condition soit satisfaite dans tous les cas?
Merci
Bec à Fuel
26/11/2006, 20h38
Je mettrais plutôt ça comme condition :<if condition="$bbuserinfo[posts]>x">
affichage
</if>
Pour l'affichage d'un nombre, on peut utiliser la fonction vb_number_format : // ################################################## ###########################
/**
* Formats a number with user's own decimal and thousands chars
*
* @param mixed Number to be formatted: integer / 8MB / 16 GB / 6.0 KB / 3M / 5K / ETC
* @param integer Number of decimal places to display
* @param boolean Special case for byte-based numbers
*
* @return mixed The formatted number
*/
function vb_number_format($number, $decimals = 0, $bytesize = false, $decimalsep = null, $thousandsep = null)
Ta variable de template contient le résultat de la fonction :$tpl_var = vb_number_format($nbre,0,false,',',' ');
$tpl_var contiendra mon nombre $nbre sans décimales, au format numérique, le séparateur décimal étant une virgule (inutile ici, c'est vrai) et le séparateur des milliers un espace.
analyste
26/11/2006, 21h23
Je mettrais plutôt ça comme condition :<if condition="$bbuserinfo[posts]>x">
affichage
</if>
non
cette condition concerne le membre consultant le post sur le forum.
$bbuserinfo[posts]
je voudrais que la condition concernerait le propriétaire du post
cad: l'affichage se ferait si le propriétaire du post depasse x post
et non pas si le nombre de post du visiteur depasse x
Pourquoi ne pas passer par un conditionnel sur un groupe d'utilisateurs ayant plus de x posts ?
analyste
26/11/2006, 22h29
Pourquoi ne pas passer par un conditionnel sur un groupe d'utilisateurs ayant plus de x posts ?
trop long à expliquer
mais je te dirais qu'il me faudrait au moin 10 groupes si ce n'est pas plus
car l'affichage serait différent selon le nombre de post
alors que cette condition me laisserait un plus grand choix de manipulation
Pitchoune
26/11/2006, 23h01
<if condition="$post['posts'] > x"></if>
Les chiffres n'ont pas besoin d'être entre apostrophes, ce sont des valeurs numériques. Dans les if, on peut mettre des apostrophes entre les crochets (pas obligatoire) mais pas en dehors des if.
Explique clairement ce que tu souhaiterais faire :)
Essaie aussi:
<if condition="$post[postcount] % $vboptions[maxposts] == x">
</if>x est le nombre de messages.
analyste
26/11/2006, 23h47
<if condition="$post['posts'] > x"></if>
Les chiffres n'ont pas besoin d'être entre apostrophes, ce sont des valeurs numériques. Dans les if, on peut mettre des apostrophes entre les crochets (pas obligatoire) mais pas en dehors des if.
Explique clairement ce que tu souhaiterais faire :)
ça devrait te paraitre bizarre mais je l'ai essayé sans quote et ça ignore la condition si le nombre de post est plus grand que 1000
alors que quand je met les quotes il n'ya que le segment entre 1000 et 2000 qui est ignoré
Essaie aussi:
<if condition="$post[postcount] % $vboptions[maxposts] == x">
</if>x est le nombre de messages.
ça marche pas
Ecoutez voila le but
il sagit d'afficher les derniers posts du membre dans le postbit_legacy sous son avatar
c'est un cadre qui serait initile à afficher si le membre n'aurait qu'1 seul post par exemple
<if condition="$post['posts'] > '10'">
<table cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" class="tborder" width="95%">
<td class="thead" width="97%" align="center" valign="top">
<b><font color="#0000FF">Mes derniéres participations</font></b></td>
</tr>
<tbody id="collapseobj_postbit1_344900" style="">
<tr>
<td class="alt1" colspan="2">
<div class="alt2Active" style="padding:6px; border:1px inset; overflow:auto">
<div id="postmenu_344900">
<script type="text/javascript"> vbmenu_register("postmenu_344900", true);
</script> <br>
<font color="#FF0000">
<marquee onmouseover="this.stop()" onmouseout="this.start()" direction="up" scrolldelay="4" scrollamount="1" style="text-align: center; font-family: Tahoma; font-size: 10px" height="78">$favo</marquee></font></div>
</div>
</td>
</tr>
</table>
</if>
ça marche avec un produit biensur
si ça vous interresse je peux l'upploader
<if condition="$post[postcount] % $vboptions[maxposts] == x">
</if>
Je l'ai testé et ce code n'affiche pas le contenu du post si le nombre de messages du membre est plus grand que x. A toi modifier le code selon tes besoins.
Pitchoune
27/11/2006, 00h02
<if condition="$post['posts'] >= '10'"></if>Si le nombre de messages est supérieur ou égal à 10...
Dans la programmation (du moins PHP, je pense que ça doit être similaire pour le C++ et variantes), les conditions sont vérifiées selon leur nature. Un == ne correspond pas à un = (== -> opérateur de comparaison, = -> opérateur d'affection).
Donc, dans les condition, on compare, donc == (ou >= ou <= ou encore != pour vérifier une différence).
Exemple :if ($post['posts'] >= '10') // Je compare ici si le nombre de messages du membre sont supérieures ou égales à 10
{
$show['table'] = true; // Là, j'affecte true à $show['table'];
}Après, choisis la méthode que tu souhaites utiliser :)
Bec à Fuel
27/11/2006, 00h07
ESF: $post[postcount] correspond au nombre de message affichés, non ? Pas au nombre de message du membre.
Il suffit de positionner cette variable quelque part dans le message pour voir qu'elle s'incrémente à chaque message.
Par contre, le coup des simples quotes autour de la valeur à tester (dans la question initiale) me parait louche :cool:
On est donc en présence de chaînes de caractères dans ce cas et '100' sera toujours classé avant '20'. Donc 101 messages ne seront pas supérieurs à 20 messages...
J'ai testé trop vite. Effectivement, ca fait pas ce qui est demandé.
analyste
27/11/2006, 00h15
<if condition="$post['posts'] >= '10'"></if>Si le nombre de messages est supérieur ou égal à 10...
Dans la programmation (du moins PHP, je pense que ça doit être similaire pour le C++ et variantes), les conditions sont vérifiées selon leur nature. Un == ne correspond pas à un = (== -> opérateur de comparaison, = -> opérateur d'affection).
Donc, dans les condition, on compare, donc == (ou >= ou <= ou encore != pour vérifier une différence).
Exemple :if ($post['posts'] >= '10') // Je compare ici si le nombre de messages du membre sont supérieures ou égales à 10
{
$show['table'] = true; // Là, j'affecte true à $show['table'];
}Après, choisis la méthode que tu souhaites utiliser :)
j'ai ce message d'erreur quand j'essaye d'enregister la template
L'erreur suivante s'est produite en essayant d'évaluer ce template :
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in ........................./forum/includes/adminfunctions_template.php(3596) : eval()'d code on line 56
Ceci a probablement été provoqué par un expression conditionnelle mal formulée. Il est fortement recommandé de corriger cette erreur avant de continuer. Vous pouvez néanmoins ignorer cet avertissement et continuer.
Pitchoune
27/11/2006, 00h25
Vérifie que tu as bien un </if> pour un <if condition="...">.
Cette erreur survient quand celui-ci a été évalué avec des erreurs PHP.
analyste
27/11/2006, 00h28
ESF: $post[postcount] correspond au nombre de message affichés, non ? Pas au nombre de message du membre.
Il suffit de positionner cette variable quelque part dans le message pour voir qu'elle s'incrémente à chaque message.
Par contre, le coup des simples quotes autour de la valeur à tester (dans la question initiale) me parait louche :cool:
On est donc en présence de chaînes de caractères dans ce cas et '100' sera toujours classé avant '20'. Donc 101 messages ne seront pas supérieurs à 20 messages...
non dans ce cas le cadre est affiché dans tous les cas
même si le membre a moin de 10 post
je crois qu'il s'agit ici du membre visiteur
analyste
27/11/2006, 00h30
Vérifie que tu as bien un </if> pour un <if condition="...">.
Cette erreur survient quand celui-ci a été évalué avec des erreurs PHP.
je crois plutôt que les parenthéses ne sont pas permise dans la template
Pitchoune
27/11/2006, 00h31
Lesquels de parenthèses ? :confused:
analyste
27/11/2006, 00h42
Lesquels de parenthèses ? :confused:
tu vas peut-être rigoler
mais c'est quad j'ai essayé de mettre la condition comme ça
if ($post['posts'] >= '10')
Pitchoune
27/11/2006, 00h44
Tu m'étonnes qu'il te sorte une erreur.... '-_-
Sinon, ça marche avec ma version du code ou non ?
analyste
27/11/2006, 00h52
Tu m'étonnes qu'il te sorte une erreur.... '-_-
Sinon, ça marche avec ma version du code ou non ?
avec ça?
if ($post['posts'] >= '10')
j'ai pas osé prendre le risque d'enregistrer
après ce message d'erreur
Pitchoune
27/11/2006, 00h54
Avec :<if condition="$post['posts'] >= '10'"></if>
analyste
27/11/2006, 01h15
Avec :<if condition="$post['posts'] >= '10'"></if>
je t'ennuis par ce bout de code :(
curieusement ça ignore les membres qui ont entre 1000 et 2000 post
ça marche pour ceux qui ont plus 10 moin que 1000
et pour ceux qui ont + de 2000 post
curieux :crazy:
analyste
27/11/2006, 01h18
y'a t-il pas moyen de convertir la chaine de caractére à ce que je vois en numérique ??? str(de quelque chose)
analyste
27/11/2006, 03h28
la solution
je l'ai trouvé ici
http://www.vbulletin.org/forum/showthread.php?p=904614#post904614
figurez-vous un codeur voulait que les signatures n'apparaissent que pour les membres ayant dépassé les 10 post et il a rencontré exactement le même problème
au delà de 999 post son code ne fonctionnait pas.
ce n'etait évident
discuté par quelques codeurs de vb.org et ce n'a pas été trouvé tout de suite
<if condition="!is_numeric($post[posts]) OR $post[posts] >=10">
vBulletin® v.3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org