Создание облака тегов

93 views
Skip to first unread message

ButscH

unread,
Jun 6, 2008, 3:18:34 AM6/6/08
to Open Constructor
Для создания облака, сначало нужно определится с тем, к какому ГД мы
его применим. Допустим в моем случает это Новости. В разделе ГД -
Новости создаем два поля: count - счетчик посещений и tags - выводимы
тег для облака.

Вообще суть облака такова, что счетчик считает посещения и чем их
больше тем выше размер шрифта у тега.

Итак, сначала со счетчиком. Ставим на страницу с новостью такой PHP
код в блок PRE:
<?
global $ctx, $_wchome, $_host, $_libdir;

$db = $ctx->_getDB();
$id = $ctx->getParam('article');

$db->query("UPDATE dshybrid_12 SET f_count=f_count+1 WHERE id='$id'");
?>
Где dshybrid_12 - наш ГД с новостями.
f_count - это поле count

ТАк, теперь у нас на странице смчитаются посещения. Это самый
примитивный счетчик, но для начала хватит.

Теперь можно приступить к выводу облака тегов. Для начала нам надо
заполнить поля tags. Вписываем туда какие либо слова и сохраняем.
Теперь пришло время писать PHP код:

<?
function get_tag_data()
{
global $ctx;
$db = $ctx->_getDB();
$result = $db->query("SELECT * FROM dshybrid_12 GROUP BY f_tags
ORDER BY f_date DESC");
while($row = mysql_fetch_array($result))

{
$tags[$row['f_tags']] = $row['f_count'];
$id[$row['f_tags']] = $row['id'];
}



$min_font_size = 10; //минимальный размер тега в px
$max_font_size = 30; //максимальный размер тега в px

$cloud_html = '';
$cloud_tags = array();

$maximum_count = max(array_values($tags));
$minimum_count = min(array_values($tags));

$spread = $maximum_count - $minimum_count;

foreach ($tags as $tag => $count)
{
$size = $min_font_size + ($count - $minimum_count) *
($max_font_size - $min_font_size) / $spread;
$cloud_tags[] = '<a style="font-size: '. floor($size) . 'px' . '"
href="http://www.butsch.ru/news/index.php/article/.' . $id[$tag] . '"
title="\'' . $tag . '\' хитов ' . $count . '">'
. htmlspecialchars(stripslashes($tag)) . '</a> ';
}
$cloud_html = join("\n", $cloud_tags) . "\n";
return $cloud_html;
}
$ctx->setParam('tagcloud',get_tag_data());
?>

Теперь что к чему $result = $db->query("SELECT * FROM dshybrid_12
GROUP BY f_tags ORDER BY f_date DESC");

Выбираем из ГД dshybrid_12 все поля и сортируем по дате добавления.

$cloud_tags[] = '<a style="font-size: '. floor($size) . 'px' . '"
href="http://www.butsch.ru/news/index.php/article/.' . $id[$tag] . '"
title="\'' . $tag . '\' хитов ' . $count . '">'
. htmlspecialchars(stripslashes($tag)) . '</a> ';
Указываем ссылку куда будет вести тег облака. В моем случает это
новость

$ctx->setParam('tagcloud',get_tag_data()); - для вывода в блоке.
Мы присваиваем tagcloud - функцию get_tag_data()

Ставим этот PHP код на страницах где хотим выводить облако тегов в
блок PRE

И на этих же страницах ставим объект - разное - Включение шаблона с
кодом в нужный нам блок.
{if $header}<h1>{$header}</h1>{/if}
<div class="tagsblock" >{$ctx->getParam('tagcloud')}</div>
{$ctx->getParam('tagcloud')} - выводим присвоенную функцию

Если все сделали правильно, то должно в блоке с включеным шаблоном
вывестись облако.

Прмиер у меня на сайте http://www.butsch.ru/
Reply all
Reply to author
Forward
0 new messages