Connectix Boards

Bienvenue, vous n'êtes pas connecté. ( Se connecter - S'enregistrer )

Dernière version sortie: 0.8.4!
Venez tester la version 1.0 beta :)

Connectix Boards > Zone développement > Programmation > Module "Dernières réponses" sur votre site

RSS >  Module "Dernières réponses" sur votre site, sans RSS et compatible Noscript
Ishimaru Chiaki #1 07/02/2009 - 09h33

Groupe : Doc-rédacteur
Messages : 800
Enregistré le : 12/03/2008

Hors ligne Site Web

Là cette fois c'est la bonne, maintenant que le détail sur les permissions (qui constituait une faille au niveau confidentialité) est réglé.  J'ai testé de fond en comble, avec deux sections privées (un accessible seulement aux admins et un autre accessible aux admins et à un autre groupe) et quatre types d'utilisateur (admin, membre avec permission d'accéder à l'une des deux sections privées, membre sans permissions, invité)

------------------
Ne sachant pas comment utiliser RSS pour un module, et voulant aussi faire un module compatible pour ceux qui ont désactivé Javascript, je viens de coder ma version du module "Derniers sujets" qui peut être mis dans le menu d'un site qui est couplé à un forum CB.

Installation du script

Prérequis : Vous devez d'abord avoir initialisé votre site pour qu'il utilise la base de données du forum avec les identifiants que vous utilisez pour le forum.
Pour en savoir plus : http://www.connectix-boards.org/index.php?page=doc&sect=12

Ce module est à placer dans un bloc de votre menu vertical, de préférene d'une largeur de 200px.  Je vous en donne deux version, selon si vous utilisez ou non mon MOD "Colorized Usernames Extension"

Voici le code à insérer si vous n'utilisez pas "Colorized Usernamees Extension" :

        <div class="sous-menu">
        <h3>Derniers sujets</h3>
        <ul class="lastposts">
        <?php
                
//On définit les constantes nécessaires pour le module
        
define('CB_NB_REPLIES',10); // Nombre de réponses à afficher
                
define('FORUM_URL','../forum/'); //Lien relatif vers le forum

        //On vérifie d'abord les autorisations du visiteur
        
if(!($_SESSION['cb_user']->isAdmin()) && !empty($_SESSION['cb_user']->gr_auth_see))
        {
            
//Le visiteur n'est pas admin et n'a pas accès à certaines sections
            //On exclut donc les sujets qui sont dans les sections qui lui sont interdites, en vue de la requête SQL
            
$no_auth "NOT IN (".implode(',',$_SESSION['cb_user']->gr_auth_see).")";
        }
        else
        {
            
//Le visiteur est admin ou a accès à toutes les sections, donc rien à exclure
            
$no_auth '';
        }
        
// Récupération des données des derniers sujets
$result $GLOBALS['cb_db']->query("SELECT topic_id, topic_name, topic_nbreply, topic_lastmessage, topic_fromtopicgroup, msg_userid, msg_id, msg_timestamp, msg_guest, usr_id, usr_name
    FROM "
.$GLOBALS['cb_db']->prefix."topics
    LEFT JOIN "
.$GLOBALS['cb_db']->prefix."messages ON msg_id=topic_lastmessage
    LEFT JOIN "
.$GLOBALS['cb_db']->prefix."users ON usr_id=msg_userid
    WHERE topic_fromtopicgroup "
.$no_auth."
    ORDER BY topic_lastmessage DESC LIMIT 0,"
.CB_NB_REPLIES);
        while (
$val $GLOBALS['cb_db']->fetch_assoc($result))
        {
            
//On vérifie si la valeur de notre variable de préférence existe
            
if (!empty($_SESSION['cb_user']->usr_pref_msgs))
            {
                
//dans ce cas, on simplifie nos variables pour la suite
                
$usr_pref_msgs $_SESSION['cb_user']->usr_pref_msgs;
                
$nb_reply $val['topic_nbreply'];
            }
            else 
//la valeur est vide, donc 15 sera la valeur par défaut
            
{
                
$usr_pref_msgs 15;
                
$nb_reply $val['topic_nbreply'];
            }
            
//On indique l'URL avec seulement la valeur de l'id du topic et l'ancre de la réponse.
            
echo '<li><a href="'manage_url(FORUM_URL.'index.php?showtopic='.$val['topic_id'].'&amp;page='.ceil(($val['topic_nbreply']+1)/$usr_pref_msgs).'#'.$val['msg_id'],FORUM_URL.'forum-t'.$val['topic_id'].'-p'.ceil(($val['topic_nbreply']+1)/$usr_pref_msgs).','.rewrite_words($val['topic_name']).'.html#'.$val['msg_id']).'">'$val['topic_name'].'</a> &raquo; ' .date('d/m/Y - H\:i',$val['msg_timestamp']). ' par '.getUserLink($val['usr_id'],$val['usr_name'],$val['msg_guest'],FORUM_URL).'</li>';
        }
        
?>
        </ul>
        </div>




Voici le code à insérer si vous utilisez "Colorized Usernames Extension" :

        <div class="sous-menu">
        <h3>Derniers sujets</h3>
        <ul class="lastposts">
        <?php
                
//On définit les constantes nécessaires pour le module
        
define('CB_NB_REPLIES',10); // Nombre de réponses à afficher
                
define('FORUM_URL','../forum/'); //Lien relatif vers le forum
        //On vérifie d'abord les autorisations du visiteur
        
if(!($_SESSION['cb_user']->isAdmin()) && !empty($_SESSION['cb_user']->gr_auth_see))
        {
            
//Le visiteur n'est pas admin et n'a pas accès à certaines sections
            //On exclut donc les sujets qui sont dans les sections qui lui sont interdites, en vue de la requête SQL
            
$no_auth "NOT IN (".implode(',',$_SESSION['cb_user']->gr_auth_see).")";
        }
        else
        {
            
//Le visiteur est admin ou a accès à toutes les sections, donc rien à exclure
            
$no_auth '';
        }
        
// Récupération des sonnées des derniers sujets
$result $GLOBALS['cb_db']->query("SELECT topic_id, topic_name, topic_nbreply, topic_lastmessage, topic_fromtopicgroup, msg_userid, msg_id, msg_timestamp, msg_guest, usr_id, usr_name,usr_class,gr_id,gr_color
    FROM "
.$GLOBALS['cb_db']->prefix."topics
    LEFT JOIN "
.$GLOBALS['cb_db']->prefix."messages ON msg_id=topic_lastmessage
    LEFT JOIN "
.$GLOBALS['cb_db']->prefix."users ON usr_id=msg_userid
    LEFT OUTER JOIN "
.$GLOBALS['cb_db']->prefix."groups ON gr_id=usr_class
    WHERE topic_fromtopicgroup "
.$no_auth."
    ORDER BY topic_lastmessage DESC LIMIT 0,"
.CB_NB_REPLIES);
        while (
$val $GLOBALS['cb_db']->fetch_assoc($result))
        {
            
//On vérifie si la valeur de notre variable de préférence existe
            
if (!empty($_SESSION['cb_user']->usr_pref_msgs))
            {
                
//dans ce cas, on simplifie nos variables pour la suite
                
$usr_pref_msgs $_SESSION['cb_user']->usr_pref_msgs;
                
$nb_reply $val['topic_nbreply'];
            }
            else 
//la valeur est vide, donc 15 sera la valeur par défaut
            
{
                
$usr_pref_msgs 15;
                
$nb_reply $val['topic_nbreply'];
            }
            
//On indique l'URL avec seulement la valeur de l'id du topic et l'ancre de la réponse.
            
echo '<li><a href="'manage_url(FORUM_URL.'index.php?showtopic='.$val['topic_id'].'&amp;page='.ceil(($val['topic_nbreply']+1)/$usr_pref_msgs).'#'.$val['msg_id'],FORUM_URL.'forum-t'.$val['topic_id'].'-p'.ceil(($val['topic_nbreply']+1)/$usr_pref_msgs).','.rewrite_words($val['topic_name']).'.html#'.$val['msg_id']).'">'$val['topic_name'].'</a> &raquo; ' .date('d/m/Y - H\:i',$val['msg_timestamp']). ' par '.getUserLink($val['usr_id'],$val['usr_name'],$val['gr_color'],$val['msg_guest'],FORUM_URL).'</li>';
        }
        
?>
        </ul>
        </div>



Configuration du module

- Le module utilise la fonction getUserLink() de CB, mais puisque le plus souvent, le module est utilisé sur des pages se trouvant dans un dossier séparé, il vous faudra modifier le code de la fonction dans include/lib/lib.cb.php pour qu'il puisse supporter les liens depuis un autre répertoire.  Pour cela, consultez ce sujet.
Si vous utilisez un fichier servant de librairie de fonctions personnalisées pour votre site, vous pouvez également copier la fonction getUserLink dans le fichier en question, mais vous devrez la renommer pour éviter les conflits (ex: getUserLinkSite au lieu de getUserLink).

- Vous avez deux constantes à votre disposition au début du code donné.  Vous pouvez modifier leur valeur selon le nombre de réponses que vous voulez afficher, ainsi que le chemin du forum par rapport aux pages où le module est affiché.
Les voici :

<?php
                
//On définit les constantes nécessaires pour le module
        
define('CB_NB_REPLIES',10); // Nombre de réponses à afficher
                
define('FORUM_URL','../forum/'); //Lien relatif vers le forum
?>


Notez que si vous utilisez déjà la constante FORUM_URL dans une autre partie de vos pages, je vous recommande de définir cette constante une seule fois dans toutes vos pages en la plaçant dans l'en-tête des pages de votre site.

- Vous pouvez adapter le code XHTML pour que la class du sous-menu et la balise de titre utilisée correspondent à votre site.

- Et pour un meilleur rendu, vous pouvez utiliser ce bout de code CSS pour séparer les liens par une bordure dont vous mettez le code couleur que vous voulez :
ul.lastposts li
{
   border-top: 1px #xxxxxx solid;
}


- Et juste pour info : &raquo; affiche un guillemet français fermant, j'ai appris le code HTML de ce caractère en mettant à jour mon phpBB3 de test vers 3.0.4.

Vous pouvez voir mon module en action sur mon site dont le lien se trouve dans ma signature


Changelog

26/07/09 - Mise à jour majeure du code du module dans le but de l'optimiser en utilisant une fonction présente dans CB que l'on doit modifier légèrement.  Il est maintenant compatible avec l'URL Rewriting et vous avez maintenant une version avec coloration des pseudos et une autre sans, suivant l'utilisation ou non de mon MOD "Colorized Usernames Extension".  Il utilise maintenant deux constantes, permettant de modifier rapidement le nombre de réponses à afficher et l'URL relatif du forum.

07/02/09 - Première versioin du module, non compatible avec l'URL Rewriting et n'utilisant pas la coloration des pseudos, ni de constantes.
Ce message a été édité par Ishimaru Chiaki le 27/07/2009 à 06h04.
Besoin de volontaires pour les tests du support IPv6 dans la future version 0.8.5 !
Plus d'informations ici

Mon fil Twitter
Ishimaru Chiaki #2 27/07/2009 - 04h50

Groupe : Doc-rédacteur
Messages : 800
Enregistré le : 12/03/2008

Hors ligne Site Web

Mise à jour majeure du module !  Il supporte maintenant l'URL Rewriting, et il existe en deux version : l'une avec pseudos colorés et l'autre sans.
Et pour faciliter le changement du nombre de réponses à afficher, ainsi que l'URL relatif du forum, deux constantes sont maintenant utilisées.
Ce module exige une modification de la fonction getUserLink() pour le support des chemins relatifs du forum depuis un répertoire différent.
Besoin de volontaires pour les tests du support IPv6 dans la future version 0.8.5 !
Plus d'informations ici

Mon fil Twitter
kristoch #3 03/04/2010 - 13h16

Groupe : Acharné
Messages : 342
Enregistré le : 05/08/2009

Hors ligne Site Web

ce module est super extra-génial et trouvera sa place par exemple sur le portail dans la prochaine version du forum!
ce d'autant plus que pour une très bonne raison, "derniers sujets" n'apparaîtra plus, Google oblige.
donc on a là le moyen de "compenser" et remettre "derniers sujets" et ce dès le portail rejoignant les news.
à ce sujet: les news seront donc exclues! ça me rassure aussi sur ce point grâce aux permissions qui sont gérées. sinon doublon possible. impec'

donc bravo à toi et merci beaucoup!  :D
ça va me servir bientôt j'espère.  ;)
un de mes blogs : chachacha

 >  Réponse rapide

Composez votre message

Connectix Boards > Zone développement > Programmation > Module "Dernières réponses" sur votre site

 >  Informations du forum

1 personne(s) présente(s) durant une période de 15 minutes (0 membre(s) et 1 invité(s)).