+ Antworten
Ergebnis 1 bis 9 von 9

Thema: Komme mit mein TagCloud Script nicht weiter...

  1. #1
    TP-Member dixy macht alles soweit korrekt
    Registriert seit
    Nov 2005
    Beiträge
    32

    Komme mit mein TagCloud Script nicht weiter...

    ... irgendwie kniffel ich schon seit Gestern an der Aufgabe, ein Tag Cloud
    http://de.wikipedia.org/wiki/TagCloud zu entwickeln, habe über Google gesucht und gelesen.

    Na ja und schlußendlich mich am Script versucht.

    Ich habe in einer Datenbank, Daten die aus mein Statistikscript entstanden sind, die Suchbegriffe
    zur Website wurden verwendet.

    ---------------------------------------------
    Dort steht dann von mir aus:

    Stichwort: Bildbearbeitung
    Wie oft gesucht: 650

    Stichwort: Fotos
    Wie oft gesucht: 350

    Stichwort: Zeichnungen
    Wie oft gesucht:120

    u.s.w.
    ----------------------------------------------

    Jetzt möchte ich diese Datenbankdaten über ein Tag Cloud (Schlagwortwolke)
    visuell darstellen mit entsprechender Verlinkung.

    Ich habe mich da von einem Script aus dem Web beholfen, was aber
    nicht so richtig funktioniert (...)

    PHP-Code:



     
    // Datenbank Verbindung wurde vorher hergestellt


    function tagcloud()
    {
        
    $abfrage "SELECT * FROM `tags` ORDER BY `zaehler` DESC";

        
    $result mysql_query($abfrage);

        while (
    $row mysql_fetch_array ($result))

        {
            
    $stichworte explode(", "$row['stichworte']);

            foreach(
    $stichworte as $text)
            {

                    
    $data[] = $text;



            }
        }





        
    $data array_unique($data);


        
    $keys array_rand($data20);

        foreach(
    $keys as $key)
        {
            
    // Clouds erstellen
            
    $dicken = array(100200300400500600);

            
    $size rand(1218);
            
    $weight $dicken[rand(05)];

            
    $kurl urlencode($data[$key]);

            echo 
    "<a href=\"index.php?action=blog&amp;suche=$kurl\" class=\"tag\"; style=\"font-size: {$size}px; font-weight: {$weight}\" title=\"$data[$key]\">$data[$key]</a> ";
        }


    Ausgabe in HTML:
    HTML-Code:
    <a href="index.php?action=blog&amp;suche=Bildersuche" class="tag"; style="font-size: 12px; font-weight: 200" title="Bildersuche">Bildersuche</a> 
    
    <a href="">..u.s.w.</a>
    

    Die Schlagwortwolke wird visuell schon dargestellt aber nicht richtig nach dem
    Datenfeld "zaehler". Was mir aber noch schwieriger erscheint, ich habe noch keine Idee wie ich die einzelne Verlinkung der Tags umsetze.

    Ich hoffe mir kann da jemand weiterhelfen, komme mit dem Script nicht weiter und fand dazu auch kein für mich brauchbares Tutorial.

    di
    Der Horizont der meisten Menschen ist ein Kreis mit dem Radius 0. Und das nennen sie ihren Standpunkt.

  2. #2
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    tagclouds sind vom Prinzip einfach.

    Vorüberlegung: Anzahl der Abstufungen (z.B. 6)
    Range: Hol den max. Wert aus der DB und teil ihn durch die Abstufung, also z.B:
    max: 600
    Abstufung:6
    range: 600/6 = 100

    jetzt läufst Du in der Schleife durch Deine Datensätze nach dem Prinzip
    PHP-Code:

    while($row=mysql_fetch_assoc($res)) {
      
    $wert $row['wert'];
      
    $classValue ceil($wert/$range);
      
    $cssClass='tag'.$classValue;
      
    //link
      
    $out .= '<span class="'.$cssClass.'"><a href="..">'.$row['string'].'</a></span> ';

    fertig ist die Tagcloud, du musst natürlich die css-klassen tag1-6 definieren.


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  3. #3
    TP-Member dixy macht alles soweit korrekt
    Registriert seit
    Nov 2005
    Beiträge
    32
    Zitat Zitat von steffenk Beitrag anzeigen
    tagclouds sind vom Prinzip einfach.
    Das kann schon sein (grins), ich hatte da jedenfalls so meine
    Probleme.

    Egal, zuerst einmal danke ich Dir, werde die Hinweise einmal ausprobieren.

    Vorüberlegung: Anzahl der Abstufungen (z.B. 6)
    Range: Hol den max. Wert aus der DB und teil ihn durch die Abstufung, also z.B:
    max: 600
    Abstufung:6
    range: 600/6 = 100
    Was meinst du damit, worauf bezieht sich die Anzahl der Abstufungen, ist das so ähnlich, wie wenn ich es mit einer MySql Abfrage erreiche.

    PHP-Code:
    $abfrage "  SELECT * FROM `tags` ORDER BY `zaehler` DESC LIMIT 0 , 25"
    Die css-klassen (tag1-6), dachte ich mit einer switch Schleife umzusetzen, hmm, aber wie ich die einzelnen Links (je Stichwort) in die Schleife kommen?

    Habe gerade eine Idee, bin mir aber noch nicht sicher ob es Sinn macht.

    Wenn ich in der Datenbank in der Tabelle "tags" ein zusätzliches Feld für den
    "url" herstelle, könnte ich vielleicht in einen Abwasch die Links reinschreiben?!

    di
    Der Horizont der meisten Menschen ist ein Kreis mit dem Radius 0. Und das nennen sie ihren Standpunkt.

  4. #4
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    Abstufungen sind die Anzahl an Unterschiede (z.B. durch die Schriftgrösse ausgedrückt), also die Anzahl der klassen die Du erhälst.

    Das mit den Links hängt von Dir ab, ich hab ja keine Ahnung was Du da ausgeben willst, i.d.R. eine Seite mit dem Tag als Parameter.

    ...'<a href="tags.php?tag='.htmlspecialchars($tag).'">...


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  5. #5
    TP-Insider Settler ist ein richtiges Arbeitstier - DANKE Settler ist ein richtiges Arbeitstier - DANKE Settler ist ein richtiges Arbeitstier - DANKE Settler ist ein richtiges Arbeitstier - DANKE Avatar von Settler
    Registriert seit
    Feb 2008
    Ort
    Marl
    Beiträge
    805
    Wird bald auf mich auch zukommen, hier mal ein fertiges Paket:


    http://pear.php.net/package/HTML_TagCloud

  6. #6
    TP-Member dixy macht alles soweit korrekt
    Registriert seit
    Nov 2005
    Beiträge
    32
    Hallo zusammen,

    so, hatte jetzt wieder etwas Zeit mich mit dem Problem Tag Clouds
    auseinanderzusetzen.

    Da ich sehr lange im Netz nach Tipps, Hinweisen und Lösungen gesucht hatte, die ich für meine Anforderungen brauchte
    und sie leider nicht fand. Möchte ich, falls jemand anderes auch nach einer Lösung sucht, mein Ergebnis hier darstellen.

    steffenk hatte mich da unheimlich weitergeholfen, trotzdem dauerte es noch etwas, bis ich eine einigermaßen
    gebrauchbare Lösung gefunden hatte, ob es die beste, na ja, ich bin kein PHP Programmierer aber es funktioniert.

    Zur Erinnerung:

    Ich wollte Suchbegriffe (von Google Anfragen) in einer Wortwolke visualisieren.
    Die Begriffe stehen in einer Datenbank (als $stichworte), die Häufigkeit der
    Verwendung dieser Begriffe hat ein Feld ($val).


    Jetzt sollen Sie über eine Datenbankabfrage ausgelesen werden, was für mich auch kein Problem war.

    PHP-Code:


    // Ausgabe außerhalb der Schleife

    echo "<fieldset id=\"tagcloud\"><legend>Top Suchbegriffe:</legend>";        

    /***********************/
    /* Datenbankverbindung */
    /***********************/



    $serverid = @mysql_connect("127.0.0.1""root""");
    mysql_select_db("test")
    or die(
    "Die Datenbank ist zur Zeit nicht erreichbar!");


    /*****************************/
    /*       Abfrage der DB      */
    /*****************************/

    $abfrage "  SELECT * FROM `tagcloud` ORDER BY id ASC LIMIT 0 , 20  ";



     
    $result mysql_query($abfrage);



    while(
    $row=mysql_fetch_assoc($result)) {


     
    //Der Suchbegriff

    $stichworte $row['stichworte'];

     
    // der Wert des Suchbegriffes

    $val $row['val'];


    // ausgabe des Links

    $c  .= '<a target="_blank" href="http://www.google.de/search?q=site:'.$Domain.' '.urldecode($row['stichworte']).'"  class="'.$cssClass.'"    title="Suchbegriffe zur Website: '.$row['stichworte'].'" onfocus="if(this.blur)this.blur()" >'.$row['stichworte'].",</a> \n";


    }

    echo 
    $c;



    echo
    "</fieldset>";


    // ... Auszug, php Script ende... 

    Die Gestaltung der Stichworte im TagCloud wollte ich über CSS realisieren.
    Da tat ich mir etwas schwer mit, hatte einfach ne Denkblockade, weiß auch nicht ob man es hätte anders Lösen
    können, für Hinweise und Tipps, bin ich dankbar.

    In der oben beschriebenen Abfrageschleife kommt noch die CSS Abstufung:

    PHP-Code:

    // es sollenn 9 css stufen geben

     
    $cssValueround($val/9*100);



    for (
    $i=0;$i<$cssValue;$i++)
    {

       if(
    $i>=5){
        
    $classValue=1;
       }

        if(
    $i>=18){
        
    $classValue=2;
       }


        if(
    $i>=27){
        
    $classValue=3;
       }

        if(
    $i>=36){
        
    $classValue=4;
       }


        if(
    $i>=45){
        
    $classValue=5;
       }

        if(
    $i>=54){
        
    $classValue=6;
       }

        if(
    $i>=60){
        
    $classValue=7;
       }


        if(
    $i>=70){
        
    $classValue=8;
       }

        if(
    $i>=90){
        
    $classValue=9;
       }


     }






    // css string zusammengesetzt

     
    $cssClass='tag'.$classValue

    Das CSS ist extern:
    Code:
    
                    .tag9 { font-size: 34px; color: #1B5E8D;}
    		
                    bis...
                                    		
    		.tag1 { font-size: 12px; color: #86BCE2;}
    Da ich hier immer nur Auszugsweise das Script darstellen wollte, um hier nicht ein zu langes Script reinstellen zu müssen,
    ermüdet die Augen (grins), hoffe ich dass beim kopieren alles wesentliche mitging und es noch verständlich ist.

    Bei der For-Schleife, habe ich mir da ganze wie eine Prozent Scala (von 100 bis 10) vorgestellt.
    Es später dann doch visuell nach der Ausgabe (im HTML) überprüft und nachkorrigiert. So in etwa.

    di
    Geändert von dixy (25.04.2008 um 14:37 Uhr)
    Der Horizont der meisten Menschen ist ein Kreis mit dem Radius 0. Und das nennen sie ihren Standpunkt.

  7. #7
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    den Tipp mit der Abstufung hatte ich Dir schon gegeben, das geht über den Maxwert. Hier nochmal:

    Angenommen Du möchtest 6 Abstufungen (Schriftgrössen), dann geht das so:

    Berechne max-Wert eines Vorkommens:
    select count(*) cnt from tabelle group by tagfield order by count(*)

    angenommen ein tag kommt 56 mal vor (der Maximalwert), dann errechnest Du den Schwellenwert der Abstufung:

    56 / 6 = 9,333 als int: 9

    Dadurch hast Du
    1-9
    10-18
    19-27
    28-36
    37-45
    46-max

    So sähe das dann in php aus:


    PHP-Code:
    $sql 'select count(*) cnt, tagfeld from tabelle group by tagfeld order by count(*)';
    $res mysql_query($sql);
    $max=0;
    while(
    $row mysql_fetch_assoc($res)) {
      if (
    $max == 0) {
                
    // Maximalwert / Abstufung ergibt den Schwellenwert
          
    $schwellenWert intval($row['cnt'] / 6);
      }
      
    $tagsHTML[] = '<span class="tag'.ceil($row['cnt']/$schwellenWert).'>'.htmlspecialchars($row['tagfeld']).'</span> ';
    }  
        
    // einmal mischen
    shuffle($tagsHTML);
        
    // tagcloud ausgeben
    echo implode('',$tagsHTML); 
    ein bischen css
    Code:
    span.tag1 { font-size:10px; }
    span.tag2 { font-size:12px; }
    span.tag3 { font-size:14px; }
    span.tag4 { font-size:16px; }
    span.tag5 { font-size:18px; }
    span.tag6 { font-size:20px; }
    fertig ist die tagcloud
    Geändert von steffenk (26.04.2008 um 00:49 Uhr)


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  8. #8
    TP-Member dixy macht alles soweit korrekt
    Registriert seit
    Nov 2005
    Beiträge
    32

    Cool

    Hei steffenk,

    so dann war meine Lösung keine gute Lösung (grins), na von der Ausgabe her
    sah das aber schon vernünftig aus.

    Danke Dir für deinen Lösungsvorschlag. Habe deinen Vorschlag gleich
    einmal ausprobiert, habe nur die Variablen auf meine Datenbank Tabelle angepasst.

    Bei mir kommt immer ne Fehlermeldung:

    Warning: Division by zero in... (line 50)

    Damit ist diese Stelle gemeint:
    PHP-Code:

    //auszug aus Scriptstelle...

      
    $tagsHTML[] = '<span  $tagsHTML[] = '<span class="tag'.ceil($row['val']/$schwellenWert).'>'.htmlspecialchars($row['stichworte']).'</span> ';

    // auszug ende 
    Damit wir immer von den gleichen Werten und Variablen reden, habe ich meine DB Tabelle kopiert und mit deinen Feld- und Tabellen namen benannt.


    Da ist aber die gleiche Meldung.


    Wenn ich es richtig verstehe, ist schwellenwert = 0 (oder?)

    Liegt es an dieser Stelle?

    PHP-Code:
     $schwellenWert intval($row['cnt'] / 6); 


    Ich probiere noch was aus.

    PHP-Code:


    $cnt 
    $row['cnt'];
          echo 
    $cnt;

    //geben keine Werte aus 
    hmm, jetzt gehe ich erst mal in die Sonne...

    di
    Der Horizont der meisten Menschen ist ein Kreis mit dem Radius 0. Und das nennen sie ihren Standpunkt.

  9. #9
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    wenn cnt 0 ist, dann stimmt Deine SQL-Abfrage nicht - teste die erst in phpmyadmin oder msd.


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


+ Antworten

Stichworte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51