FluxBB.fr

Le site des utilisateurs francophones de FluxBB.

Recherche rapide

Ajouter un champ dans le profil

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

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

Dans la base de données

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 :D.

Dans 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 :)).

Partie membre

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

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:

Acquisition des données

Là, c'est du code pur et dur :)

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)

Affichage des données

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

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à :).

Annexe

Dans viewtopic.php

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

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>';

Remarques

En vous inspirant du profil, 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 ici ;) !

 
fluxbb_1_4/astuces/ajouter_champ_profil.txt · Dernière modification: 2011/05/02 12:48 par fanf73