5 янв. 2009 г.

Случайные посты

Голосовать за пост 'Случайные посты' на Sloger.Сеть

Думаю, каждый человек хочет показать свой труд со всех сторон. И я тоже :) Но как умудриться привлечь посетителей заглянуть и на другие страницы проекта кроме главной.

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

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

Я хочу представить вашему вниманию небольшой скрипт, который создаёт случайные ссылки Вашего блога на Blogger.com. Вставить эти ссылки можно на любой страничке вашего проекта.

Вы можете использовать этот скрипт и изменять по своему усмотрению. При перепечатке ссылка желательна.

Установка
Шаг 1. Функциональная часть.
Вставьте этот скрипт перед закрывающим тэгом </head>

Небольшое примечание по настройкам
var blog_url = 'http://ВАШ_БЛОГ.blogger.com'
var randomCnt = количество_случайных_ссылок.
var donate = true если захотите поблагодарить за скрипт. Ссылка на мой проект будет добавлена к списку случайных ссылок
var donate = false если не захотите :)

<script type='text/javascript'>
//<![CDATA[
// declare some variables
var blog_url = 'http://YOUR_BLOG_NAME.blogger.com'; // blog main url -> don't forget write your blog url
var randomCnt = 5; // number of random links
var donate = true; // if you want to say thank you, let this variable be true

// tests, if an element exists in given array
function in_array(test_arr, test_number)
{
  // create from array a string separated by #
  test_arr_str = test_arr.join('#');
  test_arr_str = '#' + test_arr_str + '#';
  
  // create search item to search in converted string
  test_number_str = '#' + test_number + '#';
  
  // look for search item in converted string
  test = test_arr_str.indexOf(test_number_str);
  return test;
}

// show donate url
function showDonatePost()
{
  // url of donate post
  url = 'http://ametov.net';
  
  // get title of a post
  title = 'Ametov.net';
  
  titleData = document.createTextNode(title);
  tag_a = document.createElement('a');
  tag_a.href = url;
  tag_li = document.createElement('li');
  tag_li.id = 'donate_widget_random_posts';
  tag_a.appendChild(titleData);
  tag_li.appendChild(tag_a);
  document.getElementById('widget_random_posts').appendChild(tag_li);
}

// make a post visible - show post url and title
function showPost(root)
{
  var feed = root.feed;
  var entries = feed.entry || [];
  var entry = feed.entry[0];
  
  for(var j=0; j<entry.link.length; j++)
  {
    if (entry.link[j].rel == 'alternate')
    {
      // get url of a post
      url = entry.link[j].href;
      
      // get title of a post
      title = entry.link[j].title;
      
      // if there is no title replace it with url
      if (title == '') title = url;
      
      titleData = document.createTextNode(title);
      tag_a = document.createElement('a');
      tag_a.href = url;
      tag_li = document.createElement('li');
      tag_a.appendChild(titleData);
      tag_li.appendChild(tag_a);
      if (donate)
      {
        document.getElementById('widget_random_posts').insertBefore(tag_li, document.getElementById('donate_widget_random_posts'));
      }
      else
      {
        document.getElementById('widget_random_posts').appendChild(tag_li);
      }      
    }
  }
}

// get info as json string for given post
function getPost(postNumber)
{
  script = document.createElement('script');
  script.src = blog_url + '/feeds/posts/summary?start-index='+postNumber+'&max-results=1&alt=json-in-script&callback=showPost';
  script.type = 'text/javascript';
  document.getElementsByTagName('head')[0].appendChild(script);
}

// get random posts for given blog
function getRandomPosts(root)
{
  var feed = root.feed;
  var total = parseInt(feed.openSearch$totalResults.$t,10);
  var randomNumber, test;
  
  var random_numbers = new Array(randomCnt);

  if (donate) showDonatePost();
  
  for (var i=0; i<randomCnt; i++)
  {
    randomNumber = -1;
    test = -1;

    // this cicle is to avoid of post repeats
    do
    {
      randomNumber = Math.ceil(Math.random()*total);
      test = in_array(random_numbers, randomNumber);
    }
    while(test != -1)
    
    random_numbers[i] = randomNumber;
    getPost(randomNumber);    
  }  
}
  
// the main function, which get first number of posts and from which
// would be called all other functions above
function showRandomPosts()
{  
  var script = document.createElement('script');
  script.type = 'text/javascript';
  script.src = blog_url + '/feeds/posts/summary?max-results=0&alt=json-in-script&callback=getRandomPosts';
  document.getElementsByTagName('head')[0].appendChild(script);
}

//]]> 
</script>


Шаг 2. Ссылочный блок.
Собственно, сам блок с ссылками в виде списка. Вставьте данную часть в код Вашей страницы там, где Вы бы хотели видеть список с случайными ссылками.


<script type='text/javascript'>
// main function call
showRandomPosts();

</script>

<ul id='widget_random_posts'>
</ul>


Голосовать за пост 'Случайные посты' на Sloger.Сеть

6 комментариев:

БабочкаЯночка комментирует...

Никогда не решусь вмешиваться в мекет или шаблон блога, вставлять в него эти слова, буквы, строчки. Очень этого боюсь. Даже не пробовала никогда. Для таких как я "чайников" подходит только готовый "гаджет" или "виджет": нажал на кнопочку "вставить" - и получил в своём блоге. Когда таккое хорошее дело, как ваша идея "случайная ссылка" появится в виже готового гаджета?

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

Т.е. случайные посты будут вставляться в тело поста после основного текста? Или можно организовать вставку и в боковую панель?
Давно ищу что-то подобное, спасибо!

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

@БабочкаЯночка
Хотел написать, что я даже и не знаю, как написать гаджет. А оказалось всё не так сложно. Он уже почти готов, я только сделаю дизайн нормальный и обязательно расскажу. Следите за новостями

@a13x4ndr
В зависимости от того, куда вставить код из второго шага, там он и будет отображаться. Т.е. если хочется увидеть ссылки на боковой панели, то нужно просто вставить гаджет "HTML / JavaScript" и скопировать код (шаг нр.2). Но как я сказал, я постараюсь в ближайшее время доделать гаджет. Тогда всё проще будет.

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

Я подожду доделки. Заранее спасибо!

Given_up!!! комментирует...

Спасибо, давно искал! Все работает

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

сначала использовал вариант с виджетом, но после экспериментов с облаком тегов всё сломалось. теперь воспользовался вариантом "вставить перед "/head>". спасибо!