JOOM::GALLERY::FORUM

Archiv => Gelöste Themen: Frontend => Thema gestartet von: Claudia E. am 09-10-2008 23:59:48



Titel: Toplist: Meiste Kommentare
Beitrag von: Claudia E. am 09-10-2008 23:59:48
Wie der Titel schon sagt - gibt es eine Möglichkeit, die am meisten kommentierten Bilder per Link in einem Menu anzeigen zu lassen?

Ich hab das bisher per Modul gelöst, auf Grund von Template-Änderungen hätte ich gern einen Link.
Genauer gesagt möchte ich gern ein neues Menu erstellen mit den Links:
- Zuletzt kommentiert
- Meist kommentiert
- Hoch bewertet
- Meist gesehen

Links, die sich aus den Toplisten übernehmen lassen, sind selbst für mich zu bewältigen. ;-))
Nur eben dieses "Meist kommentiert"...


Titel: Re: Toplist: Meiste Kommentare
Beitrag von: aHa am 10-10-2008 10:33:53
Hi Claudia,
ok, den Link für z.B. die Anzeige der letzten Kommentare kennst Du schon:

Code:
http://meineseite/index.php?option=com_ponygallery&Itemid=27&func=special&sorting=lastcomment

Für die Itemid habe ich mal 27 angenommen.

Im folgenden ein kleiner Hack um diesen Link zu ermöglichen:
Code:
http://meineseite/index.php?option=com_ponygallery&Itemid=27&func=special&sorting=mostcomment

In der Datei sub_viewspecial.php werden entsprechend der Parameter lastcomment/lastadd/rating die DB-Abfragen aufgebaut.
Zwischen den Abfragen 'rating' für die am besten bewerteten Bilder und der default-Abfrage (die meist gesehenen Bilder) wird neuer Code eingefügt.

Code
  case 'rating':
   $query1="SELECT *, ROUND(imgvotesum/imgvotes, 2) AS rating
       FROM #__ponygallery AS a, #__ponygallery_catg AS ca
       WHERE a.catid=ca.cid AND a.imgvotes > '0' AND a.published = '1' "
. " AND a.approved='1' " . " AND ca.published = '1' " . " AND ca.access<=$gid " . "\n
       ORDER BY rating DESC,imgvotesum DESC LIMIT $ag_toplist"
;
   $tl_title=_PONYGALLERY_TOP." $ag_toplist "._PONYGALLERY_BEST_RATED_PIC;
   break;
 
 //NEU
 case 'mostcomment':
 $query1="SELECT *, count(co.cmtid) AS cmtcount
      FROM #__ponygallery as a
      INNER JOIN #__ponygallery_catg as ca ON ca.cid=a.catid
      INNER JOIN #__ponygallery_comments as co ON co.cmtpic=a.id
      WHERE ca.published='1' AND ca.access<=$gid
      AND a.published='1' AND a.approved='1'
      AND co.published='1' AND co.approved='1'
      GROUP BY co.cmtpic
      ORDER BY cmtcount DESC
      LIMIT $ag_toplist"
;
 $tl_title=_PONYGALLERY_TOP." $ag_toplist am meisten kommentiert";            
 break;    
 //NEU Ende
 
 default:
   $query1="SELECT *
       FROM #__ponygallery AS a, #__ponygallery_catg AS ca
       WHERE a.imgcounter > 0 AND a.catid=ca.cid AND a.published = '1' "
. "\n AND a.approved='1' " . " AND ca.published = '1' " . " AND ca.access<=$gid". "\n
       ORDER BY imgcounter DESC LIMIT $ag_toplist"
;
   $tl_title=_PONYGALLERY_TOP." $ag_toplist "._PONYGALLERY_MOST_VIEWED_PIC;
   break;
 

Jetzt müsste der neue Link schon funktionieren.

Noch ein wenig Feintuning, um unnötige DB-Abfragen zu vermeiden.
In der Datei sub_viewspecial.html.php findest Du ab der Zeile 122 diese DB-Abfrage, welche für jedes Bild die Anzahl der Kommentare ermittelt.

Code
# Check how many comments exist
$database->setQuery( "SELECT *
 FROM #__ponygallery_comments
 WHERE cmtpic='$row1->id' AND approved = '1' and published = '1' "
);
 $comments_result=$database->query();
 $comments=mysql_num_rows( $comments_result );
 

Da diese Zahl schon vorliegt, können wir diese Abfrage für den neuen Parameter 'mostcomment' umgehen:
Code
if ($sorting!='mostcomment'){
 # Check how many comments exist
 $database->setQuery( "SELECT *
     FROM #__ponygallery_comments
     WHERE cmtpic='$row1->id' AND approved = '1' and published = '1' "
);
 $comments_result=$database->query();
 $comments=mysql_num_rows( $comments_result );              
}else{
 $comments=$row1->cmtcount;
}
 

Viel Erfolg
Gruß
Andreas


Titel: Re: Toplist: Meiste Kommentare
Beitrag von: Claudia E. am 10-10-2008 12:12:15
Hach, ich hab so gehofft, dass du mich "rettest". ;-))
Klappt perfekt - danke!