nube de etiquetas pequeña y con contador de nodos.
<?php
class tag
{
var $name = "";
var $count = 0;
var $tid = 0;
function getCount()
{
return $this->count;
}
function getName()
{
return $this->name;
}
function setCount($var)
{
$this->count = $var;
}
function setName($var)
{
$this->name = $var;
}
function setTID($var)
{
$this->tid = $var;
}
function getTID()
{
return $this->tid;
}
}
$count = 0; // Overall count of used tags
$threshold = 1; // How many tags are needed to get displayed
$font_size = 0.8;
$query = "SELECT d.name,d.tid FROM {term_data} d, {term_node} dn WHERE dn.tid=d.tid;";
$result = db_query($query);
$tags['Test'] = 0;
while($node = db_fetch_array($result))
{
if ($tags[$node['name']] == NULL)
{
$tags[$node['name']] = new tag();
$tags[$node['name']]->setName($node['name']);
$tags[$node['name']]->setCount(1);
$tags[$node['name']]->setTID($node['tid']);
$count = $count + 1;
}
else
{
$tags[$node['name']]->setCount(
$tags[$node['name']]->getCount() + 1
);
$count = $count + 1;
}
}
foreach($tags as $tag)
{
$mycount = $tag->count;
if($mycount > $threshold)
{
$fraction = ((int)(($mycount / $count) * 60)) / 10;
if($fraction < $font_size)
{
$fraction = $font_size;
}
echo '<span style="font-size: ' . $fraction . 'em;">' . l($tag->name,'taxonomy/term/' . $tag->tid,array('title="' . $tag->count . ' Nodes"')).'[' .$tag->count .']</span> ';
}
}
?>Yo lo tengo funcionando en un drupal 5.2 en mi url.
Ojo, estoy viendo que drupal no interpreta bien las etiquetas code, y se esta comiendo partes del mismo, así que he subido un txt con el código.
Oskar
http://drupal.documentados.com
editado:
para conseguir una nube de etiquetas de un uno o varios vocabularios lo que demos de hacer es modificar la consulta a la base de datos de la siguiente manera.
$query = "SELECT d.name,d.tid FROM {term_data} d, {term_node} dn WHERE dn.tid=d.tid and d.vid='6';";si os fijáis he añadido al final un and y un valor exacto, lo que hace que la consulta además de todo lo pregunta me coja los términos del vocabulario número 6.
Obviamente si queremos mostrar los términos de varios vocabularios se crearían sucesivos and cada uno con el número del vocabulario de esta manera:
$query = "SELECT d.name,d.tid FROM {term_data} d, {term_node} dn WHERE dn.tid=d.tid and d.vid='6' and d.vid='8' and d.vid='10';";Un saludo
- Inicie sesión o regístrese para enviar comentarios
