Tags

maxikey

Erfahrenes Mitglied
Heyhooooo,
Ich will mir ein Tag-System schreiben, welches eine liste von Bildadressen und text aus einer Datenbank lädt und dann mal größer, mal kleiner anzeigt - In Form von Tags eben. Jetzt ist meine Frage,
Wie das geht?

Ich freue mich auf eure Antworten ;-)

DANKE IM VORAUS!

MFG Maxi
 
Ah, das ist eine sog. "Tag-Cloud", evtl. mal googeln.

Aber wie möchtest du das in Form von Bildern darstellen? Die meißt gesehenen größer, die anderen kleiner?
 
Nun ja, Ich habe immer ein Bild und einen dazugehörigen Text. Die sollten nebeneinander in proportionaler Größe angezeigt werden. Und diese Bild-Text-Anzeigen sind wie bei einer Tagcloud eben mal größer und mal kleiner.

Freue mich auf Rückmeldung!

MFG Maxi
 
Ob man eine Tag Cloud mit Bildern oder - wie übliche - mit Text füllt macht eigentlich keinen Unterschied.

Beispiel anhand einer Suche:
Jede Suchanfrage zu dem Wort "foo" lässt einen Zähler um 1 steigen.
Bei der Ausgabe wird dann lediglich die font-size anhand des Zählers berechnet.
Desto größer der Zähler, desto größer die font-size und umgekehrt.

Das selbe macht man nun bei Bildern.
Desto größer der Zähler, desto größer wie width/height des jeweiligen Bildes.
 
Nabend,
zunächst einmal würde ich - wie Homer schon erwähnte - googeln. Mich hat das direkt zum TagCloud-Artikel bei Wikipedia gebracht. Dort findet sich auch direkt die passende Formel.
Desweiteren würde ich das folgendermaßen machen:


SQL:

3 Tabellen:
  1. Tabelle mit Sachen, denen du Tags zu ordnen möchtest (z.B. Blog-Einträge, Artikel etc.)
  2. Tabelle mit den Tags
  3. Tabelle die Einträge aus 1. und 2. zueinander zuordnet

Beispiel:
Artikel:
SQL:
CREATE TABLE `articles` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  [...]
  PRIMARY KEY  (`id`)
)

Tags:
SQL:
CREATE TABLE `tags` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
)

Zuordnung:
SQL:
CREATE TABLE `articles_tags` (
  `article_id` smallint(5) unsigned NOT NULL,
  `tag_id` smallint(5) unsigned NOT NULL,
  PRIMARY KEY  (`article_id`,`tag_id`)
)


Von diesem Tabellendesign ausgehend kannst du die benötigten Parameter wiefolgt ermitteln:

Minimales und maximales Gewicht:
SQL:
SELECT 
    MIN(count) AS min, 
    MAX(count) AS max 
FROM 
    (
        SELECT 
            COUNT(*) AS count 
        FROM 
            articles_tags 
        GROUP BY 
            tag_id
    ) AS s

Gewichtungen der einzelnen Tags:
SQL:
SELECT 
    t.*, 
    COUNT(tag_id) AS appearances 
FROM 
    tags AS t 
    JOIN articles_tags AS at ON t.id = at.tag_id 
GROUP BY 
    t.id 
ORDER BY 
    t.name

Berechnung der Schriftgröße:

f_max ist die von dir gewählte maximale Schriftgröße
t_min, t_max und t_i für die einzelnen Tags werden mit eben angeführten Queries in Erfahrung gebracht
Code:
      f_max * (t_i - t_min)
s = -----------------------------  für t_i > t_min, ansonsten s = 1
         t_max - t_min
(siehe Wikipedia für schönere Darstellung)


Beispiel:
1. Query
Code:
+------+------+
| min  | max  |
+------+------+
|    2 |    5 | 
+------+------+

2. Query
Code:
+----+-------+-------------+
| id | name  | appearances |
+----+-------+-------------+
|  4 | C++   |           3 | 
|  5 | CSS   |           3 | 
|  6 | HTML  |           3 | 
|  3 | Java  |           2 | 
|  2 | MySQL |           2 | 
|  1 | PHP   |           5 | 
+----+-------+-------------+

Für den HTML-Tag würde sich folgende Formel ergeben:
Code:
      f_max * (t_i - t_min)     f_max * (3 - 2)
s = ----------------------------- = ---------------------- =  1/3 f_max 
         t_max - t_min               5 - 2

Ich hoffe, dass ich dir damit weiterhelfen konnte, falls noch was unschlüssig ist, lass es mich wissen.

Schöne Grüße und gute Nacht,
Marvin Schmidt
 
Zurück