Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Алгоритм создания облака тегов

Сообщения:  [1-10]   [11-20] 

 
 автор: Stifter2   (19.04.2009 в 17:22)   письмо автору
 
   для: Unreal   (19.04.2009 в 12:09)
 

Всем спасибо, уже все сделал, работает отлично.

  Ответить  
 
 автор: Unreal   (19.04.2009 в 12:09)   письмо автору
 
   для: Stifter2   (17.04.2009 в 17:16)
 

<?php
            function getCloud( $data = array(), $nums, $minFontSize = 12, $maxFontSize = 30)
            {
                $minimumCount = min(array_values($nums));
                $maximumCount = max(array_values($nums));
                $spread       = $maximumCount - $minimumCount;
                $cloudHTML    = '';
                $cloudTags    = array();
             
                $spread == 0 && $spread = 1;
             
                foreach( $data as $tag => $arr_data )
                {
                    $count = $arr_data['num'];
                    $id = $arr_data['id'];
                    $size = $minFontSize + ( $count - $minimumCount ) 
                        * ( $maxFontSize - $minFontSize ) / $spread;
                    $cloudTags[] = '<a style="font-size: ' . floor( $size ) . 'px' 
                                    . '" class="tag_cloud" href="/' . $id 
                                    . '" title="\'' . $tag  . '\' опечаток ' . $count . '">' 
                                    . htmlspecialchars( stripslashes( $tag ) ) . '</a>';
                }
             
                return join( "\n", $cloudTags ) . "\n";
            }    

            if (isset($this->letters_data)) {
                foreach ($this->letters_data as $key => $l_data) {
                    $letter_nums[] = $l_data['letter_num'];
                    $arr[$l_data['letter']] = array('num' => $l_data['letter_num'], 'id' => $l_data['rus_letter_id']);
                }
                echo '<h1 class="title">Наиболее популярные опечатки по буквам</h1>';
                print '<p class="letter_tag_cloud">' . getCloud($arr, $letter_nums) . '</p>';
            }
            ?>

  Ответить  
 
 автор: Stifter2   (19.04.2009 в 03:24)   письмо автору
 
   для: Trianon   (18.04.2009 в 01:22)
 

Сделал облако тегов :) Включил голову.

  Ответить  
 
 автор: Stifter2   (18.04.2009 в 23:25)   письмо автору
 
   для: mihdan   (18.04.2009 в 15:10)
 

К сожалению, так не работает. Но всё равно спасибо.
Я придумал вот так:

<?
$tags = Array();
$query = "SELECT tag FROM journal WHERE hide='show'"; 
$jm = mysql_query($query); 
if(mysql_num_rows($jm) > 0) { 
  while($entry = mysql_fetch_array($jm)) { 
    if (!empty($entry['tag'])) {
      $tags[] = $entry['tag'].' '; 
    }
  } 
} 
$mycloud   = new TagsCloud($tags);   
$tags_list = $mycloud->get_cloud();   
foreach ($tags_list as $tag) {   
  echo $tag.'&nbsp;';   
}

?>


Работает :)

  Ответить  
 
 автор: mihdan   (18.04.2009 в 15:10)   письмо автору
 
   для: Stifter2   (18.04.2009 в 11:36)
 

<?php
$query = "SELECT tag FROM journal WHERE hide='show'"; 
$jm = mysql_query($query); 
if(mysql_num_rows($jm) > 0) { 
     while($entry = mysql_fetch_array($jm)) {
          $tags[] =  $entry['tag']; 
     } 
     $mycloud   = new TagsCloud($tags);   
     $tags_list = $mycloud->get_cloud();   
     foreach ($tags_list as $tag) {   
         echo $tag.' ';   
     }  
}
?> 

  Ответить  
 
 автор: Stifter2   (18.04.2009 в 11:41)   письмо автору
 
   для: Лерк   (18.04.2009 в 02:31)
 

Прошу помощи в объединении этих двух кодов.

  Ответить  
 
 автор: Stifter2   (18.04.2009 в 11:36)   письмо автору
 
   для: Лерк   (18.04.2009 в 02:31)
 

