Цей метод призначений для SQL/PostgreSQL
фанатиків. Він виконує всю роботу в базі даних і друкує текст із "в'язким" посиланням. Він використовує Doctrine ORM
лише для виклику sql, я не використовую об'єкти. Припустимо, у нас є 10 розмірів:
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);
}
потім ви друкуєте їх із класом CSS, від .tagranking10 (найкращий) до .tagranking1 (найгірший):
<?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; ?>
і це CSS
:
.tagrank1{font-size: 0.3em;}
.tagrank2{font-size: 0.4em;}
.tagrank3{font-size: 0.5em;}
Цей метод відображає всі теги. Якщо їх у вас багато, ви, мабуть, не хочете, щоб ваша хмара тегів перетворилася на шторм тегів . У цьому випадку ви додасте HAVING TO
речення до вашого SQL-запиту:
-- minimum tag count is 8 --
HAVING count(tag) > 7
Це все