Artikelliste nach Hits

maTTos
Beiträge: 130
Registriert: Fr 27. Jun 2003, 14:14
Kontaktdaten:

Artikelliste nach Hits

Beitrag von maTTos » Fr 8. Okt 2004, 12:08

Hi, derzeit setze ich im Rahmen meiner Diplomarbeit ein Online-Zeitung mit Contenido um. Gerne möchte ich noch einen besonderen Dienst anbieten, der dem Besucher die Top X der meist gelesenen Artikel der letzten X Tage anzeigt. Hat jemand evtl. schon so ein Modul im Einsatz? Wenn nicht, hat jemand Lust und Zeit ein solches Modul zu schreiben? Ich bin dazu leider nicht in der Lage ...

Details zum Modul:

- Über den Input-Bereich lassen sich Tage eintragen, die berücksichtigt werden sollen
- Über den Input-Bereich kann die Anzahl der Artikel festgelegt werden
- Die Ausgabe erfolgt nach: 1., 2., 3., ...

Das Modul ist ja im Grunde ein Mix aus Artikelliste und der Abfrage der Tabelle der DB, in der die Hits gespeichert sind. Vielleicht lässt sich ja die Artikelliste von Kummer adaptieren. Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte. :roll:

Schöne Grüße, maTTos

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Fr 8. Okt 2004, 12:12

theoretisch klingt das nicht schlecht - nur werden die Statistiken ja am Monatsende umgestellt, d.h. das Modul müsste nicht nur die con_stat, sondern auch noch die con_stat_archive berücksichtigen - so müßte es dann gehen ;)

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Sa 9. Okt 2004, 15:02

ich habe ein aehnliches Modul geschrieben (muss irgendwo im Forum zu finden sein; wenn du nach 'haeufigste' suchst, dann ist die Ergebnisliste auch nicht so umfangreich), bei dem Top X der meist gelesenen Artikel angezeigt werden, allerdings nicht aus den letzten Y Tagen sondern aus dem aktuellen Monat. Wenn du das unbedingt mit einstellbaren Tagen haben willst, hat timo recht, dass du das Archiv der Statistik mit beruecksichtigen muesstest, was aber auch kein so wahnsinnig grosses Problem darstellen sollte. Zeit fuer Aenderungen habe ich allerdings leider keine.

Gruss
Christa

maTTos
Beiträge: 130
Registriert: Fr 27. Jun 2003, 14:14
Kontaktdaten:

Beitrag von maTTos » Sa 9. Okt 2004, 15:54

Im Prinzip ist es genau das Modul, das ich gesucht habe. Danke für den Tipp! Allerdings wären noch ein paar Anpassungen erforderlich. Hier die Punkte, die ich als problematisch ansehe:

1. Das Modul sollte nur die echten Artikel berücksichtigen. Bei mir werden Startseite und Übersichtsseiten (Artikellisten) mit ausgegeben. Der Besucher ist jedoch nur an den wirklichen Artikeln interessiert. Evtl. könnte dies über "Startartikel auslassen" gefixt werden.

2. Meine Seite verwendet drei Navigationen, deren Hauptbäume jeweils "Startseite" heißen, damit die Pfladlegende diesen Punkt immer anzeigt. Das Modul listet natürlich dann drei mal den Artikel "Startseite" auf. Dieses Manko wäre aber ebenso über "Startikel auslassen" zu lösen.

3. Schön wäre es, wenn sich der Zählerstand nicht am Anfang des Monats auf 0 stellt. Aber auch ohne könnte ich leben. :wink:

