среда, 7 мая 2008 г.

Создание облака тэгов (Tag Cloud) на blogger

облако тэгов, tag cloud, создание облака тэгов, bloggerОблако тэгов (англ. tag cloud) — это визуальное представление списка категорий, используемых на сайте. Категории отображаются в алфавитном порядке. От частоты использования категории зависит размер шрифта написания, т.е. чем популярные категория - тем БОЛЬШЕ шрифт, и наоборот. Выбрав категорию из "облака тэгов", пользователь получит список статей (сообщений) соответствующих даной теме.


Вот вам теория, а теперь я покажу на практике, как добавить этот элемент в ваш блог, создание облака тэгов уже опробовано вот здесь.

Итак, первым делом перейдите в Макет>Элементы страницы и добавте новый элемент - "Ярлыки" (Label). Сохраните настройки и перейдите во вкладку "Изменить HTML"
Перед тем как что либо править сохраните копию шаблона ("Загрузить весь шаблон")
Не забудьте включить "Расширенный шаблон виджета".
Теперь найдите в шаблоне тег ]]></b:skin>
и вставте перед ним следующий код:


/* Label Cloud Styles
----------------------------------------------- */
#labelCloud {text-align:center;font-family:arial,sans-serif;}
#labelCloud .label-cloud li{display:inline;background-image:none !important;padding:0 5px;margin:0;vertical-align:baseline !important;border:0 !important;}
#labelCloud ul{list-style-type:none;margin:0 auto;padding:0;}
#labelCloud a img{border:0;display:inline;margin:0 0 0 3px;padding:0}
#labelCloud a{text-decoration:none}
#labelCloud a:hover{text-decoration:underline}
#labelCloud li a{}
#labelCloud .label-cloud {}
#labelCloud .label-count {padding-left:0.2em;font-size:9px;color:#000}
#labelCloud .label-cloud li:before{content:"" !important}


Это стиль, для будушего облака тегов (Tag Cloud)

А теперь сразу за тэгом ]]></b:skin> вставляем следующий код:

<script type='text/javascript'>
// Label Cloud User Variables
var cloudMin = 1;
var maxFontSize = 20;
var maxColor = [0,0,255];
var minFontSize = 10;
var minColor = [0,0,0];
var lcShowCount = false;
</script>



Далее, ищем в шаблоне строчку, которая отвечает за элемент ярлыки:
<b:widget id='Label1' locked='false' title='Labels' type='Label'/>

и меняем её на код приведенный ниже:


<b:widget id='Label1' locked='false' title='Облако тэгов' type='Label'>
<b:includable id='main'>
<b:if cond='data:title'>
<h2><data:title/></h2>
</b:if>

<div class='widget-content'>
<div id='labelCloud'/>
<script type='text/javascript'>

// Don't change anything past this point -----------------
// Cloud function s() ripped from del.icio.us
function s(a,b,i,x){
if(a>b){
var m=(a-b)/Math.log(x),v=a-Math.floor(Math.log(i)*m)
}
else{
var m=(b-a)/Math.log(x),v=Math.floor(Math.log(i)*m+a)
}
return v
}


var c=[];
var labelCount = new Array();
var ts = new Object;
<b:loop values='data:labels' var='label'>
var theName = "<data:label.name/>";
ts[theName] = <data:label.count/>;
</b:loop>

for (t in ts){
if (!labelCount[ts[t]]){
labelCount[ts[t]] = new Array(ts[t])
}
}
var ta=cloudMin-1;
tz = labelCount.length - cloudMin;
lc2 = document.getElementById('labelCloud');
ul = document.createElement('ul');
ul.className = 'label-cloud';
for(var t in ts){
if(ts[t] < cloudMin){
continue;
}
for (var i=0;3 > i;i++) {
c[i]=s(minColor[i],maxColor[i],ts[t]-ta,tz)
}
var fs = s(minFontSize,maxFontSize,ts[t]-ta,tz);
li = document.createElement('li');
li.style.fontSize = fs+'px';
li.style.lineHeight = '1';
a = document.createElement('a');
a.title = ts[t]+' Posts in '+t;
a.style.color = 'rgb('+c[0]+','+c[1]+','+c[2]+')';
a.href = '/search/label/'+encodeURIComponent(t);
if (lcShowCount){
span = document.createElement('span');
span.innerHTML = '('+ts[t]+') ';
span.className = 'label-count';
a.appendChild(document.createTextNode(t));
li.appendChild(a);
li.appendChild(span);
}
else {
a.appendChild(document.createTextNode(t));
li.appendChild(a);
}
ul.appendChild(li);
abnk = document.createTextNode(' ');
ul.appendChild(abnk);
}
lc2.appendChild(ul);
</script>

<noscript>
<ul>
<b:loop values='data:labels' var='label'>
<li>
<b:if cond='data:blog.url == data:label.url'>
<data:label.name/>
<b:else/>
<a expr:href='data:label.url'><data:label.name/></a>
</b:if>
(<data:label.count/>)
</li>
</b:loop>
</ul>
</noscript>
<b:include name='quickedit'/>
</div>

</b:includable>
</b:widget>



Все, теперь сохраняйте ваше шаблон и наслаждайтесь.
Для редактирования внешнего вида просто найдите и исправьте следующие переменные:


var cloudMin = 1; -- минимальное повторение ярлыка для попадания в облако
var maxFontSize = 20; -- максимальный размер шрифта для тэга
var maxColor = [0,0,255]; -- самый насыщенный цвет для тэга в облаке
var minFontSize = 10; -- минимальный размер шрифта
var minColor = [0,0,0]; -- самый не насыщенный цвет
var lcShowCount = false; -- повторять ли тэги в облаке (false - нет, true - да)


Если при попытке сохранить шаблон с облаком тэгов у вас возникли ошибки (или просто облако не работает), попробуйте восстановить шаблон и выполнить шаги по созданию снова. Если не поможет, то возможно я допустил ошибку при вставке кода в html, обратитесь к первоисточнику

Ну вот и все на пока.


На главную страницу
Карта блога

Статьи по теме:



4 комментария:

Анонимный комментирует...

Спсасибо за статью, всё получилось. Вот только вопрос: у меня в "облаке тегов" все слова с большой буквы, хотя в "related post" всё нормально. Облазил весь блогер, но так и не нашёл где сменить размер шрифта для "облака".

Spec комментирует...

Flash, незачто. Посмотрел на облако тегов на вашем блоге (http://www.solarplay.ru), если честно не понял, что значит - "все слова с большой буквы", буквы там точно такие же как и в созданных вами тегах.

Анонимный комментирует...

На другом сайте, не на этом, просто пробовал сделать с маленьких, но не получается, в облаке тегов и в метках слова почему то пишуться с одних заглавных букв.

misha.herz комментирует...

Сделал все по Вашей инструкции, а оно выдает:

We were unable to save your template

Please correct the error below, and submit your template again.
Your template could not be parsed as it is not well-formed. Please make sure all XML elements are closed properly.
XML error message: The content of elements must consist of well-formed character data or markup.