korg7
Читатель
- Регистрация
- 14 Дек 2008
- Сообщения
- 13
- Реакции
- 9
у меня облако тегов формируется из выборки подходящих данных из базы с делением этих данных на "теги" с подсчетом их повторов.
не знаю будет ли по коду понятно, но достаточно изменить выборку данных из базы и настроить стили и будет ворк. кое где написал комментарии, может пригодится
не знаю будет ли по коду понятно, но достаточно изменить выборку данных из базы и настроить стили и будет ворк. кое где написал комментарии, может пригодится
PHP:
$where_clause = " where (in_stock>=1 OR preorder=1) and enabled=1";
$tag = array();
$q = db_query("SELECT name, rel_artist, rel_label, rel_track2 FROM ".
PRODUCTS_TABLE.$where_clause." ORDER BY in_stock");
$searchstr = array ( "/", "|", "///", "feat.", "feat", "ft.", " & ", "&", "(", ")"); //что принимаем за разделители
$replacestr = ","; // заменяем на общий разделитель
while($row = db_fetch_row($q))
{
if (trim($row[0]!=""))
{
$splitname = explode(",", trim(str_replace($searchstr,$replacestr,$row[0])));
if ($splitname[0]) $tag[] = trim($splitname[0]);
if ($splitname[1]) $tag[] = trim($splitname[1]);
}
if (trim($row[1]!="")) $tag[] = trim($row[1]);
$splitstyle = explode(",", trim(str_replace($searchstr,$replacestr,$row[2])));
if (trim($row[2]!=""))
{
$splitname = explode(",", trim(str_replace($searchstr,$replacestr,$row[2])));
if ($splitname[0]) $tag[] = trim($splitname[0]);
if ($splitname[1]) $tag[] = trim($splitname[1]);
if ($splitname[2]) $tag[] = trim($splitname[2]);
}
foreach ($splitstyle as $value)
{
if ($value) $tag[] = trim($value);
}
}
while (list($key, $val) = each($tag))
{
if (isset($mas[trim($val)]))
{
$mas[$val]++;
}
else
{
$mas[$val] = 1;
}
}
$i = 0;
foreach ($mas as $item=>$val)
{
$i++;
$tagcloud[$i]["tag"] = $item; // тег
$tagcloud[$i]["counter"]=$val; // счетчик тега
}
$terms = array();
$maximum = 0;
for ($i = 1; $i < count($tagcloud); $i++) {
if ($tagcloud[$i]['counter'] > $maximum) {
$maximum = $tagcloud[$i]['counter'];
}
if ($tagcloud[$i]['counter'] < $min) {
$min = $tagcloud[$i]['counter'];
}
}
shuffle($tagcloud); // сортировка
//asort($tagcloud);
foreach ($tagcloud as $k) //присваиваем стили
{
$percent = (floor(($k['counter'] / $maximum) * 100));
if ($percent <2)
{
$class = 'tagsize1';
} elseif ($percent>= 2 and $percent <3) {
$class = 'tagsize1-2';
} elseif ($percent>= 3 and $percent <5) {
$class = 'tagsize3-4';
} elseif ($percent>= 5 and $percent <7) {
$class = 'tagsize5-6';
} elseif ($percent>= 7 and $percent <21) {
$class = 'tagsize7-20';
} elseif ($percent>= 21 and $percent <51) {
$class = 'tagsize21-50';
} else {
$class = 'tagsize51-';
}
//Формирование html строки
$tagclo[] = "<span class='$class'><a style='$class' href='/tag/" . preg_replace("/\+/" ,"-",urlencode($k['tag'])) . "/' title='" . TransformDataBaseStringToText( $k['tag'] ) . "'> " .strtolower($k['tag'])." </a></span>";
//конечно можно было бы формировать html код в smarty, но показалось на php эта работа будет побыстрее.
}
$smarty->assign("tagcloud",$tagclo); //и просто тупо вывожу в блок шаблона