Este método es para los fanáticos SQL/PostgreSQL
. Realiza todo el trabajo en la base de datos e imprime texto con el enlace "slugified". Utiliza Doctrine ORM
solo para la llamada sql, no estoy usando objetos. Supongamos que tenemos 10 tamaños:
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);
}
luego imprimirlas con alguna clase CSS, desde .tagranking10 (la mejor) a.tagranking1 (el peor):
<?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; ?>
y este es el 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 */
Este método muestra todas las etiquetas. Si tiene muchos de ellos, probablemente no desee que su nube de etiquetas se convierta en tag storm. En ese caso, se agregaría una cláusula HAVING TO
a la consulta SQL:
-- minimum tag count is 8 --
HAVING count(tag) > 7
Eso es todo
Esto parece un buen enfoque para mí. Si sus datos están en una matriz, omita la parte de la base de datos. Recomiendo que almacene el nombre del artista y cuente en una única matriz asociativa. Para que funcione con el código anterior, utilice algo como: $ tags = array ("the roots" => 5, "michael jackson" = 3, "billy idol" => 9, "madonna" => 1); Estoy de acuerdo en no usar etiquetas H ya que daña tu semántica. Los tramos serían mi elección. Finalmente, existe un asistente en Zend Framework que puede hacer exactamente lo que necesita. Ver http://framework.zend.com/manual/en/zend.tag.html – simonrjones
lo siento, no parece que haya formato en el comentario anterior. – simonrjones