Не получается вместо array() выдать мои слова из БД.
Подскажите, пожалуйста,

Вот код он выводит слова:

<?
$query = "SELECT tag FROM journal WHERE hide='show'"; 
$jm = mysql_query($query); 
if(mysql_num_rows($jm) > 0) { 
     while($entry = mysql_fetch_array($jm)) {
          echo $entry['tag']."&nbsp;"; 
     } 
}
?> 


А вот сюда мне бы его приспособить, чтобы вместо 'ajax', 'javascript', 'php', 'dojo'... вставлял слова из моего запроса.

<? 
$tags = array(   
'ajax', 'javascript', 'php', 'dojo',   
'ajax', 'jquery', 'seo', 'seo',   
'php', 'blog', 'ajax', 'php',   
'html', 'css', 'ajax', 'javascript',   
'css', 'jquery', 'php', 'smo'  
);   
$mycloud   = new TagsCloud($tags);   
$tags_list = $mycloud->get_cloud();   
foreach ($tags_list as $tag) {   
echo $tag.' ';   
} 
?>   

  Ответить  
 
 автор: Лерк   (18.04.2009 в 02:31)   письмо автору
 
   для: Stifter2   (18.04.2009 в 01:27)
 

А как в этот массив вставить поля из таблицы через запрос?

Как и обычно. Вы уже в этой теме показывали, что знаете как можно сформировать простой sql-запрос для получения данных из таблицы.

  Ответить  
 
 автор: Stifter2   (18.04.2009 в 01:28)   письмо автору
 
   для: Trianon   (18.04.2009 в 01:22)
 

Буду размышлять как теперь эти теги туда заносить :)

  Ответить  
 
 автор: Stifter2   (18.04.2009 в 01:27)   письмо автору
 
   для: Trianon   (18.04.2009 в 01:04)
 

Вот нашёл класс для преобразования массива в теги меняющиеся по размеру:


<?   
class TagsCloud {   
private $tags;   
private $font_size_min = 14;   
private $font_size_step = 5;   
function __construct($tags) {   
shuffle($tags);   
$this->tags = $tags;    
}   
private function get_tag_count($tag_name, $tags) {   
$count = 0;   
foreach ($tags as $tag) {   
if ($tag == $tag_name) {   
$count++;   
}   
}   
return $count;   
}   
private function tagscloud($tags) {   
$tags_list = array();   
foreach ($tags as $tag) {   
$tags_list[$tag] = self::get_tag_count($tag, $tags);   
}   
return $tags_list;         
}   
private function get_min_count($tags_list) {   
$min = $tags_list[$this->tags[0]];   
foreach ($tags_list as $tag_count) {   
if ($tag_count < $min) $min = $tag_count;   
}   
return $min;   
}   
public function get_cloud() {   
$cloud = Array();   
$tags_list = self::tagscloud($this->tags);   
$min_count = self::get_min_count($tags_list);   
foreach ($tags_list as $tag=>$count) {   
$font_steps = $count - $min_count;   
$font_size = $this->font_size_min + $this->font_size_step * $font_steps;   
$cloud[] = "<span style='font-size:".$font_size."px'>".$tag."</span>";   
}   
return $cloud;   
}   
}   

$tags = array(   
'ajax', 'javascript', 'php', 'dojo',   
'ajax', 'jquery', 'seo', 'seo',   
'php', 'blog', 'ajax', 'php',   
'html', 'css', 'ajax', 'javascript',   
'css', 'jquery', 'php', 'smo'  
);   
$mycloud   = new TagsCloud($tags);   
$tags_list = $mycloud->get_cloud();   
foreach ($tags_list as $tag) {   
echo $tag.' ';   
}   
  
?>  


В скрипте слова-теги уже вбиты в массиве. А как в этот массив вставить поля из таблицы через запрос?

  Ответить  

Сообщения:  [1-10]   [11-20] 

Форум разработан IT-студией SoftTime