Облако тегов для Blogger'a

Итак, приступим...


1. Должен использоваться новый шаблон Blogger — layout (не классический).
2. Блог должен содержать хотя бы один тег, к которому относится более одного поста. Ни один тег не должен содержать двойных кавычек. Апострофы и одинарные кавычки допускаются.
3. Логинимся на blogger, заходим на вкладку «Шаблон» -> «Элементы страницы».
4. Жмем «Добавить элемент страницы», добавляем виджет «Ярлыки». Название роли не играет, местоположение можно изменить потом.
5. Переходим на вкладку «Изменить HTML», делаем резервную копию шаблона (ссылка в русском варианте почему-то называется «Загрузить шаблон»… наверное, чтобы было понятней).
6. НЕ ставим галочку «Расширить шаблоны виджета», ищем строку

]]></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}
7. Сразу после строчки ]]></b:skin>, но перед тэгом </head> вставляем переменные, содержащие настройки скрипта:
<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>
8. В коде HTML ищем строчку самого виджета «Ярлыки». Это будет строчка вроде такой:

<b:widget
id='Label1' locked='false' title='Ярлыки' 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&gt;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 = &quot;<data:label.name/>&quot;;
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] &lt; cloudMin){
continue;
}
for (var i=0;3 &gt; 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>
9. Жмем «Сохранить шаблон» и смотрим результат в блоге. Облако должно появиться. Если это не так — рекомендую убедиться, что выполнены условия первых двух пунктов. Если не поможет, придется перечитать оригинал. Возможно, переводчик пропустил что-то важное:-)

При желании можно выполнить настройку скрипта (мне понравился вариант по-умолчанию). Для настройки используются переменные скрипта:

1. cloudMin — переменная, ограничивающая количество тегов. Значение 1 соответствует отображению всех имеющихся тегов без ограничений. По моему опыту, эта переменная не работает — сносит крышу скрипту, после чего облако вообще не отображается. Возможно, я что-то не так делал…
2. Назначение параметров maxFontSize, maxColor, minFontSize, minColor понятно из их названий.
3. lcShowCount включает отображение количества тем, соответствующих каждому тегу. Выглядит это так: «отдых (6)».

Также можно выполнять изменение выравнивания тегов в облаке (#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;}), а также менять отображение с «облачного» на «плоское» (display:inline; — display:block). Есть возможность отображения общего количества тегов в облаке (#labelCloud.label-count). Подробнее см. первоисточник.

Внимание! После внесенных изменений нельзя нажимать на ссылку «Изменить» для данного виджета на странице «Элементы страницы». Если так сделать — движок blogger заменит измененный код виджета стандартным вариантом.

P.S. Чуть позже нашел ещё один перевод этого же самого источника на Tod’s Blog в посте от 6-го октября. Желающие могут свериться с этой инструкцией.

Комментариев нет: