FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Recherche rapide

Vous n'êtes pas identifié(e).

Version 1.4.13 : [.tar.gz][.zip] (maj 20/10/2014)
Pack langue française pour 1.4.x : [.zip] (maj 06/01/2012)

Branche 1.5.x : fluxbb.org
Pack langue française pour 1.5.x : [.zip] (maj 14/01/2016)

Ancienne Version 1.2.24 fr : [.zip] (maj 26/08/2011)

Vous avez un problème ?
Avant de poser votre question sur les forums d'entraide nous vous invitons à consulter :

#1 05-12-2010 16:31:55

adaur
Habitué très actif
Lieu : Derrière Notepad ++ !
Inscription : 25-09-2008
Messages : 1 936
Site Web

Champ personnalisé dans le profil

Aujourd'hui, une petite astuce qui devrait servir a pas mal de monde smile

Admettons que vous voulez demander à un utilisateur s'il aime ou pas Noël (oui/non) big_smile.

1. La BDD

Au niveau des données en BDD, ça va être du binaire: 0 ou 1. Un champ TINYINT(1) dans la table users suffira donc, voici la requête à effectuer depuis Phpmyadmin:

ALTER TABLE `users` ADD `noel` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '1' AFTER `show_sig` 

Par défaut, c'est 1 => ils aiment Noël big_smile.

2. Le profil

Maintenant, on va dans le profile.php, on va intégrer ce champ supplémentaire dans la section Personnel (avec le nom, le lieu, le site ça va bien je trouve smile).

   2.1 Modification partie membre

Modifions la partie membre en premier (modification de l'info par l'utilisateur lui-même, ou un admodo smile):

Trouver: (partie "Site web")

<p class="buttons"><input type="submit" name="update" value="<?php echo $lang_common['Submit'] ?>" /> <?php echo $lang_profile['Instructions'] ?></p>

Ajouter avant:

                <div class="inform">
                    <fieldset>
                        <legend>Informations supplémentaires</legend>
                        <div class="infldset">
                            <p>Laissez nous en savoir un peu plus sur vous ;-) !</p>
                            <div class="rbox">
                                <label><input type="checkbox" name="form[noel]" value="1"<?php if ($user['noel'] == '1') echo ' checked="checked"' ?> />Aimez vous Noël?</label><br /></label>
                            </div>
                        </div>
                    </fieldset>
                </div>

ceci donnera:

2010-12-05_160847.png

   2.2 Acquisition des données

Là, c'est du code pur et dur smile

Après

'location'        => pun_trim($_POST['form']['location']),

ajouter

'noel'            => isset($_POST['form']['noel']) ? '1' : '0',

(récupération sécurisée du POST : 0 ou 1)

3. Affichage des données

Maintenant, dernière étape logique, on va montrer ce qui est enregistré smile.

On ajoute le nouveau champ dans la liste des données à récupérer, en cherchant:

$result = $db->query('SELECT u.username, u.email, u.title, u.realname, u.url, u.jabber, u.icq, u.msn, u.aim, u.yahoo, u.location, u.signature, u.disp_topics, u.disp_posts, u.email_setting, u.notify_with_post, u.auto_notify, u.show_smilies, u.show_img, u.show_img_sig, u.show_avatars, u.show_sig, u.timezone, u.dst, u.language, u.style, u.num_posts, u.last_post, u.registered, u.registration_ip, u.admin_note, u.date_format, u.time_format, g.g_id, g.g_user_title, g.g_moderator FROM '.$db->prefix.'users AS u LEFT JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id WHERE u.id='.$id) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());

et en ajoutant

, u.noel

après

u.show_sig

Affichage dans profile.php: chercher

    if ($user['url'] != '')
    {
        $user['url'] = pun_htmlspecialchars(($pun_config['o_censoring'] == '1') ? censor_words($user['url']) : $user['url']);
        $user_personal[] = '<dt>'.$lang_profile['Website'].'</dt>';
        $user_personal[] = '<dd><span class="website"><a href="'.$user['url'].'">'.$user['url'].'</a></span></dd>';
    }

ajouter après

    if ($user['noel'] == '1')
        $noel = 'Oui';
    else
        $noel = 'Non';
        
    $user_personal[] = '<dt>Aime Noêl?</dt>';
    $user_personal[] = '<dd>'.$noel.'</dd>';

Et voilà smile.

4. Annexe

   4.1 Dans viewtopic.php

Pourquoi ne pas afficher cette info dans les topics, en dessous du compteur de messages? wink

Dans la requête

$result = $db->query('SELECT u.email, u.title, u.url, u.location, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM '.$db->prefix.'posts AS p INNER JOIN '.$db->prefix.'users AS u ON u.id=p.poster_id INNER JOIN '.$db->prefix.'groups AS g ON g.g_id=u.group_id LEFT JOIN '.$db->prefix.'online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.id IN ('.implode(',', $post_ids).') ORDER BY p.id', true) or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());

ajouter

, u.noel

après

u.signature

pour récupérer le 0/1, puis après

            if ($pun_config['o_show_post_count'] == '1' || $pun_user['is_admmod'])
                $user_info[] = '<dd><span>'.$lang_topic['Posts'].' '.forum_number_format($cur_post['num_posts']).'</span></dd>';

ajouter

            if ($cur_post['noel'] == '1')
                $noel = 'Oui';
            else
                $noel = 'Non';
                
            $user_info[] = '<dd><span>Aime Noël? '.$noel.'</span></dd>';

   4.2 Remarques

En vous inspirant du profile, vous pouvez également faire un menu déroulant (s'inspirer de la selection des styles), ou un champ pour rentrer ses propres valeurs (s'inspirer du nombre de messages/topics par page).

C'est encore plus simple si vous désirez créer une seconde Note admin, c'est à dire un champ du type URL du site, vous n'aurez qu'a recopier à la lettre ceci, mais dans ce cas il ne faudra pas utiliser TINYINT(1) en BDD mais plutôt du VARCHAR(255).

Si vous avez d'autres questions, je suis à l'écoute wink !

Sur le Wiki

Dernière modification par adaur (05-12-2010 20:33:46)


"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#2 05-12-2010 16:57:58

max2610
Habitué actif
Lieu : Bretagne
Inscription : 07-11-2010
Messages : 272
Site Web

Re : Champ personnalisé dans le profil

Bonjour,
Super tutoriel !
Comment faire pour afficher un liste déroulante ? Quels valeurs mettre ?
Merci d'avance,
Max

Hors ligne

#3 05-12-2010 18:24:27

WinuX
Habitué actif
Inscription : 17-07-2010
Messages : 390
Site Web

Re : Champ personnalisé dans le profil

Bonjour,

Pour un liste déroulante c'est du simple xHtml, je te renvoie sur le site du zéro avec pour recherche, le fonctionnement des balises <Select>

Merci Adaur pour ce tuto, il sera surement très utile pour beaucoup wink


What's Up : All in One - Sous fluxBB 1.5.0 (on dirait pas?)

Hors ligne

#4 05-12-2010 19:54:13

fanf73
Wik-wiki
Lieu : Lyon
Inscription : 12-09-2006
Messages : 4 432
Site Web

Re : Champ personnalisé dans le profil

Merci pour cette contribution qui devrait être utile à pas mal de monde smile. N'hésite pas à la proposer dans l'aide wink


Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.

Hors ligne

#5 05-12-2010 20:32:45

adaur
Habitué très actif
Lieu : Derrière Notepad ++ !
Inscription : 25-09-2008
Messages : 1 936
Site Web

Re : Champ personnalisé dans le profil

fanf73 a écrit :

N'hésite pas à la proposer dans l'aide wink

De rien, c'est ici smile !


"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#6 07-12-2010 18:41:13

max2610
Habitué actif
Lieu : Bretagne
Inscription : 07-11-2010
Messages : 272
Site Web

Re : Champ personnalisé dans le profil

Bonjour,
Pour faire des balises <Select> c'est bon, mais pour les ID c'est plus dur.
Merci d'avance,
Max

Hors ligne

#7 07-12-2010 19:38:51

fanf73
Wik-wiki
Lieu : Lyon
Inscription : 12-09-2006
Messages : 4 432
Site Web

Re : Champ personnalisé dans le profil

Qu'est-ce que tu entends pas "pour les ID" ?


Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.

Hors ligne

#8 08-12-2010 15:04:44

max2610
Habitué actif
Lieu : Bretagne
Inscription : 07-11-2010
Messages : 272
Site Web

Re : Champ personnalisé dans le profil

Bonjour,
Et bien la c'est simple, 1 = J'aime Noël, mais avec une liste de 10 éléments, comme faire ?
Merci d'avance,
Max

Hors ligne

#9 08-12-2010 15:33:54

Otomatic
Régisseur
Lieu : Paris, France
Inscription : 12-12-2005
Messages : 3 475
Site Web

Re : Champ personnalisé dans le profil

Bonjour,

Voilà une manière de procéder pour une liste de choix dans le fichier profile.php.
L'exemple est donné pour trois choix ; pour dix ou plus, le principe est le même :

<div class="inform">
    <fieldset>
        <legend><?php echo $lang_mod_reverse_messages_order['Quickpost legend'] ?></legend>
        <div class="infldset">
            <p class="clearb"><?php echo $lang_mod_reverse_messages_order['Quickpost info'] ?></p>
            <label><?php echo $lang_mod_reverse_messages_order['Quickpost position'] ?>
            <select name="form[rmo_quickpost]">
<?php
            foreach (array(
              0 => $lang_mod_reverse_messages_order['Always bottom'],
              1 => $lang_mod_reverse_messages_order['Follow newest'],
              2 => $lang_mod_reverse_messages_order['Always top']) as $temp => $temp_text)
                echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.($user['rmo_quickpost'] == $temp ? '" selected="selected">' : '">').$temp_text.'</option>'."\n";
?>
            </select>
            <br /></label>
        </div>
    </fieldset>
</div>

et voici le contenu du fichier langue associé :

$lang_mod_reverse_messages_order = array(
   //Gestion dans Profil, Affichage
  'Quickpost legend' => 'Choisissez la position du formulaire de Réponse rapide',
  'Quickpost info' => 'Avec la possibilité <i>Inverser l\'ordre des messages</i>, le formulaire de <i>Réponse rapide</i> peut être placé, à votre choix&#160;:<br />- À côté du plus récent, c\'est-à-dire en haut de page si <i>Message le plus récent en premier</i> ou en bas de page si <i>Message le plus ancien en premier</i><br />- Toujours en haut de page<br />- Toujours en bas de page <i>(Valeur par défaut du forum)</i>',
  'Quickpost position' => 'Position du formulaire de Réponse rapide',
  'Always bottom' => 'Toujours en bas',
  'Follow newest' => 'À côté du plus récent',
  'Always top' => 'Toujours en haut',
);

Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

#10 08-12-2010 16:06:16

fanf73
Wik-wiki
Lieu : Lyon
Inscription : 12-09-2006
Messages : 4 432
Site Web

Re : Champ personnalisé dans le profil

Attention toutefois au type de champ, qui est en TINYINT( 1 ) dans l'exemple du premier message, ce qui n'est pas forcément suffisant quand il y a plus de 2 choix wink


Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.

Hors ligne

#11 08-12-2010 18:09:04

adaur
Habitué très actif
Lieu : Derrière Notepad ++ !
Inscription : 25-09-2008
Messages : 1 936
Site Web

Re : Champ personnalisé dans le profil

fanf73 a écrit :

Attention toutefois au type de champ, qui est en TINYINT( 1 ) dans l'exemple du premier message, ce qui n'est pas forcément suffisant quand il y a plus de 2 choix wink

Salut fanf, pour info: http://forum.webrankinfo.com/champ-tinyint-t51691.html wink

Sinon, Otomatic, bonne solution, mais à titre d'info pour max, si ton forum est en français et destiné à des français, tu peux t'épargner la création d'un fichier de langue, et remplacer

<?php
            foreach (array(
              0 => $lang_mod_reverse_messages_order['Always bottom'],
              1 => $lang_mod_reverse_messages_order['Follow newest'],
              2 => $lang_mod_reverse_messages_order['Always top']) as $temp => $temp_text)
                echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.($user['rmo_quickpost'] == $temp ? '" selected="selected">' : '">').$temp_text.'</option>'."\n";
?>

Par

<?php
            foreach (array(
              0 => 'Ton texte 1',
              1 => 'Ton texte 2',
              2 => 'etc!') as $temp => $temp_text)
                echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.($user['rmo_quickpost'] == $temp ? '" selected="selected">' : '">').$temp_text.'</option>'."\n";
?>

"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#12 18-12-2010 20:25:06

max2610
Habitué actif
Lieu : Bretagne
Inscription : 07-11-2010
Messages : 272
Site Web

Re : Champ personnalisé dans le profil

Bonjour,
Merci pour vos réponses, mais pour ces codes :

adaur a écrit :

Trouver

'location'        => pun_trim($_POST['form']['location']),

ajouter

'noel'            => isset($_POST['form']['noel']) ? '1' : '0',

Trouver

    if ($user['url'] != '')
    {
        $user['url'] = pun_htmlspecialchars(($pun_config['o_censoring'] == '1') ? censor_words($user['url']) : $user['url']);
        $user_personal[] = '<dt>'.$lang_profile['Website'].'</dt>';
        $user_personal[] = '<dd><span class="website"><a href="'.$user['url'].'">'.$user['url'].'</a></span></dd>';
    }

ajouter après

    if ($user['noel'] == '1')
        $noel = 'Oui';
    else
        $noel = 'Non';
        
    $user_personal[] = '<dt>Aime Noêl?</dt>';
    $user_personal[] = '<dd>'.$noel.'</dd>';

Trouver

            if ($pun_config['o_show_post_count'] == '1' || $pun_user['is_admmod'])
                $user_info[] = '<dd><span>'.$lang_topic['Posts'].' '.forum_number_format($cur_post['num_posts']).'</span></dd>';

ajouter

            if ($cur_post['noel'] == '1')
                $noel = 'Oui';
            else
                $noel = 'Non';
                
            $user_info[] = '<dd><span>Aime Noël? '.$noel.'</span></dd>';

Je met quoi ? Car il n'y a pas que des 0 et des 1, pas exemple j'aimerai mettre :
iPhone 3G : 0
iPhone 3GS : 1
iPhone 4 : 2
iPad : 3
...

Merci d'avance,
Max

Hors ligne

#13 19-12-2010 16:11:13

max2610
Habitué actif
Lieu : Bretagne
Inscription : 07-11-2010
Messages : 272
Site Web

Re : Champ personnalisé dans le profil

Et pour la base de donnée :

ALTER TABLE `users` ADD `noel` TINYINT( 1 ) UNSIGNED NOT NULL DEFAULT '1' AFTER `show_sig`

Je change le TINYINT( 1 ) ?

Hors ligne

#14 22-12-2010 13:40:30

max2610
Habitué actif
Lieu : Bretagne
Inscription : 07-11-2010
Messages : 272
Site Web

Re : Champ personnalisé dans le profil

Personne pour m'aider ?

Hors ligne

#15 22-12-2010 14:23:57

PascL
Habitué très actif
Inscription : 06-09-2007
Messages : 554
Site Web

Re : Champ personnalisé dans le profil

exemple d'un oui(1)/non(2)/pas de réponse(tout le reste)

Trouver

'location'        => pun_trim($_POST['form']['location']),

ajouter

'noel'            => isset($_POST['form']['noel']) ? intval($_POST['form']['noel']) : '0',

Trouver

    if ($user['url'] != '')
    {
        $user['url'] = pun_htmlspecialchars(($pun_config['o_censoring'] == '1') ? censor_words($user['url']) : $user['url']);
        $user_personal[] = '<dt>'.$lang_profile['Website'].'</dt>';
        $user_personal[] = '<dd><span class="website"><a href="'.$user['url'].'">'.$user['url'].'</a></span></dd>';
    }

ajouter après

switch(($user['noel'])        
{
case 1:
$noel = 'oui';
break;
case 2:
$noel = 'non';
break;
default:
$noel = 'ptet';
break;
}
    $user_personal[] = '<dt>Aime Noêl?</dt>';
    $user_personal[] = '<dd>'.$noel.'</dd>';

Trouver

            if ($pun_config['o_show_post_count'] == '1' || $pun_user['is_admmod'])
                $user_info[] = '<dd><span>'.$lang_topic['Posts'].' '.forum_number_format($cur_post['num_posts']).'</span></dd>';

ajouter

            switch ($cur_post['noel'] )
{
case 1:
$noel = 'oui';
break;
case 2:
$noel = 'non';
break;
default:
$noel = 'ptet';
break;
}
                
            $user_info[] = '<dd><span>Aime Noêl? '.$noel.'</span></dd>';

Hors ligne

#16 22-12-2010 16:48:48

max2610
Habitué actif
Lieu : Bretagne
Inscription : 07-11-2010
Messages : 272
Site Web

Re : Champ personnalisé dans le profil

Merci beaucoup smile, et niveau base de donnée ? Il faut utiliser quel requête ?
Merci d'avance,
Max

Hors ligne

#17 22-12-2010 17:30:02

adaur
Habitué très actif
Lieu : Derrière Notepad ++ !
Inscription : 25-09-2008
Messages : 1 936
Site Web

Re : Champ personnalisé dans le profil

Désolé de pas avoir répondu plus tôt wink

Ne change rien au niveau de la BDD, tout devrait être fonctionnel avec un TINYINT(1).


"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#18 22-12-2010 18:14:58

max2610
Habitué actif
Lieu : Bretagne
Inscription : 07-11-2010
Messages : 272
Site Web

Re : Champ personnalisé dans le profil

Bonjour,
J'ai appliqué tout ça, mais je n'y arrive pas sad. Voici les 2 fichiers si vous voulez voir : http://www.iphoneforum.fr/forum.rar
Merci pour tout,
Max

Hors ligne

#19 22-12-2010 19:18:11

adaur
Habitué très actif
Lieu : Derrière Notepad ++ !
Inscription : 25-09-2008
Messages : 1 936
Site Web

Re : Champ personnalisé dans le profil

Vu que tu ne mets même pas le champ device dans ta requete l960 (profile.php) ça risque pas de fonctionner tongue


"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#20 22-12-2010 19:21:27

max2610
Habitué actif
Lieu : Bretagne
Inscription : 07-11-2010
Messages : 272
Site Web

Re : Champ personnalisé dans le profil

Je l'ai ajouté, mais j'ai ceci :

Unable to fetch user info.

Hors ligne

#21 22-12-2010 19:57:25

adaur
Habitué très actif
Lieu : Derrière Notepad ++ !
Inscription : 25-09-2008
Messages : 1 936
Site Web

Re : Champ personnalisé dans le profil

Elle existe bien en BDD ?


"As code is more often read than written it's really important to write clean code." - Franz
Twitter: @adaurfr
Mon fork de FluxBB: FeatherBB

Hors ligne

#22 22-12-2010 21:32:45

Mpok
Néo Admin
Inscription : 10-08-2006
Messages : 2 917
Site Web

Re : Champ personnalisé dans le profil

Ajouter :

define ('PUN_DEBUG', 1);

au fichier en pbm, et poster l'erreur complète.


Life is a struggle, programming is a suffer.

Hors ligne

#23 23-12-2010 10:52:30

max2610
Habitué actif
Lieu : Bretagne
Inscription : 07-11-2010
Messages : 272
Site Web

Re : Champ personnalisé dans le profil

Bonjour,
Voici l'erreur dans Profil.php :

File: C:\wamp\www\forum\profile.php
Line: 960

FluxBB reported: Unable to fetch user info

Database reported: Unknown column 'u.device' in 'field list' (Errno: 1054) 

Et dans viewtopic :

File: C:\wamp\www\forum\viewtopic.php
Line: 241

FluxBB reported: Unable to fetch post info

Database reported: Unknown column 'u.device' in 'field list' (Errno: 1054) 

Merci d'avance,
Max

Hors ligne

#24 23-12-2010 11:15:24

Otomatic
Régisseur
Lieu : Paris, France
Inscription : 12-12-2005
Messages : 3 475
Site Web

Re : Champ personnalisé dans le profil

Bonjour,

Dans la requête, tu vas chercher un champ nommé "device" dans la table users alors qu'il n'existe pas. Il faut le créer.

Avant de vouloir ajouter des champs personnalisés dans les profils, il faudrait d'abord comprendre ce qu'est une base de données, ce que sont des tables et des colonnes, comment ça fonctionne, comment est effectuée une requête parce que nous ne sommes pas là pour écrire le code à ta place.
Donc, en premier lire, par exemple http://www.siteduzero.com/tutoriel-3-14 … part_14671


Ce n'est pas parce que l'erreur se propage qu'elle devient vérité. Gandhi
Sont différents : ça et sa - est et ait - à et a - ce et se - mes et mais ou met - été et était - c'est et ces - ce-si et ceci
La vie sans musique est tout simplement une erreur, une fatigue, un exil. Friedrich Nietzsche

Hors ligne

#25 23-12-2010 16:45:49

max2610
Habitué actif
Lieu : Bretagne
Inscription : 07-11-2010
Messages : 272
Site Web

Re : Champ personnalisé dans le profil

Bonjour,
Le problème que j'ai eu venait du nom de la table. Pour moi ce n'est pas 'user' mais 'fluxbb_user'. Maintenant ça fonctionne correctement smile.
Mais je me demande comment faire pour ajouter ce champs dans le fichier register.php.
Merci d'avance,
Max

Hors ligne

Pied de page des forums