Changer la façon d'afficher les smileys [Réglé]
Besoin d'un peu d'aide pour le faire
Evolutions
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
J'ai un petit projet pour le forum, en fait pour modifier le mien à tout le moins et qui donnera peut-être des idées.

Je veux afficher les smileys dans un div à gauche du champs Répondre. Donc, je veux éliminer le petit bouton dans l'éditeur car sur mon site j'ai beaucoup de smileys (je sais que c'est beaucoup, mais j'aime ça offrir du choix) et j'aimerais pouvoir les insérer dans ce div afin d'accéder rapidement à la majorité.
J'ai identifé le template que je dois modifier (forum_topic.tpl), j'ai trouvé la fonction actuelle qui remplie le petit div au-dessus du bouton dans l'éditeur (bbcode_editor.class.php) et j'ai aussi vu comment est rempli le petit div actuel (editor.tpl).
Ma question : comment je fais pour que la fonction de remplissage actuelle (celle qui se retrouve dans bbcode_editor.class.php) tiennent compte de mon div dans le template forum_topic.tpl ? En effet, si dans ce template je fais bêtement :
Code TPL :
Ça ne fonctionne pas évidemment.
Merci à l'avance de votre aide.
CrowkaiT Membre non connecté
-
Modérateur
- Voir le profil du membre CrowkaiT
- Inscrit le : 17/06/2005
- Site internet
- Groupes :
-
Equipe Historique
Pas de support par messages privés! Pensez à mettre vos messages en réglé en cliquant sur le bouton réglé!
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
J'ai fait l'assignation des variables suivantes dans le fichier topic.php :
Code PHP :
$Template->assign_block_vars('smiley',array( 'IMG'=>$img, 'CODE'=>addslashes($code_smile), 'END_LINE'=>$i%$smile_by_line==0?' ':'' )); $Template->assign_vars(array( 'C_BBCODE_SMILEY_MORE'=>true, 'L_ALL_SMILEY'=>$LANG['all_smiley'], 'L_SMILEY'=>$LANG['smiley'] ));
Le problème c'est qu'il me manque plusieurs choses parce que j'obtiens les erreurs suivantes :
Suggestion : Undefined variable: img dans le fichier D:xampplitehtdocsphpboostforumtopic.php à la ligne 568
Suggestion : Undefined variable: code_smile dans le fichier D:xampplitehtdocsphpboostforumtopic.php à la ligne 569
Suggestion : Undefined variable: smile_by_line dans le fichier D:xampplitehtdocsphpboostforumtopic.php à la ligne 570
Avertissement : Division by zero dans le fichier D:xampplitehtdocsphpboostforumtopic.php à la ligne 570
En effet, il manque plusieurs fonctions et variables qui proviennent du fichier bbcode_editor.class.php. Alors, faudrait-il que je fasse un include ou un require_once ?
Merci encore de ton aide.
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
CrowkaiT Membre non connecté
-
Modérateur
- Voir le profil du membre CrowkaiT
- Inscrit le : 17/06/2005
- Site internet
- Groupes :
-
Equipe Historique
Pas de support par messages privés! Pensez à mettre vos messages en réglé en cliquant sur le bouton réglé!
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
Est-ce que je copie la boucle au grand complet ou je fais comme ReidLos suggère ?
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement

Donc copie la boucle :
sa savoir :
Code PHP :
$smile_max = 28; //Nombre de smiley maximim avant affichage d'un lien vers popup. $smile_by_line = 5; //Smiley par ligne. $height_max = 50; $width_max = 50; $nbr_smile = count($_array_smiley_code); $i = 1; $z = 0; foreach ($_array_smiley_code as $code_smile => $url_smile) { if ($z == $smile_max) { $z++; break; } $width_source = 18; //Valeur par défaut. $height_source = 18; // On recupère la hauteur et la largeur de l'image. list($width_source, $height_source) = @getimagesize(PATH_TO_ROOT . '/images/smileys/' . $url_smile); if ($width_source > $width_max || $height_source > $height_max) { if ($width_source > $height_source) { $ratio = $width_source / $height_source; $width = $width_max; $height = $width / $ratio; } else { $ratio = $height_source / $width_source; $height = $height_max; $width = $height / $ratio; } } else { $width = $width_source; $height = $height_source; } $img = '<img src="' . TPL_PATH_TO_ROOT . '/images/smileys/' . $url_smile . '" height="' . $height . '" width="' . $width . '" alt="' . $code_smile . '" title="' . $code_smile . '" />'; $template->assign_block_vars('smiley', array( 'IMG' => $img, 'CODE' => addslashes($code_smile), 'END_LINE' => $i % $smile_by_line == 0 ? ' ' : '' )); $i++; $z++; } if ($z > $smile_max) //Lien vers tous les smiley! { $template->assign_vars(array( 'C_BBCODE_SMILEY_MORE' => true, 'L_ALL_SMILEY' => $LANG['all_smiley'], 'L_SMILEY' => $LANG['smiley'] )); }
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
Oki, ça fait du sens effectivement de ne pas toucher aux fichiers du kernel.
Bon, j'ai fait ça, mais j'ai une erreur encore. Au départ, il me disait que la variable $_array_smiley_code n'était pas définie. Dans bbcode_editor.class.php elle est définie comme une global. J'ai donc ajouté cette définition au-dessus de la boucle. L'erreur qui persiste :
Avertissement : Invalid argument supplied for foreach() dans le fichier D:xampplitehtdocsphpboostforumtopic.php à la ligne 562
Une idée ? Je ne vois pas là....
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Code PHP :
a la place
include(PATH_TO_ROOT . '/cache/smileys.php');
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
En fait, après analyse du fichier bbcode_editor.class.php, j'ai remarqué qu'avant cette boucle il y avait cette ligne de code qui s'y trouvait :
Code PHP :
$Cache->load('smileys');
Une fois inséré, ça fonctionne. Les smileys apparaissent dans mon div. Ce qui revient à ce que tu me suggères.
Malheureusement, tout n'est pas encore réglé. La fonction d'insertion ne semble pas fonctionner.
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Code PHP :
foreach ($_array_smiley_code as $code => $img)
{
$smiley_code[] = '`(?:(?![a-z0-9]))(?<!&[a-z]{4}|&[a-z]{5}|&[a-z]{6}|")(' . preg_quote($code) . ')(?:(?![a-z0-9]))`';
$smiley_img_url[] = '<img src="/images/smileys/' . $img . '" alt="' . addslashes($code) . '" class="smiley" />';
}
$return = preg_replace($smiley_code, $smiley_img_url, $return);DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
Oki, j'ai essayé ça, mais ça ne fonctionne pas. D'ailleurs, la variable $return doit être définie à quoi ? Je mets où ce code ? Après ma boucle ?
J'ai essayé en insérant toute la fonction et ça ne fonctionne pas.
Si on se réfère à editor.tpl, dans le lien de chaque smiley il y a la fonction javascript insertbbcode. On dirait qu'il n'appelle pas cette fonction, est-ce possible que ce soit ça qui fait que ça ne fonctionne pas ?
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
DaaX Membre non connecté
Booster Mortier
-
Booster Mortier
- Voir le profil du membre DaaX
- Inscrit le : 08/09/2009
- Site internet
Je suis bloqué et je sèche....
Je sens qu'il me manque quelque chose mais je ne sais quoi. L'affichage des bbcode se fait dans mon div, mais lorsque je clique sur un smiley, rien n'est inséré dans le champs de réponse.
On dirait qu'il manque une info pour appeler la fonction insertbbcode :
Code JAVASCRIPT :
onclick="insertbbcode('{smiley.CODE}', 'smile', '{FIELD}');"
Après analyse avec Firebug, je remarque que la variable {FIELD} est vide. Donc, je présume que la fonctione ne retourne rien....
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie