Archives FluxBB.fr

Les archives de FluxBB.fr

Vous n'êtes pas identifié(e).

#1 30-01-2006 21:21:58

Keulig
Membre

[Astuce] Fonction simple pour faire une liste de news (par exemple)

/!\ NECESSITE LE MOD "mark topic as read" disponible ici : http://www.punres.org/files.php?pid=46


Cette fonction est très simple :

1. Elle va chercher les titres des derniers topics, ainsi que le nombre de réponses pour chacun d'eux.
2. Si le topic n'est pas lu, il apparait en gras. S'il y'a de nouvelles réponses, le nombre de réponses apparait en gras.
3. Si le topic date d'aujourd'hui, la date apparait dans le style de votre choix (classe #news ul span#today). Si le topic est plus vieux, alors il apparait selon le style spécifié par #news ul span#old.

Code à placer dans votre page web:

<div id="news"><?php getlastposts($idforum,$nombre); ?></div>

$idforum = l'id du forum d'où vous voulez extraire les topics
$nombre = nombre de topics que vous voulez afficher dans votre page

Vous devez mettre ce code au début de votre page : (je suis pas sûr que tout soit nécessaire, mais dans le doute...)

if (!defined('PUN_ROOT')) {
define('PUN_ROOT', './punBB/');
define('PUN_TURN_OFF_MAINT', 1);
require_once PUN_ROOT.'include/common.php';
require_once PUN_ROOT.'include/functions.php';

define('PUN_ALLOW_INDEX', 1);
}

Et voici le code de la fonction :

function getlastposts($idforum,$nombre)
{
    global $db;
        // on va chercher les infos dans la base

        $sql = 'SELECT id, subject, posted, num_replies, last_post FROM '.$db->prefix.'topics WHERE forum_id='.$idforum.' ORDER BY posted DESC LIMIT 0, '.$nombre;
        $result = $db->query($sql) or error('Impossible de retrouver la liste des discussions', __FILE__, __LINE__, $db->error());

    if ($db->num_rows($result))
    {
        // on débute la liste des liens
        echo '<ul>';
        while ($cur_topic = $db->fetch_assoc($result))
        {
                // topic lu ?
                if (!$pun_user['is_guest'] && topic_is_new($cur_topic['id'], $idforum, $cur_topic['posted']))
                {
                    // si le topic n'est pas lu, alors il apparait en gras
                    $subject = '<strong>'.$cur_topic['subject'].'</strong>';
                }
                else
                { $subject = '  '.$cur_topic['subject']; }
                // nouveaux messages ?
                if (!$pun_user['is_guest'] && topic_is_new($cur_topic['id'], $idforum, $cur_topic['last_post']))
                {
                    // si il y'a des nouveaux messages, on met le nombre de réponses en gras
                    $replies = '<strong>('.$cur_topic['num_replies'].')</strong>';
                }
                else
                { $replies = '('.$cur_topic['num_replies'].')'; }
            // on transforme la date en format jj/mm/aaaa
            $datetopic = date("d/m/y", $cur_topic['posted']);
            $spanid = ($datetopic == date("d/m/y")) ? "today" : "old";
            // si la date du topic est la même qu'aujourd'hui, alors on lui attribue la classe "today" (pratique pour colorer les news du jour), sinon, on lui attribue la classe "old"
            echo '<li><span id="'.$spanid.'">'.$datetopic.'</span><a href="'.PUN_ROOT.'viewtopic.php?id='.$cur_topic['id'].'">'.$subject.'</a> <a href="'.PUN_ROOT.'viewtopic.php?id='.$cur_topic['id'].'&action=new">'.$replies.'</a></li>';
        }
        echo '</ul>';
    }
}

Dans votre css il faudra spécifier les classes utilisées (en imaginant que la div dans laquelle la fonction est appelée s'appelle "news"):

/* News
********************************************/
#news div{
    padding: 0 0 0 15px;
    margin: 0 0 25px 0;
}

#news ul{
    list-style-type: none;
    margin: 0;
    padding: 0;
}

#news a{
    text-decoration: none;
    color: #2C2C2C;
}

#news li a{
    color: #2C2C2C;
    background: transparent;
}

#news li a:visited{
    color: #2C2C2C;
    background: transparent;
}

#news li a:hover{
    color: #F6C942;
}

#news ul li{
    border-bottom: 1px dotted #C4C4C4;
    padding: 0.5ex 0;
}

/* date dépassée */
#news ul span#old{
    font-weight: bold;
    color: #CCC;
    padding: 0 4ex 0 0;
}

/* date du jour présent */
#news ul span#today{
    font-weight: bold;
    color: #F8950E;
    padding: 0 4ex 0 0;
}

Dernière modification par Keulig (30-01-2006 21:23:00)

Hors ligne

#2 10-11-2006 14:44:34

justme
Membre

Re : [Astuce] Fonction simple pour faire une liste de news (par exemple)

Est-il possible d'afficher la news en ajax lorsque l'on clique dessus ? Ou simplement d'afficher la news complète à partir de ce script?

Mercii

Hors ligne

#3 10-11-2006 14:52:49

nico_somb
Membre

Re : [Astuce] Fonction simple pour faire une liste de news (par exemple)

Inutile de parler d'ajax quand on n'a pas besoin wink

Un simple code Javascript suffit pour ici

Hors ligne

#4 10-11-2006 16:42:12

justme
Membre

Re : [Astuce] Fonction simple pour faire une liste de news (par exemple)

En effet, t'as raison, je tente de coder ça ce soir, je vous tiens au courant wink.

Hors ligne

#5 10-11-2006 17:11:58

Keulig
Membre

Re : [Astuce] Fonction simple pour faire une liste de news (par exemple)

justme a écrit :

En effet, t'as raison, je tente de coder ça ce soir, je vous tiens au courant wink.

Pour un systeme simple qui fait "montrer-cacher" une div, tu peux aller sur mon autre site : http://www.medstour.com (qd tu appuies sur un petit "+" ou sur la ligne correspondante, ça montre + d'infos sur une date).

Dernière modification par Keulig (10-11-2006 17:12:22)

Hors ligne

#6 10-11-2006 17:34:37

justme
Membre

Re : [Astuce] Fonction simple pour faire une liste de news (par exemple)

C'est exactement ce que je pense faire avec l'affichage de la news complète.

Vraiment exceptionnel le site de la tournée, jamais vu quelque chose d'aussi abouti..

pour le script javascript c'est donc

function toggle(divId, imageId)
{
 if (document.getElementById)
 {
 var dataDiv = document.getElementById(divId);
 var dataImg = document.getElementById(imageId);
 if (dataDiv.style.display == "none")
 {
 dataDiv.style.display = "block";
 dataImg.src = "moins.gif";
 }
 else
 {
 dataDiv.style.display = "none";
 dataImg.src = "plus.gif";
 }
 }

?

Sinon j'ai toujours celui là

// faq hide/view toggle
function displayToggle(id) {
  var el = document.getElementById(id).style; 
  if(el.display == "none") {
  el.display = "block";  
  }
  else if(el.display == "block") {
  el.display = "none";
    }
}
-->

que j'utilise pour ma FAQ.

Dernière modification par justme (10-11-2006 17:35:37)

Hors ligne

#7 10-11-2006 17:45:44

Keulig
Membre

Re : [Astuce] Fonction simple pour faire une liste de news (par exemple)

justme a écrit :

Vraiment exceptionnel le site de la tournée, jamais vu quelque chose d'aussi abouti..

Merci, ça fait plaisir ! smile


justme a écrit :

pour le script javascript c'est donc

function toggle(divId, imageId)
{
 if (document.getElementById)
 {
 var dataDiv = document.getElementById(divId);
 var dataImg = document.getElementById(imageId);
 if (dataDiv.style.display == "none")
 {
 dataDiv.style.display = "block";
 dataImg.src = "moins.gif";
 }
 else
 {
 dataDiv.style.display = "none";
 dataImg.src = "plus.gif";
 }
 }

?

Sinon j'ai toujours celui là

// faq hide/view toggle
function displayToggle(id) {
  var el = document.getElementById(id).style; 
  if(el.display == "none") {
  el.display = "block";  
  }
  else if(el.display == "block") {
  el.display = "none";
    }
}
-->

que j'utilise pour ma FAQ.

C'est bien ça, je te conseille néanmoins mon script (piqué chez nos amis de chez krosoft dans la rubrique profiles passport) si tu souhaites utiliser une image qui montre que la div est déroulée.

Et n'oublie pas que la div doit se présenter comme celà au début :

<div style="display: none; padding-bottom: 4px" id="prefix{id-de-la-news}" name="prefix{id-de-la-news}"> la news </div>

et l'image :

<a href="javascript:onClick=toggle('prefix{id-de-la-news}', 'prefix_image{id-de-la-news}'); return false;"><img src="plus.gif" alt="Plus d'informations" id="prefix_image{id-de-la-news}" name="prefix_image{id-de-la-news}" /></a>

(l'utilisation d'un préfixe est conseillée, mais pas du tout nécessaire)

Dernière modification par Keulig (10-11-2006 17:48:29)

Hors ligne

#8 10-11-2006 18:03:12

justme
Membre

Re : [Astuce] Fonction simple pour faire une liste de news (par exemple)

Okay, je vais essayer de voir ça alors, merci.

Hors ligne

#9 10-11-2006 23:12:48

justme
Membre

Re : [Astuce] Fonction simple pour faire une liste de news (par exemple)

    echo'<a href="javascript:onClick=toggle(\'prefix{'.$cur_topic['id'].'}\', \'prefix_image{'.$cur_topic['id'].'}\'); return false;"><img src="../images/plus.gif" alt="Plus d\'informations" id="prefix_image{'.$cur_topic['id'].'}" name="prefix_image{'.$cur_topic['id'].'}" /></a>';

            echo'<div style="display: none; padding-bottom: 4px" id="prefix{'.$cur_topic['id'].'}" name="prefix{'.$cur_topic['id'].'}">';

Normal que le javascript ne marche pas ? (les ids sont bonnes)

Hors ligne

#10 11-11-2006 05:07:24

Keulig
Membre

Re : [Astuce] Fonction simple pour faire une liste de news (par exemple)

Oui, enlève les accolades ("{" et "}"), ça peut créer des problemes. Et "prefix" est à changer par qquechose de ton choix !

Hors ligne

#11 11-11-2006 16:43:14

justme
Membre

Re : [Astuce] Fonction simple pour faire une liste de news (par exemple)

         echo'<a href="javascript:onClick=toggle(\'btnews'.$cur_topic['id'].'\', \'btnewsimg'.$cur_topic['id'].'\'); return false;"><img src="../images/plus.gif" alt="Plus d\'informations" id="btnewsimg'.$cur_topic['id'].'" name="btnewsimg'.$cur_topic['id'].'" /></a>';
           
            echo'<li><span id="'.$spanid.'">'.$datetopic.'</span><a href="'.PUN_ROOT.'viewtopic.php?id='.$cur_topic['id'].'">'.$subject.'</a> <a href="'.PUN_ROOT.'viewtopic.php?id='.$cur_topic['id'].'&action=new">'.$replies.'</a></li>';
      echo'<div style="display: none; padding-bottom: 4px" id="btnews'.$cur_topic['id'].'" name="btnews'.$cur_topic['id'].'">';    
      echo'test';      } 
        echo '</div></ul>';
    }

Cela ne marche toujours pas..

Hors ligne

#12 11-11-2006 18:42:56

Keulig
Membre

Re : [Astuce] Fonction simple pour faire une liste de news (par exemple)

Déjà, il faut que ta div soit dans ton <li> !

Hors ligne

#13 11-11-2006 19:06:16

justme
Membre

Re : [Astuce] Fonction simple pour faire une liste de news (par exemple)

C'est vrai que ça fait déjà beaucoup plus jolie happy. Je ne comprends vraiment pas pour le javascript par contre :

 echo'<li><a href="javascript:onClick=toggle(\'btnews'.$cur_topic['id'].'\', \'btnewsimg'.$cur_topic['id'].'\'); return false;"><img src="../images/plus.gif" alt="Plus d\'informations" id="btnewsimg'.$cur_topic['id'].'" name="btnewsimg'.$cur_topic['id'].'" /></a>';
           
            echo'<span id="'.$spanid.'">'.$datetopic.'</span><a href="'.PUN_ROOT.'viewtopic.php?id='.$cur_topic['id'].'">'.$subject.'</a> <a href="'.PUN_ROOT.'viewtopic.php?id='.$cur_topic['id'].'&action=new">'.$replies.'</a> <div style="display: none; padding-bottom: 4px" id="btnews'.$cur_topic['id'].'" name="btnews'.$cur_topic['id'].'">test</div></li>';    
  } 
        echo '</ul>';

Hors ligne

#14 09-04-2007 13:07:57

audi
Membre

Re : [Astuce] Fonction simple pour faire une liste de news (par exemple)

justme a écrit :

Vraiment exceptionnel le site de la tournée, jamais vu quelque chose d'aussi abouti..

C'est clair ! Superbe boulot


Team-BoNoBo Team CS qui tourne sous Punbb, Puntal & DFSS
Trouvailles et cadeaux du web gratuits chez la dénicheuse
Besoin d'aide, visitez le groupe Developpeur

Hors ligne

Pied de page des forums