[Tutoriel] Meilleur message sur le forum
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Bonsoir,
Je vous propose un petit tutoriel qui permet d'ajouter une fonctionnalité "Meilleur message" dans le forum. L'auteur d'un sujet peut sélectionner des messages comme "meilleur message" donc ça peut être un message en particulier ou plusieurs qui ont résolu son problème par exemple, ça permet du coup de mettre en évidence des messages dans le sujet !
Rendez-vous dans l'administration de votre site, puis dans l'onglet outils, enfin sélectionner Requête SQL
Et mettez ceci
Code SQL :
ALTER TABLE `phpboost_forum_msg` ADD `selected` BOOLEAN NOT NULL DEFAULT FALSE AFTER `user_ip`;
Si vous avez un préfixe différent de phpboost alors mettez votre préfixe une fois fait, cliquer sur "Exécuter"
Rendez-vous dans forum/action.php puis en dessous de
Code PHP :
$page_get = (int)retrieve(GET, 'p', 1);
ajouter ceci:
Code PHP :
$selected = (string) retrieve(GET, 'selected', '');
Toujours dans action.php à la fin remplacer :
Code PHP :
else AppContext::get_response()->redirect('/forum/index.php'); require_once('../kernel/footer_no_display.php');
par
Code PHP :
elseif (!empty($selected) && !empty($idm_get)) { if (!AppContext::get_current_user()->check_level(User::MEMBER_LEVEL)) { //Réservé aux membres. AppContext::get_response()->redirect(UserUrlBuilder::connect()); } try { $message_selected = PersistenceContext::get_querier()->select_single_row(ForumSetup::$forum_message_table, array('*'), 'WHERE id=:id', array( 'id' => $idm_get )); } catch (RowNotFoundException $e) { $error_controller = PHPBoostErrors::unexisting_element(); DispatchManager::redirect($error); } try { $topic = PersistenceContext::get_querier()->select_single_row(PREFIX . 'forum_topics', array('user_id'), 'WHERE id=:id', array('id' => $message_selected['idtopic'])); } catch (RowNotFoundException $e) { $error_controller = PHPBoostErrors::unexisting_element(); DispatchManager::redirect($error_controller); } if ($topic['user_id'] == AppContext::get_current_user()->get_id() or (AppContext::get_current_user()->get_level() >= User::MODERATOR_LEVEL)) { if ($selected === "true") { PersistenceContext::get_querier()->update(ForumSetup::$forum_message_table, array( 'selected' => 1, ), 'WHERE id=:id', array('id' => $idm_get)); header('Location: ' . $_SERVER["HTTP_REFERER"]); exit(); } elseif ($selected === "false") { PersistenceContext::get_querier()->update(ForumSetup::$forum_message_table, array( 'selected' => 0, ), 'WHERE id=:id', array('id' => $idm_get)); header('Location: ' . $_SERVER["HTTP_REFERER"]); exit(); } else { $error_controller = PHPBoostErrors::unexisting_element(); DispatchManager::redirect($error_controller); } } else { $error_controller = PHPBoostErrors::user_not_authorized(); DispatchManager::redirect($error_controller); } } else { AppContext::get_response()->redirect('/forum/index.php'); } require_once('../kernel/footer_no_display.php');
Maintenant rendez-vous dans forum/topic.php et vers la ligne 199 environs
vous devez avoir quelque chose qui ressemble à ceci
Code SQL :
SELECT msg.id, msg.TIMESTAMP, msg.timestamp_edit, msg.user_id_edit, m.user_id, p.question, p.answers, p.voter_id, p.votes, p.TYPE, m.display_name AS login, m.level, m.groups, m.email, m.show_email, m.registration_date AS registered, ext_field.user_avatar, m.posted_msg, ext_field.user_sign, " . $extended_fields_to_recover_list . "m.warning_percentage, m.delay_readonly, m.delay_banned, m2.display_name AS login_edit, s.user_id AS CONNECT, tr.id AS trackid, tr.pm AS trackpm, tr.track AS track, tr.mail AS trackmail, msg.content
à côté de msg.contents, ajouter
Code SQL :
,msg.selected
(n'oubliez pas la virgule juste avant)
Toujours dans ce même fichier, en dessous de
Code PHP :
'C_FORUM_MODERATOR' => $moderator,
Ajouter ceci:
Code PHP :
'C_IS_SELECTED' => $row['selected'] == 1, 'C_AUTHORIZE_SELECTED' => $topic['user_id'] == AppContext::get_current_user()->get_id() or (AppContext::get_current_user()->get_level() >= User::MODERATOR_LEVEL), 'U_FORUM_MSG_SET_SELECTED' => url('.php?selected=true&idm=' . $row['id']), 'U_FORUM_MSG_UNSET_SELECTED' => url('.php?selected=false&idm=' . $row['id']),
et pour finir, allez dans forum/template/forum_topic.tpl ou bien template/votretheme/modules/forum/forum_topic.tpl
Puis remplacer
Code TPL :
<div class="content">
par
Code TPL :
<div class="content" # IF msg.C_IS_SELECTED # style="background:#96ff0a57;" # END IF #>
Et en dessous de
Code TPL :
Ajouter ceci
Code TPL :
# IF msg.C_AUTHORIZE_SELECTED # # IF msg.C_IS_SELECTED # <a href="action{msg.U_FORUM_MSG_UNSET_SELECTED}"><i class="fa fa-circle" aria-hidden="true" title="Ce n'est plus une meilleure réponse"></i></a> # ELSE # <a href="action{msg.U_FORUM_MSG_SET_SELECTED}"><i class="fa fa-check-circle" aria-hidden="true" title="Définir comme meilleure réponse"></i></a> # END IF # # END IF #
Édité par Myster Le 26/05/2021 à 23h07
j1.seth Membre non connecté
- Administrateur
- Voir le profil du membre j1.seth
- Inscrit le : 01/09/2008
- Site internet
- Groupes :
- Chef de Projet
- Equipe Développement
Très bonne initiative, je pense qu'on pourrait l'inclure nativement dans la 6.0 si ça te vas ?
j1.seth
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Y'a pas de soucis
MickaelFR Membre non connecté
Booster Fusée
- Booster Fusée
- Voir le profil du membre MickaelFR
- Inscrit le : 20/01/2014
- Site internet
- Groupes :
Izutox Membre non connecté
Booster Fuzil
- Booster Fuzil
- Voir le profil du membre Izutox
- Inscrit le : 22/01/2020
- Groupes :
Fatale : invalid query. (ERRNO 1054) Unknown column 'msg.selecteds' in 'field list'query: SELECT msg.id, msg.timestamp, msg.timestamp_edit, msg.user_id_edit, m.user_id, p.question, p.answers, p.voter_id, p.votes, p.type, m.display_name as login, m.level, m.groups, m.email, m.show_email, m.registration_date AS registered, ext_field.user_avatar, m.posted_msg, ext_field.user_sign, ext_field.user_website, ext_field.user_skype, m.warning_percentage, m.delay_readonly, m.delay_banned, m2.display_name as login_edit, s.user_id AS connect, tr.id AS trackid, tr.pm as trackpm, tr.track AS track, tr.mail AS trackmail, msg.contents, msg.selecteds
FROM phpboost_nrxforum_msg msg
LEFT JOIN phpboost_nrxforum_poll p ON p.idtopic = 5
LEFT JOIN phpboost_nrxmember m ON m.user_id = msg.user_id
LEFT JOIN phpboost_nrxmember m2 ON m2.user_id = msg.user_id_edit
LEFT JOIN phpboost_nrxmember_extended_fields ext_field ON ext_field.user_id = msg.user_id
LEFT JOIN phpboost_nrxforum_track tr ON tr.idtopic = 5 AND tr.user_id = '22'
LEFT JOIN phpboost_nrxsessions s ON s.user_id = msg.user_id AND s.timestamp > 1650961950 AND s.user_id != -1
WHERE msg.idtopic = 5
ORDER BY msg.timestamp
LIMIT 15 OFFSET 0
[0] /kernel/framework/io/db/driver/mysql/MySQLQuerier.class.php:27 - MySQLQuerier->execute()
[1] /kernel/framework/io/db/DBQuerier.class.php:30 - MySQLQuerier->select()
[2] /forum/topic.php:225 - DBQuerier->select()
[URL] /forum/topic-5.php
Visiblement ça provient de quand j'ajoute ,msg.selected après msg.contents à la ligne la ligne 199
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Tu as mis msg.selecteds y'a pas de S à la fin c'est juste msg.selected
babsolune Membre non connecté
Administrateur
- Administrateur
- Voir le profil du membre babsolune
- Inscrit le : 16/05/2008
- Site internet
- Groupes :
MickaelFR Membre non connecté
Booster Fusée
- Booster Fusée
- Voir le profil du membre MickaelFR
- Inscrit le : 20/01/2014
- Site internet
- Groupes :
Le menu notification à intégrer
babsolune Membre non connecté
Administrateur
- Administrateur
- Voir le profil du membre babsolune
- Inscrit le : 16/05/2008
- Site internet
- Groupes :
j1.seth Membre non connecté
- Administrateur
- Voir le profil du membre j1.seth
- Inscrit le : 01/09/2008
- Site internet
- Groupes :
- Chef de Projet
- Equipe Développement
MickaelFR Membre non connecté
Booster Fusée
- Booster Fusée
- Voir le profil du membre MickaelFR
- Inscrit le : 20/01/2014
- Site internet
- Groupes :
Très bien.
Donc ce sera tjr un addon, et non natif à phpboost c'est bien ça ?
j1.seth Membre non connecté
- Administrateur
- Voir le profil du membre j1.seth
- Inscrit le : 01/09/2008
- Site internet
- Groupes :
- Chef de Projet
- Equipe Développement
On verra pour l'intégrer de base avec Mystère pour la 6.1
Izutox Membre non connecté
Booster Fuzil
- Booster Fuzil
- Voir le profil du membre Izutox
- Inscrit le : 22/01/2020
- Groupes :
Myster :
Bonjour, normal
Tu as mis msg.selecteds y'a pas de S à la fin c'est juste msg.selected
Tu as mis msg.selecteds y'a pas de S à la fin c'est juste msg.selected
Merci pour la précision, j'ai fait la modification est désormais j'ai ceci comme erreur :
Fatale : invalid query. (ERRNO 1054) Unknown column 'msg.selected' in 'field list'query: SELECT msg.id, msg.timestamp, msg.timestamp_edit, msg.user_id_edit, m.user_id, p.question, p.answers, p.voter_id, p.votes, p.type, m.display_name as login, m.level, m.groups, m.email, m.show_email, m.registration_date AS registered, ext_field.user_avatar, m.posted_msg, ext_field.user_sign, ext_field.user_website, ext_field.user_skype, m.warning_percentage, m.delay_readonly, m.delay_banned, m2.display_name as login_edit, s.user_id AS connect, tr.id AS trackid, tr.pm as trackpm, tr.track AS track, tr.mail AS trackmail, msg.contents, msg.selected
FROM phpboost_nrxforum_msg msg
LEFT JOIN phpboost_nrxforum_poll p ON p.idtopic = 5
LEFT JOIN phpboost_nrxmember m ON m.user_id = msg.user_id
LEFT JOIN phpboost_nrxmember m2 ON m2.user_id = msg.user_id_edit
LEFT JOIN phpboost_nrxmember_extended_fields ext_field ON ext_field.user_id = msg.user_id
LEFT JOIN phpboost_nrxforum_track tr ON tr.idtopic = 5 AND tr.user_id = '1'
LEFT JOIN phpboost_nrxsessions s ON s.user_id = msg.user_id AND s.timestamp > 1651193417 AND s.user_id != -1
WHERE msg.idtopic = 5
ORDER BY msg.timestamp
LIMIT 15 OFFSET 0
[0] /kernel/framework/io/db/driver/mysql/MySQLQuerier.class.php:27 - MySQLQuerier->execute()
[1] /kernel/framework/io/db/DBQuerier.class.php:30 - MySQLQuerier->select()
[2] /forum/topic.php:225 - DBQuerier->select()
[URL] /forum/topic-5+passage-en-1-12-2-propositions-de-mods-e.php
Est-il possible que ça provienne d'une erreur de requete sql ?
olivierb Membre non connecté
- Modérateur
- Voir le profil du membre olivierb
- Inscrit le : 07/02/2014
- Site internet
- Groupes :
- Equipe Assistance
La colonne selected a-t-elle été créée dans la table votre_préfixe_forum_msg ?
Olivier
Izutox Membre non connecté
Booster Fuzil
- Booster Fuzil
- Voir le profil du membre Izutox
- Inscrit le : 22/01/2020
- Groupes :
olivierb :Bonjour
La colonne selected a-t-elle été créée dans la table votre_préfixe_forum_msg ?
C'est corrigé, j'ai bien modifié le forum_topic.tpl directement dans le dossier du thème, mais il n'y a pas de changement de couleur ou de mise en surbrillance (j'utilise le thème PLUS.
Édité par Izutox Le 29/04/2022 à 14h20
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie