This method is for SQL/PostgreSQL
fanatics. It does the entire job in the database, and it prints text with "slugified" link. It uses Doctrine ORM
just for the sql call, I'm not using objects.
Suppose we have 10 sizes:
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);
}
.. sonra tagranking1 (en kötü) için tagranking10 (iyi) den, bazı CSS sınıfı ile onları baskı:
<?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; ?>
ve bu 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 */
Bu yöntem, tüm etiketleri gösterir. Eğer onlardan bir sürü varsa, muhtemelen etiket bulutu bir tag storm olmak istemiyorum. Bu durumda SQL sorgusu için HAVING TO
maddesini eklemesi:
-- minimum tag count is 8 --
HAVING count(tag) > 7
Hepsi bu