OrlenkoKN
22.09.2009 - 11:15
В общем, переделываю кодик один, который выводит облако тегов.
В базе метки хранятся так:
id labels
1 метка1, метка2
2 метка3
3 метка4 метка5, метка2
то есть встречаются словосочетания.
В моём случае скрипт выводит все слова поодиночке через пробел, вот так:
метка1 МЕТКА2 метка3
и тд. мне же нужно, чтобы словосочитания он не обрезал, а выводил как надо, то есть:
метка1 метка4 метка5
вот оригинал:
PHP |
$tag1 = mysql_query("select * from Blogg where status=1"); while($tags1 = mysql_fetch_array($tag1)) { $label=$tags1['labels']; $all_labels.=$label." "; }
for ($i=0; $i<=strlen($all_labels);$i++) { $symb = substr($all_labels,$i,1); if ($symb!=",") $all_labels_new.=$symb; }
$all_labels_cut = explode(" ", $all_labels_new); $all_labels_cut_count = count($all_labels_cut); $all_labels_cut = array_unique($all_labels_cut);
for ($i=0; $i<=$all_labels_cut_count; $i++) { $vhojd = substr_count($all_labels_new, $all_labels_cut[$i]); $vhojd2=($vhojd+5)*2; $vivod_metok.="<span> <a href='http://site.su/labels/".$all_labels_cut[$i]."' style='font-size:".$vhojd2."pt'>".$all_labels_cut[$i]."</a> </span>"; $vhojd2=""; } |
Подскажите, пожалуйста, что мне подправить нужно?
Спустя 44 минуты, 13 секунд (22.09.2009 - 10:59) hara_ написал(а):
наверно как то так:
PHP |
$tag1 = mysql_query("select * from Blogg where status=1"); $labels = array(); $f = create_function('$v,$k,&$labels','if(isset($labels[$v])){$labels[$v]++;}else{$labels[$v]=0;}'); while($tags1 = mysql_fetch_array($tag1)){ array_walk(explode(',',$tags1['labels']),$f,&$labels); } foreach($labels as $k=>$v){ $vivod_metok.="<span> <a href='http://site.su/labels/".$k."' style='font-size:".(($v+5)*2)."pt'>".$k."</a></span>"; } |
Спустя 10 минут, 12 секунд (22.09.2009 - 11:09) OrlenkoKN написал(а):
Огромнейшее спасибо, Уважаемый! Всё работает, осталось только в ссылках метки-транслиты прописать...
Спустя 50 минут, 48 секунд (22.09.2009 - 12:00) OrlenkoKN написал(а):
Помогите, пожалуйста ещё один моментик доделать... Я сейчас просто соображаю чего-то туго(((
В общем в базе есть 2 поля с метками: рус и транслит.. рус для текста, а транслит, для урла соответственно.
то есть, ссылка должны быть примерного вида:
PHP |
<a href='http://site.su/labels/".$k."' style='font-size:".(($v+5)*2)."pt'>".$k2."</a> |
где k - $tags1['labels_trans']
k2 - $tags1['labels']
что мне доделать нужно?
Спустя 2 часа, 47 минут, 43 секунды (22.09.2009 - 14:48) hara_ написал(а):
А если постоянно пытаться соображать, то постепенно это будет происходить не так туго как в начале.
Как то так:
PHP |
//variant with translated labels $tags = mysql_query("SELECT `labels`,`labels_trans` FROM `blogg` WHERE `status`=1"); $labels = array(); $f = create_function('$v,$k,&$labels','$k=trim($k);if(isset($labels[$k])){$labels[$k][0]++;}else{$labels[$k][0]=0;}$labels[$k][1]=$v;'); while($tag = mysql_fetch_array($tags)){ @array_walk(array_combine( explode(',',$tag['labels_trans']), explode(',',$tag['labels'])), $f,&$labels); } foreach($labels as $k=>$v){ $vivod_metok.="<span><a href='http://site.su/labels/".$k."' style='font-size:".(($v[0]+5)*2)."pt'>".$k."</a></span>"; } |
Ахтунг! Если строка меток с транслитом не будет совпадать по количеству с то этой же строкой но на на русском, - то будет проигнорирована.
Эксклюзивно для вас допустил одну ошибку ( одну официально, а там кто знает) )
исключительно в образовательных целях.
Спустя 16 часов, 49 минут (23.09.2009 - 07:37) OrlenkoKN написал(а):
Как-то так в общем:
PHP |
//variant with translated labels $tags = mysql_query("SELECT * FROM Blogg WHERE status=1"); $labels = array(); $f = create_function('$v,$k,&$labels','$k=trim($k);if(isset($labels[$k])){$labels[$k][0]++;}else{$labels[$k][0]=0;}$labels[$k][1]=$v;'); while($tag = mysql_fetch_array($tags)){ @array_walk(array_combine( explode(',',$tag['labels_trans']), explode(',',$tag['labels'])), $f,&$labels); } foreach($labels as $k=>$v){ $vivod_metok.="<span> <a href='http://site.su/labels/".$k."' style='font-size:".(($v[0]+5)*2)."pt'>".$v[1]."</a></span>"; } |
Спасибо огромное!=)