27-12-2011, 3:24
Dans ce tutoriel, nous allons apprendre à préremplir le champ d'écriture de messages.
Ceci vous permet de proposer un modèle de message à vos membres.
Vous pouvez utiliser ce modèle, soit sur la page de création d'une nouvelle discussion, soit sur la page de rédaction d'une réponse à une discussion existante, soit aux deux.
Vous pouvez également restreindre l'affichage de ce modèle à certains sous-forums uniquement, mais pour cela, il vous faudra un plugin permettant d'utiliser le code PHP dans les templates (téléchargeable ici : http://mybbhacks.zingaburga.com/showthread.php?tid=260).
Étape 1 : Appliquer le préremplissage à un ou plusieurs sous-forums spécifiques.
Si vous souhaitez que le préremplissage soit appliqué à toutes les nouvelles discussions ou nouvelles réponses, ignorez cette étape.
Vérifiez que le plugin cité précédemment est installé et activé.
Relevez les identifiants des sous-forums dans lesquels vous souhaitez activer le préremplissage en vous rendant par exemple dans la liste des sous-forums du panneau d'administration. En cliquant sur le sous-forum choisi, vous verrez apparaître à la fin de la barre d'adresse "fid=X", avec un nombre à la place du X : il s'agit de l'identifiant en question.
Pour ma part, j'ai créé un sous-forum "Présentations", et il a pour identifiant 3.
Si vous souhaitez activer le préremplissage dans le cas de l'ouverture d'une nouvelle discussion, vous devrez modifier le template "newthread" ; si vous souhaitez activer le préremplissage dans le cas d'une réponse à une discussion existante, vous devrez modifier le template "newreply".
Évidemment, si vous souhaitez l'activer dans les deux cas, il faudra modifier les deux templates.
Localisez le code suivant :
(Pour une raison qui m'échappe, sur le template "newreply", par défaut, il y a une espace après "tabindex="2"" qui n'est pas dans "newthread"...)
Dans les codes ci-dessous, le "ICI" montre une position qui sera utilisée dans la seconde étape.
Pour appliquer le préremplissage à un seul sous-forum, remplacez cette ligne par :
Pour appliquer un préremplissage identique à plusieurs sous-forums, utilisez la ligne ci-dessous :
Vous pouvez ajouter des " OR $_GET['fid'] == Z" à volonté entre la position du Y et le "then".
Pour appliquer un préremplissage différent pour plusieurs sous-forums, utilisez le code suivant :
Vous pouvez rajouter des "<elseif $_GET['fid'] == Z then>ICI" à volonté en les plaçant juste avant le "</if>" pour augmenter le nombre de cas.
Si vous avez quelques notions de PHP, vous pouvez également combiner les deux types de codes pour appliquer un certain remplissage à deux sous-forums et un autre à un autre sous-forum, comme sur l'exemple ci-dessous :
Étape 2 : Choisir le texte qui préremplira le champ.
Ici aussi, si vous souhaitez activer le préremplissage dans le cas de l'ouverture d'une nouvelle discussion, vous devrez modifier le template "newthread" ; si vous souhaitez activer le préremplissage dans le cas d'une réponse à une discussion existante, vous devrez modifier le template "newreply".
Évidemment, si vous souhaitez l'activer dans les deux cas, il faudra modifier les deux templates.
Si vous n'avez pas suivi la première étape, la position qui sera utilisée dans la suite du tutoriel est celle-ci :
Si vous avez suivi la première étape, il peut y avoir un ou plusieurs ICI, auquel cas c'est ceux-ci qu'il faudra utiliser.
À la place du ICI, vous allez pouvoir écrire le texte de votre choix.
Le texte que vous allez entrer sera interpréter comme du texte simple, le code HTML sera donc affiché tel quel.
Mon Exemple : Une présentation en bonne et due forme.
J'ai mis le tutoriel en oeuvre en même temps que je l'ai écrit sur mon forum de test.
Lors de la création d'une nouvelle discussion dans le sous-forum "Présentations" (identifiant 3), je veux qu'un "squelette" de présentation soit disponible pour que la personne qui veut se présenter n'ait plus qu'à entrer les informations de son choix.
Je vais vous donner mon template "newthread" complet :
Comme vous pouvez le constater, il y a quelques petites choses en plus, en réalité, je lui ai demandé de n'afficher le préremplissage que s'il n'y a rien de mieux à afficher : cela permet, lorsque l'utilisateur a demandé une prévisualisation de son message, d'afficher le texte qu'il avait précédemment entré au lieu du squelette vide.
Ceci n'est pas réalisable sans le plugin nécessaire pour l'étape 1, et j'ai préféré ne pas vous l'apprendre pour éviter d'embrouiller les plus néophytes d'entre vous. Les personnes ayant des bases en PHP comprendront aisément ce bout de code.
J'ai également utilisé un code similaire pour préremplir le titre du sujet, si vous avez quelques connaissances, vous pouvez également vous en inspirer.
Enfin, {$mybb->user['username']} est remplacé par le nom de l'utilisateur, tout simplement !
Annexe : Petites traductions de code pour ceux qui veulent mieux comprendre...
Cette ligne gère l'affichage des champs préfixe de discussion et titre du sujet.
Signifie que la valeur par défaut du champ titre du sujet est :
SI l'on se trouve dans le sous-forum ayant l'identifiant 3 ET que le sujet n'a pas déjà été précisé dans une prévisualisation précédente, ALORS, afficher "Présentation de {$mybb->user['username']}", SINON, afficher "{$subject}".
{$mybb->user['username']} est automatiquement remplacé par le nom de l'utilisateur et {$subject} par le sujet précisé dans la prévisualisation précédente.
Cette ligne gère l'affichage du champ texte du message. Elle détermine la taille du champ, mais définit aussi le texte par défaut du champ comme étant :
SI l'on se trouve dans le sous-forum ayant l'identifiant 3 ET que le message n'a pas déjà été précisé dans une prévisualisation précédente, ALORS, "Pseudonyme : {$mybb->user['username']}
Prénom :
Nom :
Âge :
Sexe :
Ville :
Présentation :
", SINON, "{$message}".
{$mybb->user['username']} est automatiquement remplacé par le nom de l'utilisateur et {$message} par le message précisé dans la prévisualisation précédente.
Captures d'Écran : L'affichage du squelette et un exemple de présentation utilisant le squelette.
La première capture d'écran vous montre que le squelette s'affiche effectivement lorsqu'on crée une nouvelle discussion dans le sous-forum "Présentations" (sinon, il ne s'affiche pas), y compris dans le titre de la discussion ("Présentation de Saphir").
[attachment=1042]
Conclusion
Voila, un tutoriel un peu long, mais il fallait au moins ça pour le détailler un minimum.
Si vous avez des questions ou des remarques, je reste à votre disposition !
![[Image: 88x31.png]](http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png)
Ceci vous permet de proposer un modèle de message à vos membres.
Vous pouvez utiliser ce modèle, soit sur la page de création d'une nouvelle discussion, soit sur la page de rédaction d'une réponse à une discussion existante, soit aux deux.
Vous pouvez également restreindre l'affichage de ce modèle à certains sous-forums uniquement, mais pour cela, il vous faudra un plugin permettant d'utiliser le code PHP dans les templates (téléchargeable ici : http://mybbhacks.zingaburga.com/showthread.php?tid=260).
Étape 1 : Appliquer le préremplissage à un ou plusieurs sous-forums spécifiques.
Si vous souhaitez que le préremplissage soit appliqué à toutes les nouvelles discussions ou nouvelles réponses, ignorez cette étape.
Vérifiez que le plugin cité précédemment est installé et activé.
Relevez les identifiants des sous-forums dans lesquels vous souhaitez activer le préremplissage en vous rendant par exemple dans la liste des sous-forums du panneau d'administration. En cliquant sur le sous-forum choisi, vous verrez apparaître à la fin de la barre d'adresse "fid=X", avec un nombre à la place du X : il s'agit de l'identifiant en question.
Pour ma part, j'ai créé un sous-forum "Présentations", et il a pour identifiant 3.
Si vous souhaitez activer le préremplissage dans le cas de l'ouverture d'une nouvelle discussion, vous devrez modifier le template "newthread" ; si vous souhaitez activer le préremplissage dans le cas d'une réponse à une discussion existante, vous devrez modifier le template "newreply".
Évidemment, si vous souhaitez l'activer dans les deux cas, il faudra modifier les deux templates.
Localisez le code suivant :
PHP Code:
<textarea name="message" id="message" rows="20" cols="70" tabindex="2">{$message}</textarea>
Dans les codes ci-dessous, le "ICI" montre une position qui sera utilisée dans la seconde étape.
Pour appliquer le préremplissage à un seul sous-forum, remplacez cette ligne par :
PHP Code:
<textarea id="message" name="message" rows="20" cols="70" tabindex="2"><if $_GET['fid'] == X then>ICI</if>{$message}</textarea>
Pour appliquer un préremplissage identique à plusieurs sous-forums, utilisez la ligne ci-dessous :
PHP Code:
<textarea id="message" name="message" rows="20" cols="70" tabindex="2"><if $_GET['fid'] == X OR $_GET['fid'] == Y then>ICI</if>{$message}</textarea>
Pour appliquer un préremplissage différent pour plusieurs sous-forums, utilisez le code suivant :
PHP Code:
<textarea id="message" name="message" rows="20" cols="70" tabindex="2"><if $_GET['fid'] == X then>ICI<elseif $_GET['fid'] == Y then>ICI</if>{$message}</textarea>
Si vous avez quelques notions de PHP, vous pouvez également combiner les deux types de codes pour appliquer un certain remplissage à deux sous-forums et un autre à un autre sous-forum, comme sur l'exemple ci-dessous :
PHP Code:
<textarea id="message" name="message" rows="20" cols="70" tabindex="2"><if $_GET['fid'] == X OR $_GET['fid'] == Y then>ICI<elseif $_GET['fid'] == Z then>ICI</if>{$message}</textarea>
Étape 2 : Choisir le texte qui préremplira le champ.
Ici aussi, si vous souhaitez activer le préremplissage dans le cas de l'ouverture d'une nouvelle discussion, vous devrez modifier le template "newthread" ; si vous souhaitez activer le préremplissage dans le cas d'une réponse à une discussion existante, vous devrez modifier le template "newreply".
Évidemment, si vous souhaitez l'activer dans les deux cas, il faudra modifier les deux templates.
Si vous n'avez pas suivi la première étape, la position qui sera utilisée dans la suite du tutoriel est celle-ci :
PHP Code:
<textarea name="message" id="message" rows="20" cols="70" tabindex="2">ICI{$message}</textarea>
À la place du ICI, vous allez pouvoir écrire le texte de votre choix.
Le texte que vous allez entrer sera interpréter comme du texte simple, le code HTML sera donc affiché tel quel.
Mon Exemple : Une présentation en bonne et due forme.
J'ai mis le tutoriel en oeuvre en même temps que je l'ai écrit sur mon forum de test.
Lors de la création d'une nouvelle discussion dans le sous-forum "Présentations" (identifiant 3), je veux qu'un "squelette" de présentation soit disponible pour que la personne qui veut se présenter n'ait plus qu'à entrer les informations de son choix.
Je vais vous donner mon template "newthread" complet :
PHP Code:
<html>
<head>
<title>{$lang->newthread_in}</title>
{$headerinclude}
<script type="text/javascript" src="jscripts/post.js?ver=1400"></script>
</head>
<body>
{$header}
{$preview}
{$thread_errors}
{$attacherror}
<form action="newthread.php?fid={$fid}&processed=1" method="post" enctype="multipart/form-data" name="input">
<input type="hidden" name="my_post_key" value="{$mybb->post_code}" />
<table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder">
<tr>
<td class="thead" colspan="2"><strong>{$lang->post_new_thread}</strong></td>
</tr>
{$loginbox}
<tr>
<td class="trow2" width="20%"><strong>{$lang->thread_subject}</strong></td>
<td class="trow2">{$prefixselect}<input type="text" class="textbox" name="subject" size="40" maxlength="85" value="<if $_GET['fid'] == 3 AND !($subject) then>Présentation de {$mybb->user['username']}<else/>{$subject}</if>" tabindex="1" /></td>
</tr>
{$posticons}
<tr>
<td class="trow2" valign="top"><strong>{$lang->your_message}</strong>{$smilieinserter}</td>
<td class="trow2">
<textarea name="message" id="message" rows="20" cols="70" tabindex="2"><if $_GET['fid'] == 3 AND !($message) then>Pseudonyme : {$mybb->user['username']}
Prénom :
Nom :
Âge :
Sexe :
Ville :
Présentation :
<else/>{$message}</if></textarea>
{$codebuttons}
{$multiquote_external}
</td>
</tr>
<tr>
<td class="trow1" valign="top"><strong>{$lang->post_options}</strong></td>
<td class="trow1"><span class="smalltext">
<label><input type="checkbox" class="checkbox" name="postoptions[signature]" value="1" tabindex="7"{$postoptionschecked['signature']} /> {$lang->options_sig}</label>
{$disablesmilies}</span></td>
</tr>
{$modoptions}
{$subscriptionmethod}
{$pollbox}
{$captcha}
</table>
{$attachbox}
<br />
<div style="text-align:center"><input type="submit" class="button" name="submit" value="{$lang->post_thread}" tabindex="4" accesskey="s" /> <input type="submit" class="button" name="previewpost" value="{$lang->preview_post}" tabindex="5" />{$savedraftbutton}</div>
<input type="hidden" name="action" value="do_newthread" />
<input type="hidden" name="posthash" value="{$posthash}" />
<input type="hidden" name="attachmentaid" value="" />
<input type="hidden" name="attachmentact" value="" />
<input type="hidden" name="quoted_ids" value="{$quoted_ids}" />
<input type="hidden" name="tid" value="{$tid}" />
{$editdraftpid}
</form>
{$forumrules}
{$footer}
</body>
</html>
Ceci n'est pas réalisable sans le plugin nécessaire pour l'étape 1, et j'ai préféré ne pas vous l'apprendre pour éviter d'embrouiller les plus néophytes d'entre vous. Les personnes ayant des bases en PHP comprendront aisément ce bout de code.
J'ai également utilisé un code similaire pour préremplir le titre du sujet, si vous avez quelques connaissances, vous pouvez également vous en inspirer.
Enfin, {$mybb->user['username']} est remplacé par le nom de l'utilisateur, tout simplement !

Annexe : Petites traductions de code pour ceux qui veulent mieux comprendre...
PHP Code:
<td class="trow2">{$prefixselect}<input type="text" class="textbox" name="subject" size="40" maxlength="85" value="<if $_GET['fid'] == 3 AND !($subject) then>Présentation de {$mybb->user['username']}<else/>{$subject}</if>" tabindex="1" /></td>
PHP Code:
value="<if $_GET['fid'] == 3 AND !($subject) then>Présentation de {$mybb->user['username']}<else/>{$subject}</if>"
SI l'on se trouve dans le sous-forum ayant l'identifiant 3 ET que le sujet n'a pas déjà été précisé dans une prévisualisation précédente, ALORS, afficher "Présentation de {$mybb->user['username']}", SINON, afficher "{$subject}".
{$mybb->user['username']} est automatiquement remplacé par le nom de l'utilisateur et {$subject} par le sujet précisé dans la prévisualisation précédente.
PHP Code:
<textarea name="message" id="message" rows="20" cols="70" tabindex="2"><if $_GET['fid'] == 3 AND !($message) then>Pseudonyme : {$mybb->user['username']}
Prénom :
Nom :
Âge :
Sexe :
Ville :
Présentation :
<else/>{$message}</if></textarea>
SI l'on se trouve dans le sous-forum ayant l'identifiant 3 ET que le message n'a pas déjà été précisé dans une prévisualisation précédente, ALORS, "Pseudonyme : {$mybb->user['username']}
Prénom :
Nom :
Âge :
Sexe :
Ville :
Présentation :
", SINON, "{$message}".
{$mybb->user['username']} est automatiquement remplacé par le nom de l'utilisateur et {$message} par le message précisé dans la prévisualisation précédente.
Captures d'Écran : L'affichage du squelette et un exemple de présentation utilisant le squelette.
La première capture d'écran vous montre que le squelette s'affiche effectivement lorsqu'on crée une nouvelle discussion dans le sous-forum "Présentations" (sinon, il ne s'affiche pas), y compris dans le titre de la discussion ("Présentation de Saphir").
[attachment=1042]
Conclusion
Voila, un tutoriel un peu long, mais il fallait au moins ça pour le détailler un minimum.
Si vous avez des questions ou des remarques, je reste à votre disposition !
![[Image: 88x31.png]](http://i.creativecommons.org/l/by-nc-sa/3.0/88x31.png)