Könntest Du die aktuelle Version veröffentlichen, da aufgrund der umdefinierten Variablen (s. http://www.contenido.de/forum/viewtopic.php?t=4854) Probleme entstehen. Schade, dass Du keine Zeit hast ... :cry:

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Sa 9. Okt 2004, 18:27

zu 1+2: Startartikel auslassen ist vergleichsweise einfach. Du musst nur bei den SQL-Anweisungen in der WHERE-Klausel folgende Zeile hinzufuegen:
AND CATART.is_start = '0'

Ich brauche das Modul nicht neu zu posten, denn ich habe es damals an Ort und Stelle geaendert. Die Variablen sind schon laengst umbenannt.
maTTos hat geschrieben:3. Schön wäre es, wenn sich der Zählerstand nicht am Anfang des Monats auf 0 stellt. Aber auch ohne könnte ich leben. :wink:
Das haengt damit zusammen, weil nur die Tabelle mit der aktuellen Statistik (con_stat) abgefragt wird. Vielleicht kriegst du es ja auch alleine hin, den Rest zu aendern, nachdem der Grossteil eh' schon fertig ist. :P

maTTos
Beiträge: 130
Registriert: Fr 27. Jun 2003, 14:14
Kontaktdaten:

Beitrag von maTTos » So 10. Okt 2004, 23:23

AND CATART.is_start = '0'
Das hat schon viel geholfen. Danke! Ich habe noch die Nummerierung eingebaut. Jetzt fehlt nur noch die Berücksichtigung des con_stat_archive ... :roll:

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Do 14. Okt 2004, 19:05

Ich hatte inzwischen Zeit. :wink: Aber nur, um das Modul zu aendern, nicht auch, um es zu testen. Versuch's mal mit folgendem Output (Input wie beim anderen Modul):

Code: Alles auswählen

<?php 
/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname   :     Übersicht häufigste besuchte Seiten 
*                   berücksichtigt con_stat UND con_stat_archive
* Author          :     Christa Tabara 
* Copyright     :      Christa Tabara 
* Created        :     25-06-2004 
* Modified       :      14-10-2004 
************************************************/ 
$anzahl='CMS_VALUE[0]'; 
$db = new DB_Contenido; 
$sql = "SELECT ARTLANG.title, ARTLANG.idart, CAT.idcat, SUM(STAT.visited+STATARCH.visited) AS visited
           FROM {$cfg['tab']['art_lang']} AS ARTLANG, 
                    {$cfg['tab']['cat_art']} AS CATART, 
                    {$cfg['tab']['cat']} AS CAT, 
                    {$cfg['tab']['stat']} AS STAT,
                    {$cfg['tab']['stat_archive']} AS STATARCH
           WHERE ARTLANG.online = '1' 
                      AND ARTLANG.idart = CATART.idart 
                      AND ARTLANG.idlang = STAT.idlang 
                      AND ARTLANG.idlang = STATARCH.idlang 
                      AND CATART.idcatart = STAT.idcatart
                      AND CATART.idcatart = STATARCH.idcatart 
                      AND CATART.idcat = CAT.idcat 
                      AND STAT.idlang= '$lang' 
                      AND STAT.idclient = '$client' 
                      AND STATARCH.idlang= '$lang' 
                      AND STATARCH.idclient = '$client' 
           ORDER BY STAT.visited desc 
           LIMIT 0,".$anzahl; 
$db->query($sql); 

              echo '<table width="290" border="0" cellspacing="0" cellpadding="2" style="border: 1px; border-color: #4779a0; border-style: solid"> 
               <tr><td width="90%" style="border: 1px; border-right: 0px; border-color: #4779a0; border-style: solid; background-color: #EEEEEE; padding-left:10px" class="subheadline">Am häufigsten besuchte Seiten</td> 
<td width="10%" style="border: 1px; border-color: #4779a0; border-style: solid; background-color: #EEEEEE; padding-left:10px" class="subheadline">Aufrufe</td> 
               </tr>'; 
for ($zeilen = 0; $zeilen<$anzahl; $zeilen++) 
     { 
       $db->next_record(); 
       $title = $db->f("title"); 
       $idcat_mfv = $db->f("idcat");//mfv=most frequently visited 
       $idart_mfv = $db->f("idart"); 
       $aufrufe = $db->f("visited"); 
       $link = $sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat_mfv&idart=$idart_mfv"); 
       echo '<tr> 
                <td width="90%" style="border: 1px; border-top:0px; border-right:0px; border-color: #4779a0; border-style: solid; padding-left:10px"><a href="'.$link.'">'.$title.'</a></td> 
<td width="10%" style="border: 1px; border-top:0px; border-color: #4779a0; border-style: solid; padding-left:10px" class="subheadline">'.$aufrufe.'</a></td> 
                </tr>'; 
      } 
echo '</table>'; 
?>

maTTos
Beiträge: 130
Registriert: Fr 27. Jun 2003, 14:14
Kontaktdaten:

Beitrag von maTTos » Fr 15. Okt 2004, 12:35

Hallo Halchteranerin, danke das du dich dem Thema noch einmal angenommen hast. :D
Der Outputcode erzeugt kein rotes Lämpchen, aber leider erfolgt im Frontend keine Ausgabe der Artikel. Es bleibt einfach leer. Mit ist nicht klar, welchen Zeitraum das Modul voraussetzt, da ja kein weiterer CMS_VALUE für die Eintragung der Tage genutzt wird.

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Sa 16. Okt 2004, 08:25

maTTos hat geschrieben:Mit ist nicht klar, welchen Zeitraum das Modul voraussetzt, da ja kein weiterer CMS_VALUE für die Eintragung der Tage genutzt wird.
Das mit den Tagen ist auch noch nicht drin, denn SO schnell kann ich die SQL-Anweisung doch nicht aendern. :) Was da rauskommen sollte ist erstmal nur die Summe der Hits aus der aktuellen Statistik PLUS Archiv. Du kannst das also nur feststellen, wenn du beide Module nebeneinander einbaust und die ausgegebenen Zahlen vergleichst.

