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