Вы не зашли.
Страницы 1
Всем привет. Появился вопросик относительно создания обалка тегов на php. Можно ли его как-то реализовать, не выделяя сами теги в отдельную таблицу. Тоесть есть просто таблица с данными, в ней есть столбец "теги" через запятую, и необходимо реализовать нормальное облако тегов.
Понимаю, что это несколько геморней чем просто вынести теги в отдельную таблицу. Но вот надо )
Был бы благодарен прямо куску кода ) Какой-то тупняк напал просто.
Не в сети
Конечно, только врядли это можно считать образцом для подражания, наверно все можно было сделать намного проще )
Создал файл который будет через некоторое время, или в ручную обновлять таблицу с индексами тегов (это значит, что мне все-таки пришлось создать отдельную таблицу с индексами).
<?php
// массив хранящий список доступных тегов
$oldtags = array();
$i=0;
// делаем выборку всех воллпейперов
$sql="select * from papers";
// делаем запрос
$res=mysql_query($sql) or die("Query failed : " . mysql_error());
// проходим в цикле и заносим в массив каждый доступный тег
while($row=mysql_fetch_array($res,MYSQL_ASSOC))
{
$onestring=$row['paper_tags'];
$tags = array();
foreach (explode(",", $onestring) as $tag) {
$tag = trim($tag);
$oldtags[$i]=$tag;
$i++;
if (!$tag) continue;
}
}
$oldtags2 = array_unique($oldtags);
//
// Добавляем все доступные на данный момент теги в материалах
// с количеством просмотров 0
//
$sql = "TRUNCATE TABLE tagindex";
mysql_query($sql)or die("Query failed : " . mysql_error());
for ($j=0;$j<sizeof($oldtags2);$j++)
{
if ($oldtags2[$j]!="")
{
$sql = "INSERT INTO `tagindex` (`id_tag`, `tag_name`, `tag_count`) VALUES('''','$oldtags2[$j]','0')";
$res=mysql_query($sql) or die("Query failed : " . mysql_error());
}
}
// теперьн еобходимо заполнить таблицу данными сколько раз встречается тот или иной тег
// делаем выборку всех данных
$sql1 = "SELECT * FROM `tagindex`";
$res=mysql_query($sql1) or die("Query failed : " . mysql_error());
// в цикле проходим по каждому тегу
while($r=mysql_fetch_array($res))
{
$tag=$r['tag_name']; // название тега
$sel="SELECT count(*) FROM `papers` WHERE `paper_tags` LIKE '%$tag%'"; // считаем сколько данный тег встречается в статьях
$result=mysql_query($sel) or die("Query failed : " . mysql_error()); // делаем запрос
$rows=mysql_fetch_row($result); // получаем значение
$counter=$rows[0]; // количество встреч этого тега в статьях
// теперь необходимо это количество занести в базу, поэтому просто апдейтим по нашему тегу
$sql2 = "UPDATE `tagindex` SET `tag_count`='$counter' WHERE `tag_name` = '$tag' LIMIT 1";
$result2=mysql_query($sql2) or die("Query failed : " . mysql_error());
// проапдейтился
}
?>
ну и сама функция
function tags_cloud(){
$terms = array();
$max = 0; // переменная для рассчёта максимального значения
$sql = "SELECT tag_name, tag_count FROM `tagindex`";
$query=mysql_query($sql) or die("Query failed : " . mysql_error());
while ($row = mysql_fetch_array($query))
{
$tag = $row['tag_name'];
$counter = $row['tag_count'];
if ($counter> $max) $max = $counter;
$terms[] = array('tag' => $tag, 'counter' => $counter);
}
$cloud ="<div id='cloud'><div>";
foreach ($terms as $kol)
{
$per = floor(($kol['counter'] / $max) * 100);
if ($per <10)
{
$class = 'tag1';
} elseif ($per>= 10 && $per <30) {
$class = 'tag2';
} elseif ($per>= 30 && $per <50) {
$class = 'tag3';
} elseif ($per>= 50 && $per <60) {
$class = 'tag4';
} elseif ($per>= 60 && $per <80) {
$class = 'tag5';
} elseif ($per>= 80 && $per <90) {
$class = 'tag6';
} else {
$class='tag7';
}
$cloud .="<a href='/?tag=" .$kol['tag']. "' title='" . $kol['tag'] . "' class='$class'>" . $kol['tag'] . "</a> ";
}
$cloud .="</div></div>";
return $cloud;
}
В общем-то вот так.
Не в сети
Страницы 1