So wie du das haben willst, dass man die Anzahl der Tage angeben kann, weiss ich auch noch nicht, wie man das realisiert, denn in den beiden Tabellen con_stat und con_stat_archive ist zwar jeweils eine Spalte visitdate, mir ist aber das dort enthaltene Format nicht klar. Da stehen solche Zahlen wie 20041015102351 oder 20041004124113. Der Datentyp fuer visitdate ist timestamp, und ich weiss leider nicht, wie man einen timestamp-Wert in ein Datum zurueckwandelt. Ich habe bei php.net etwas anderes gefunden, womit man ggf. rechnen koennte, das muss ich mir in einer ruhigen Minute angucken.

Bis dahin wuerde es mich aber interessieren, ob das bisherige Modul so wie gerade beschrieben funktioniert. :)

djw
Beiträge: 129
Registriert: Di 6. Apr 2004, 21:27
Wohnort: Baden
Kontaktdaten:

Beitrag von djw » Sa 16. Okt 2004, 11:58

Halchteranerin hat geschrieben:Da stehen solche Zahlen wie 20041015102351 oder 20041004124113. Der Datentyp fuer visitdate ist timestamp, und ich weiss leider nicht, wie man einen timestamp-Wert in ein Datum zurueckwandelt. Ich habe bei php.net etwas anderes gefunden, womit man ggf. rechnen koennte, das muss ich mir in einer ruhigen Minute angucken.
Naja kannst ja splitten
Beispiel:
20041015102351 =
Jahr 2004
Monat 10
Tag 15
Stunde 10
Minute 23
Sekunde 51

kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer » Sa 16. Okt 2004, 15:51

das ist nicht nötig. du kannst es dir direkt von mysql so zurückgeben lassen, wie du es gerne möchtest.

siehe hier (unter date_format):
http://dev.mysql.com/doc/mysql/en/Date_ ... tions.html

gruss,
andreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Sa 16. Okt 2004, 16:09

danke, ich guck mir das mal an.

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » So 17. Okt 2004, 01:52

Nicht schoen, aber selten ... Eigentlich laeuft's auch nicht, wie es soll, aber ich wollte trotzdem schon mal den Zwischenstand veroeffentlichen. Vielleicht kann es jemand verbessern.

Ich weiss naemlich gerade nicht, woran es liegt, aber ... je nach Anzahl der eingestellten Tage werden entweder die Daten aus der aktuellen Statistik oder aus dem Archiv geholt, jedoch ohne die Anzahl wirklich zu beruecksichtigen. Also ob ich heute 25 oder 250 Tage einstelle, macht nichts, es stehen bei beiden die gleichen Zahlen. Was ich nicht weiss und gerade auch nicht ausprobieren kann, weil sich mein Server verabschiedet hat: ob das wenigstens funktioniert, wenn man weniger Tage als das aktuelle Datum (also z.B. nur 15) angibt, also ob dann tatsaechlich nur die Statistik der letzten 15 Tage oder doch die vom ganzen (aktuellen) Monat ausgegeben wird.

