Zapewne spotkałeś się już na którymś z serwisów związanych z blogosferą charakterystyczne menu składające się z ciągu słów różnej wielkości.
Fragment www.technorati.com/tag
Jest to interesujący sposób na pokazanie menu składającego się z bardzo wielu elementów. Wielkość czcionki, jaką zapisane są poszczególne kategorie, uzależniona jest w tym przypadku od względnej popularności danej kategorii.
Dzięki takiemu prostemu rozwiązaniu, Internaucie wystarczy rzut oka, by ustalić najpopularniejsze zagadnienia. Wbrew pozorom, jest to bardzo czytelne rozwiązanie.
Podobne menu wdrożyłem na stronie głównej cneb.pl widocznej po zalogowaniu się.
Fragment menu na www.cneb.pl widocznego po zalogowaniu się.
W przypadku cneb.pl wielkość czcionki uzależniona jest od ilości artykułów, dyskusji i innych materiałów w danej kategorii tematycznej.
Z całą pewnością nie powiniśmy ograniczać się tylko do tego typu menu w serwisie. Jest to jednak ciekawa alternatywa dla klasycznej listy kategorii.
Czynnik decydujący o wielkości czcionki nie jest jednak istotny, jeśli chcemy stworzyć tego typu menu we własnym serwisie. W cneb.pl zastosowałem następującą metodę do wygenerowania menu:
<?php // pobieram z listy kategorii identyfikatory wszystkich kategorii $sql = mysql_query("SELECT cid FROM CMS_cat"); while($cat = mysql_fetch_array($sql)) { // liczę, ile w danej kategorii jest materiałów $ile = mysql_numrows(sql("SELECT aid FROM CMS_articles_cat WHERE cid = $cat[cid]")); // aktualizuję wartość cat_count dnaej kategorii informującą // o liczbie materiałów w kategorii sql("UPDATE CMS_cat SET cat_count = '$ile' WHERE cid = '$cat[cid]'"); } // pobieram listę unikalnych wartości cat_count z listy kategorii // sortując je wg tej wartości rosnąco $sql = mysql_query("SELECT DISTINCT cat_count FROM CMS_cat ORDER BY cat_count ASC"); // obliczam liczbę unikalnych wartości $ile = mysql_numrows($sql); // obliczam, co ile wartości należy podnieść ranking // założyłem 9 stopni wielkości czcionki. $coile = ceil($ile/9); // ustawiam indeks wartości i rankingu na 1 $i = 1; $rank = 1; while($cat = mysql_fetch_array($sql)) { // wstawiam wartość rankingu do danych każdej kategorii, // która ma daną wartość cat_count. sql("UPDATE CMS_cat SET cat_rank = '$rank' WHERE cat_count = '$cat[cat_count]'"); // jesli indeks unikalnych wartosci zrówna się z wartością // zmiennej $coile, resetuję indeks i zwiększam wartość rankingu if ($i==$coile) { $i=1; $rank++; } else { // w przeciwnym wypadku zwiększam wartość indeksu o 1 $i++; } } ?> |
Chętnie dowiem się o ciekawych wdrożeniach tego typu menu w serwisach nie będących blogami, gdzie jest to rozwiązanie coraz bardziej popularne.