Ta metoda jest dla SQL/PostgreSQL
fanatyków. Wykonuje całą pracę w bazie danych i drukuje tekst z linkiem "slugified". Używa Doctrine ORM
tylko do wywołania sql, nie używam obiektów. Załóżmy, że mamy 10 rozmiary:
public function getAllForTagCloud($fontSizes = 10)
{
$sql = sprintf("SELECT count(tag) as tagcount,tag,slug,
floor((count(*) * %d)/(select max(t) from
(select count(tag) as t from magazine_tag group by tag) t)::numeric(6,2))
as ranking
from magazine_tag mt group by tag,slug", $fontSizes);
$q = Doctrine_Manager::getInstance()->getCurrentConnection();
return $q->execute($sql);
}
następnie je wydrukować z pewnej klasy CSS, z .tagranking10 (najlepsza) do.tagranking1 (najgorsza):
<?php foreach ($allTags as $tag): ?>
<span class="<?php echo 'tagrank'.$tag['ranking'] ?>">
<?php echo sprintf('<a rel="tag" href="/search/by/tag/%s">%s</a>',
$tag['slug'], $tag['tag']
); ?>
</span>
<?php endforeach; ?>
i to jest CSS
:
/* put your size of choice */
.tagrank1{font-size: 0.3em;}
.tagrank2{font-size: 0.4em;}
.tagrank3{font-size: 0.5em;}
/* go on till tagrank10 */
Metoda ta wyświetla wszystkie tagi. Jeśli masz ich dużo, prawdopodobnie nie chcesz, aby chmura tagów stała się burzą tagów . W takim przypadku należy dołączyć klauzulę HAVING TO
zapytaniu SQL:
-- minimum tag count is 8 --
HAVING count(tag) > 7
To wszystko
Wydaje dobre podejście do mnie. Jeśli twoje dane znajdują się w tablicy, po prostu pomiń część bazy danych. Zalecam, abyś zapamiętał nazwę i liczbę wykonawców w jednej tablicy asocjacyjnej. Aby to działało z powyższym kodem, należy użyć czegoś takiego: $ tags = array ("root" => 5, "michael jackson" = 3, "billy idol" => 9, "madonna" => 1); Zgadzam się, nie używajcie tagów H, ponieważ zakłóca to waszą semantykę. Rozpiętość byłaby moim wyborem. Wreszcie helper istnieje w Zend Framework, który może po prostu robić to, czego potrzebujesz. Zobacz http://framework.zend.com/manual/en/zend.tag.html – simonrjones
Niestety, nie ma formatowania w powyższym komentarzem, wydaje się! – simonrjones