Code: Alles auswählen

/*********************************************** 
* CONTENIDO MODUL - INPUT 
* 
* Modulname   :     Übersicht häufigste besuchte Seiten 
*                   berücksichtigt con_stat UND con_stat_archive 
*                   Anzahl der zu berücksichtigen Tage
*                   ist einstellbar
* Author          :     Christa Tabara 
* Copyright     :      Christa Tabara 
* Created        :     25-06-2004 
* Modified       :      17-10-2004 
************************************************/ 

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\"> 
        <tr> 
           <td>Wieviele Artikel sollen aufgelistet werden?</td> 
           <td><input type=\"text\" name=\"CMS_VAR[4]\" value=\"CMS_VALUE[4]\"></td> 
           </tr>
                   <tr> 
           <td>Wieviel Tage sollen berücksichtigt werden?</td> 
           <td><input type=\"text\" name=\"CMS_VAR[5]\" value=\"CMS_VALUE[5]\"></td> 
           </tr>
           </table>";

Code: Alles auswählen

<?php 
/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname   :     Übersicht häufigste besuchte Seiten 
*                   berücksichtigt con_stat UND con_stat_archive 
*                   Anzahl der zu berücksichtigen Tage
*                   ist einstellbar
* Author          :     Christa Tabara 
* Copyright     :      Christa Tabara 
* Created        :     25-06-2004 
* Modified       :      17-10-2004 
************************************************/ 
$anzahl='CMS_VALUE[4]'; 
$anzahltage='CMS_VALUE[5]';
$aktuellesekunde=date("YmdHis");
$erstesekundedesmonats=date("Ym").'01000001';
$zeitdifferenz=($aktuellesekunde-$erstesekundedesmonats)/1000000;

$db = new DB_Contenido;
if($zeitdifferenz>=$anzahltage) 
$sql = "SELECT DISTINCT ARTLANG.title, ARTLANG.idart, CAT.idcat, STAT.visited
           FROM {$cfg['tab']['art_lang']} AS ARTLANG, 
                    {$cfg['tab']['cat_art']} AS CATART,
                    {$cfg['tab']['cat']} AS CAT,
                    {$cfg['tab']['stat']} AS STAT
           WHERE ARTLANG.online = '1' 
                      AND ARTLANG.idart = CATART.idart 
                      AND ARTLANG.idlang = STAT.idlang
                      AND CATART.idcatart = STAT.idcatart
                      AND CATART.idcat = CAT.idcat 
                      AND STAT.idlang= '$lang' 
                      AND STAT.idclient = '$client'
                      AND (DATE_SUB(CURRENT_TIMESTAMP()+0,INTERVAL $anzahltage DAY) <= STAT.visitdate)
           GROUP BY ARTLANG.title
           ORDER BY STAT.visited desc
           LIMIT 0,".$anzahl;
else
$sql = "SELECT DISTINCT ARTLANG.title, ARTLANG.idart, CAT.idcat, STATARCH.visited, 
              STAT.visitdate, STATARCH.visitdate
           FROM {$cfg['tab']['art_lang']} AS ARTLANG, 
                    {$cfg['tab']['cat_art']} AS CATART, 
                    {$cfg['tab']['cat']} AS CAT, 
                    {$cfg['tab']['stat']} AS STAT, 
                    {$cfg['tab']['stat_archive']} AS STATARCH 
           WHERE ARTLANG.online = '1' 
                      AND ARTLANG.idart = CATART.idart 
                      AND ARTLANG.idlang = STAT.idlang 
                      AND ARTLANG.idlang = STATARCH.idlang 
                      AND CATART.idcatart = STAT.idcatart 
                      AND CATART.idcatart = STATARCH.idcatart 
                      AND CATART.idcat = CAT.idcat 
                      AND STAT.idlang= '$lang' 
                      AND STAT.idclient = '$client' 
                      AND STATARCH.idlang= '$lang' 
                      AND STATARCH.idclient = '$client'
                      AND (DATE_SUB(CURRENT_TIMESTAMP()+0,INTERVAL $anzahltage DAY) <= STAT.visitdate
                           OR DATE_SUB(CURRENT_TIMESTAMP()+0,INTERVAL $anzahltage DAY) <= STATARCH.visitdate)
           GROUP BY ARTLANG.title
           ORDER BY STATARCH.visited desc 
           LIMIT 0,".$anzahl; 
