les plus commentés

Bonjour,
Existe-t-il un moyen d'afficher les articles les plus commentés ?
Cordialement,
BS

Bernard Strainchamps a écrit (en cette belle journée du 19/06/2008 11:24) :

Bonjour,
Existe-t-il un moyen d'afficher les articles les plus commentés ?
Cordialement,
BS

les articles les plus commentés sont ceux qui ont été les plus lus (parmi ceux qui ont été commentés)
moi je vois (flou) deux boucles: 1. une qui teste si les articles sont commentés et 2. l'autre qui classe les articles par popularité. mais ça n'est qu'une piste très vague désolé

--
Jean-Christophe

Jean-Christophe Sekinger a écrit (en cette belle journée du 19/06/2008 12:59) :

Bernard Strainchamps a écrit (en cette belle journée du 19/06/2008 11:24) :

Bonjour,
Existe-t-il un moyen d'afficher les articles les plus commentés ?
Cordialement,
BS

les articles les plus commentés sont ceux qui ont été les plus lus (parmi ceux qui ont été commentés)
moi je vois (flou) deux boucles: 1. une qui teste si les articles sont commentés et 2. l'autre qui classe les articles par popularité. mais ça n'est qu'une piste très vague désolé

je précise qu'il faudrait imbriquer ces boucles et que, tout bien réfléchi, l'article commenté le plus lu, n'est pas forcément le plus commenté... enfin bon...

--
Jean-Christophe

Jean-Christophe Sekinger a écrit :

Jean-Christophe Sekinger a écrit (en cette belle journée du 19/06/2008 12:59) :

Bernard Strainchamps a écrit (en cette belle journée du 19/06/2008 11:24) :

Bonjour,
Existe-t-il un moyen d'afficher les articles les plus commentés ?
Cordialement,
BS

les articles les plus commentés sont ceux qui ont été les plus lus (parmi ceux qui ont été commentés)
moi je vois (flou) deux boucles: 1. une qui teste si les articles sont commentés et 2. l'autre qui classe les articles par popularité. mais ça n'est qu'une piste très vague désolé

je précise qu'il faudrait imbriquer ces boucles et que, tout bien réfléchi, l'article commenté le plus lu, n'est pas forcément le plus commenté... enfin bon...

Oui. Et ce n'équivaut pas à ma demande : classés par articles commentés. Et même avec une jointure des tables forums / articles, je ne vois pas comment y arriver.
Cordialement,
BS

On Thu, 19 Jun 2008 15:04:21 +0200, Rue des boulets <rue@ruedesboulets.com> wrote:

Oui. Et ce n'équivaut pas à ma demande : classés par articles commentés. Et même avec une jointure des tables forums / articles, je ne vois pas comment y arriver.

Je vois comment récupérer le nombre de commentaires par article, mais comment les classer?

Pour récupérer ce nombre:

<BOUCLE_toto>(ARTICLES)
<BOUCLE_tata>(FORUM){id_article}
</BOUCLE_tata>
#SET{variable([#ID_ARTICLE]),#_tata:TOTAL_BOUCLE}
</BOUCLE_toto>

(pseudo-syntaxe, mais tu vois le principe)

De cette façon on récupère une série de variables d'environnement variableXXX (ou XXX est le numéro de chaque article) qui comportent chacune le nombre de commentaires de l'article.

Mais après ??

--
Using Opera's revolutionary e-mail client: Opera Web Browser | Faster, Safer, Smarter | Opera

J.-F. Moyen a écrit :

On Thu, 19 Jun 2008 15:04:21 +0200, Rue des boulets <rue@ruedesboulets.com> wrote:

Oui. Et ce n'équivaut pas à ma demande : classés par articles commentés.

Alors, la bonne piste est sans doute le critère frequence du plugin nuage .
<BOUCLE_A(ARTICLES){frequence forum>0}>
Après je n'ai pas regardé depuis longtemps, le mieux c'est de regarder la requete générée mais tu devrais pouvoir faire :
<BOUCLE_A(ARTICLES){frequence forum>0}{!par frequence}{0,10}>

(mais ca ca doit etre dans nuage2, dans nuage, c'est sans doute {!par frequence_X} ou un truc du genre)

@++

Stephane a écrit :

J.-F. Moyen a écrit :

On Thu, 19 Jun 2008 15:04:21 +0200, Rue des boulets <rue@ruedesboulets.com> wrote:

Oui. Et ce n'équivaut pas à ma demande : classés par articles commentés.

Alors, la bonne piste est sans doute le critère frequence du plugin nuage .
<BOUCLE_A(ARTICLES){frequence forum>0}>
Après je n'ai pas regardé depuis longtemps, le mieux c'est de regarder la requete générée mais tu devrais pouvoir faire :
<BOUCLE_A(ARTICLES){frequence forum>0}{!par frequence}{0,10}>

(mais ca ca doit etre dans nuage2, dans nuage, c'est sans doute {!par frequence_X} ou un truc du genre)

J'ai regardé nuage 2.
Et j'ai trouvé ce code incompréhensible pour moi.

    [(#SET{score,[(#FREQUENCE|div{#MAX_FREQUENCE})]})]
    [(#GET{score}|>{0.05}|?{' '})[(#SET{score,[(#GET{score}|plus{0.900001})]})][(#SET{unite,[(#GET{score}|floor)]})]
[(#SET{decimale,[(#GET{score}|moins{#GET{unite}}|mult{10}|floor)]})]

Par ailleurs, ne faut-il pas créer une jointure de table ?
Cordialement,
BS

@++
_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP

Stephane a écrit :

J.-F. Moyen a écrit :

On Thu, 19 Jun 2008 15:04:21 +0200, Rue des boulets <rue@ruedesboulets.com> wrote:

Oui. Et ce n'équivaut pas à ma demande : classés par articles commentés.

Alors, la bonne piste est sans doute le critère frequence du plugin nuage .
<BOUCLE_A(ARTICLES){frequence forum>0}>
Après je n'ai pas regardé depuis longtemps, le mieux c'est de regarder la requete générée mais tu devrais pouvoir faire :
<BOUCLE_A(ARTICLES){frequence forum>0}{!par frequence}{0,10}>

(mais ca ca doit etre dans nuage2, dans nuage, c'est sans doute {!par frequence_X} ou un truc du genre)

J'ai regardé nuage 2.
Et j'ai trouvé ce code incompréhensible pour moi.

   [(#SET{score,[(#FREQUENCE|div{#MAX_FREQUENCE})]})]
   [(#GET{score}|>{0.05}|?{' '})[(#SET{score,[(#GET{score}|plus{0.900001})]})][(#SET{unite,[(#GET{score}|floor)]})]

[(#SET{decimale,[(#GET{score}|moins{#GET{unite}}|mult{10}|floor)]})]

Par ailleurs, ne faut-il pas créer une jointure de table ?
Cordialement,
BS

@++
_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP

Rue des boulets a écrit :

Stephane a écrit :

J.-F. Moyen a écrit :

On Thu, 19 Jun 2008 15:04:21 +0200, Rue des boulets <rue@ruedesboulets.com> wrote:

Oui. Et ce n'équivaut pas à ma demande : classés par articles commentés.

Alors, la bonne piste est sans doute le critère frequence du plugin nuage .
<BOUCLE_A(ARTICLES){frequence forum>0}>
Après je n'ai pas regardé depuis longtemps, le mieux c'est de regarder la requete générée mais tu devrais pouvoir faire :
<BOUCLE_A(ARTICLES){frequence forum>0}{!par frequence}{0,10}>

(mais ca ca doit etre dans nuage2, dans nuage, c'est sans doute {!par frequence_X} ou un truc du genre)

J'ai regardé nuage 2.

non, utilises plutot nuage, nuage2 ne sera pas maintenu, c'etait experimental (meme si c'est stable et utilisable)

Et j'ai trouvé ce code incompréhensible pour moi.

tu n'es pas obligé de comprendre pour utiliser...
:slight_smile:

   [(#SET{score,[(#FREQUENCE|div{#MAX_FREQUENCE})]})]
   [(#GET{score}|>{0.05}|?{' '})[(#SET{score,[(#GET{score}|plus{0.900001})]})][(#SET{unite,[(#GET{score}|floor)]})]

[(#SET{decimale,[(#GET{score}|moins{#GET{unite}}|mult{10}|floor)]})]

c'est rien ca, c'est pour transformer la frequence en entier de 1 à 10 pour la taille des mots dans le nuage.
Toi, tout ce qui t'interesse, c'est les fonctions de nuage_fonctions.php
ca permet d'utiliser le critère frequence comme indiqué

lire Le critère {frequence} - SPIP-Contrib
Et dire merci à James
:wink:

Par ailleurs, ne faut-il pas créer une jointure de table ?

c'est ce que fait le critère frequence : une jointure, un count et le group by qui va bien
juste, je ne sais plus comment il nomme le compteur pour pouvoir faire le tri dessus, c'est pour ca que je te disais de regarder la requete générée pour avoir le nom du critère {par frequencexxx} à mettre

@++

c'est rien ca, c'est pour transformer la frequence en entier de 1 à 10 pour la taille des mots dans le nuage.
Toi, tout ce qui t'interesse, c'est les fonctions de nuage_fonctions.php
ca permet d'utiliser le critère frequence comme indiqué

lire Le critère {frequence} - SPIP-Contrib
Et dire merci à James
:wink:

J'aime bien spip justement parce que on peut l'utiliser sans comprendre... ou en comprenant progressivement.

J'ai copié les fonctions du fichier frequence_fonctions.php du plugin nuage dans mes_fonctions.php
et j'ai créé cette boucle
<BOUCLE_m(FORUMS){frequence articles}{!par frequence}{0,10}>
#TITRE
</BOUCLE_m>
et j'obtiens

    * Erreur(s) dans le squelette
          o Erreur sur le site, frequence articles: jointure inconnue
          o <BOUCLE_m>(forum)
            *Erreur MySQL*
            COUNT(frequence_m. id_mot) AS frequence_m, forum.titre,
            forum.id_article, forum.id_breve, forum.id_rubrique,
            forum.id_syndic FROM spip_mots_forum AS `frequence_m`,
            spip_forum AS `forum` WHERE (forum.id_forum =
            frequence_m.id_forum) AND (forum.id_parent = 0) AND
            (forum.statut = "publie") GROUP BY forum.id_forum HAVING
            (frequence_m >= 0) ORDER BY frequence DESC LIMIT 0,10

ça m'intéresse aussi donc
pour les plus populaires :

      <BOUCLE_pop(ARTICLES){par popularite} {inverse}{doublons}{0,30}>
       <tr>
          <td width="100%"><a href="#URL_ARTICLE">[(#LOGO_ARTICLE_RUBRIQUE|left||image_reduire{38})]<strong>#TITRE</strong></a>
          <br>a un total de : <strong> #VISITES visites</strong>,<br>
            soit <strong>
            <?
             $jour = "[(#DATE|jour)]" * 1;
             $mois = "[(#DATE|mois)]" * 1;
             $annee = "[(#DATE|annee)]" * 1;
             $visites = "#VISITES" * 1;
             $ts1 = mktime(0,0,0,$mois,$jour,$annee);
             echo (round($visites / ((time() - $ts1)/24/60/60)));
            ?>
            visites en moyenne par jour.</strong></font><br> </td>
          <td align="center" nowrap><font size="2">popularit&eacute; : #POPULARITE
            %</font> <table width="100" border="0" cellpadding="0" cellspacing="0" class="stats">
              <tr>
                <td><img src="IMG/img-stats/stats_h_vert.gif" width="#POPULARITE" height="10"></td>
                <?
// % pop supérieur
$pop_sup = 100 - #POPULARITE;
if ("$pop_sup" > "0"){
?>
                <td><img src="IMG/img-stats/stats_h_rouge.gif" width="<? echo "$pop_sup"; ?>" height="10"></td>
              </tr>
              <? } ?>
            </table></td>
        </tr>
      </table>
      <hr noshade>
      </BOUCLE_pop>

ce n'est pas de moi mais si ça peu aider.....

Bernard Strainchamps a écrit (en cette belle journée du 19/06/2008 11:24) :

Bonjour,
Existe-t-il un moyen d'afficher les articles les plus commentés ?
Cordialement,
BS

les articles les plus commentés sont ceux qui ont été les plus lus
(parmi ceux qui ont été commentés)
moi je vois (flou) deux boucles: 1. une qui teste si les articles sont
commentés et 2. l'autre qui classe les articles par popularité. mais ça
n'est qu'une piste très vague désolé

--
Jean-Christophe

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP

Rue des boulets a écrit :

c'est rien ca, c'est pour transformer la frequence en entier de 1 à 10 pour la taille des mots dans le nuage.
Toi, tout ce qui t'interesse, c'est les fonctions de nuage_fonctions.php
ca permet d'utiliser le critère frequence comme indiqué

lire Le critère {frequence} - SPIP-Contrib
Et dire merci à James
:wink:

J'aime bien spip justement parce que on peut l'utiliser sans comprendre... ou en comprenant progressivement.

J'ai copié les fonctions du fichier frequence_fonctions.php du plugin nuage dans mes_fonctions.php
et j'ai créé cette boucle
<BOUCLE_m(FORUMS){frequence articles}{!par frequence}{0,10}>
#TITRE
</BOUCLE_m>
et j'obtiens

   * Erreur(s) dans le squelette

oui, OK, c'est moi qui disait des betises :
- celui de nuage ne gère que les mots
- celui de nuage2 que les relation n-n (ici, c'est du 1-n)

mais ca doit etre simple de faire un critère "compteur".
je tenterai :
:
function critere_compteur($idb, &$boucles, $crit){
    $op='';
    $boucle = &$boucles[$idb];
    $params = $crit->param;
    $type = array_shift($params);
    $type = $type[0]->texte;
    if(preg_match(',^(\w+)([<>=])([0-9]+)$,',$type,$r)){
        $type=$r[1];
        $op=$r[2];
        $op_val=$r[3];
    }
    $type_id = 'compt.id_'.$type;
    $type_requete = $boucle->type_requete;
    $id_table = $boucle->id_table . '.' . $boucle->primary;
    $boucle->select= 'COUNT('.$type_id.') AS compteur_'.$type;
    $boucle->from['compt']="spip_".$type."s";
    $boucle->where= array("'='", "'".$id_table."'", "'compt.".$boucle->primary."'");
    $boucle->group=$id_table;
    if ($op)
        $boucle->having= array("'".$op."'", "'compteur'",$op_val);

}

qui devrait permettre
:
<BOUCLE_m(ARTICLES){compteur forum}{!par frequence}{0,10}>
ainsi que
<BOUCLE_m(RUBRIQUES){compteur article}{!par frequence}{0,10}>
ou
<BOUCLE_m(XXX){compteur yyy}{!par frequence}{0,10}>
pour peu que yyy contienne la clé primaire de xxx

Rien n'est testé, mais ca doit pas etre loin de ca

@++

Stephane a écrit :

je tenterai :
:
function critere_compteur($idb, &$boucles, $crit){
   $op='';
   $boucle = &$boucles[$idb];
   $params = $crit->param;
   $type = array_shift($params);
   $type = $type[0]->texte;
   if(preg_match(',^(\w+)([<>=])([0-9]+)$,',$type,$r)){
       $type=$r[1];
       $op=$r[2];
       $op_val=$r[3];
   }
   $type_id = 'compt.id_'.$type;
   $type_requete = $boucle->type_requete;
   $id_table = $boucle->id_table . '.' . $boucle->primary;
   $boucle->select= 'COUNT('.$type_id.') AS compteur_'.$type;
   $boucle->from['compt']="spip_".$type."s";
   $boucle->where= array("'='", "'".$id_table."'", "'compt.".$boucle->primary."'");
   $boucle->group=$id_table;
   if ($op)
       $boucle->having= array("'".$op."'", "'compteur'",$op_val);

}

qui devrait permettre
:
<BOUCLE_m(ARTICLES){compteur forum}{!par frequence}{0,10}>
ainsi que
<BOUCLE_m(RUBRIQUES){compteur article}{!par frequence}{0,10}>
ou
<BOUCLE_m(XXX){compteur yyy}{!par frequence}{0,10}>
pour peu que yyy contienne la clé primaire de xxx

Rien n'est testé, mais ca doit pas etre loin de ca

Je viens de tester et j'obtiens avec <BOUCLE_m(ARTICLES){compteur forum}{!par frequence}{0,10}>
<BOUCLE_m>(articles)
*Erreur MySQL*
COUNT(compt.id_forum) AS compteur_forum, articles.titre, articles.lang FROM spip_forums AS `compt`, spip_articles AS `articles` WHERE (articles.id_article = compt.id_article) AND (articles.statut = "publie") GROUP BY articles.id_article ORDER BY frequence DESC LIMIT 0,10
*Table 'mauvaisgbib.spip_forums' doesn't exist*
</BOUCLE_m>

*mauvaisgbib.spip_forums existe pourtant bien
par contre dans la requête, on retrouve *spip_forums qui n'existe pas.
???
BS la bille en php

Rue des boulets a écrit :

Je viens de tester et j'obtiens avec <BOUCLE_m(ARTICLES){compteur forum}{!par frequence}{0,10}>

donc, ca serait :
function critere_compteur($idb, &$boucles, $crit){
   $op='';
   $boucle = &$boucles[$idb];
   $params = $crit->param;
   $type = array_shift($params);
   $type = $type[0]->texte;
   if(preg_match(',^(\w+)([<>=])([0-9]+)$,',$type,$r)){
       $type=$r[1];
       $op=$r[2];
       $op_val=$r[3];
   }
   $type_id = 'compt.id_'.$type;
   $type_requete = $boucle->type_requete;
   $id_table = $boucle->id_table . '.' . $boucle->primary;
   $boucle->select= 'COUNT('.$type_id.') AS compteur_'.$type;
   $boucle->from['compt']="spip_".$type;
   $boucle->where= array("'='", "'".$id_table."'", "'compt.".$boucle->primary."'");
   $boucle->group=$id_table;
   if ($op)
       $boucle->having= array("'".$op."'", "'compteur'",$op_val);

}

avec en plus pour récupérer la valeur du compteur, la balise comme ca :
function balise_COMPTEUR_FORUM_dist($p) {
    $p->code = '$Pile[$SP][\'compteur_forum\']';
    $p->interdire_scripts = false;
    return $p;
}

et donc :
<BOUCLE_m(ARTICLES){compteur forum>0}{!par compteur_forum}{0,10}>
#TITRE contient #COMPTEUR_FORUM messages
</BOUCLE_m>

si ca marche tu es bon pour une contrib.
:slight_smile:

mais ca risque de coincer encore avec les champs manquant dans le group by
auquel cas, peut etre qu'un {fusion titre} suffirait à regler le probleme

@++