$db->query($sql); 

              echo '<table width="290" border="0" cellspacing="0" cellpadding="2" style="border: 1px; border-color: #4779a0; border-style: solid"> 
               <tr><td width="90%" style="border: 1px; border-right: 0px; border-color: #4779a0; border-style: solid; background-color: #EEEEEE; padding-left:10px" class="subheadline">Am häufigsten besuchte Seiten</td> 
<td width="10%" style="border: 1px; border-color: #4779a0; border-style: solid; background-color: #EEEEEE; padding-left:10px" class="subheadline">Aufrufe</td> 
               </tr>'; 
for ($zeilen = 0; $zeilen<$anzahl; $zeilen++) 
     { 
       $db->next_record(); 
       $title = $db->f("title"); 
       $idcat_mfv = $db->f("idcat");//mfv=most frequently visited 
       $idart_mfv = $db->f("idart"); 
       $aufrufe = $db->f("visited"); 
       $link = $sess->url("front_content.php?client=$client&lang=$lang&idcat=$idcat_mfv&idart=$idart_mfv"); 
       echo '<tr> 
                <td width="90%" style="border: 1px; border-top:0px; border-right:0px; border-color: #4779a0; border-style: solid; padding-left:10px"><a href="'.$link.'">'.$title.'</a></td> 
<td width="10%" style="border: 1px; border-top:0px; border-color: #4779a0; border-style: solid; padding-left:10px" class="subheadline">'.$aufrufe.'</a></td> 
                </tr>'; 
      } 
echo '</table>'; 
?>

Moods
Beiträge: 7
Registriert: Mo 1. Nov 2004, 12:31
Kontaktdaten:

Statistik

Beitrag von Moods » Fr 10. Dez 2004, 19:58

Halchteranerin hat geschrieben:Nicht schoen, aber selten ... Eigentlich laeuft's auch nicht, wie es soll, aber ich wollte trotzdem schon mal den Zwischenstand veroeffentlichen. Vielleicht kann es jemand verbessern.

Ich weiss naemlich gerade nicht, woran es liegt, aber ... je nach Anzahl der eingestellten Tage werden entweder die Daten aus der aktuellen Statistik oder aus dem Archiv geholt, jedoch ohne die Anzahl wirklich zu beruecksichtigen. Also ob ich heute 25 oder 250 Tage einstelle, macht nichts, es stehen bei beiden die gleichen Zahlen. Was ich nicht weiss und gerade auch nicht ausprobieren kann, weil sich mein Server verabschiedet hat: ob das wenigstens funktioniert, wenn man weniger Tage als das aktuelle Datum (also z.B. nur 15) angibt, also ob dann tatsaechlich nur die Statistik der letzten 15 Tage oder doch die vom ganzen (aktuellen) Monat ausgegeben wird.
Hallo,
habe Dein Modul eingesetzt und den gleichen Fehler (gleiche Ausgabe von Hits, unabhängig davon ob 30 oder 365 Tage eingetragen sind). Hast Du zwischenzeitlich den Fehler entdeckt? Wäre schön!

Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin » Fr 10. Dez 2004, 22:12

neee, tut mir leid, ich habe mich nicht mehr damit befasst (ich habe auch nicht daran gedacht, muss ich zugeben :oops: ), und im Augenblick habe ich leider auch keine Zeit. Ich werde mir aber ein Lesezeichen zu diesem Beitrag setzen, und wenn ich mal wieder Zeit haben sollte, gucke ich mir das nochmal an.

Gesperrt