seo-блог

SEO-блог Остров МЫСЛЕЙ: сео (поисковая оптимизация), монетизация и раскрутка сайта, ресурсы сети.

В избранное :: В загрузку :: В печать
Bookmark and Share

Программирование WordPress: посты




#171 Wordpress.  Программирование WordPress: посты

Рассмотрим простой тег (tag) шаблона (темплейта от англ. template) Вордпресса get_posts(), используемый в мультилупах — составных сложных лупах (multiple loops). Лупы — это цикл повторения какого-либо действия. Например, нужно посчитать от 1 до 10, для этого используем луп, в которой переменная (допустим $i) будет каждый шаг увеличиваться на +1. Этот прием программирования применяется для повторных однотипных действиий. Пример использование тега:

<?php get_posts('arguments'); ?>

Параметры: WordPress 2.5

$numberposts (по умолчанию 5) — количество постов; 0 — максимальное количество на страницу, -1 — безлимитно.

$offset (по умолчанию 0) — офсет, т.е. пропуск постов от последнего.

$category — категория поста.

$category_name — имя категории поста.

$tag — теги поста.

$orderby — сортировка.

'author' — сортировать по нумерации ID авторов.
'category' — сортировать по нумерации ID категорий.
'content' — сортировать по контенту (содержимому).
'date' — сортировать по публикации.
'ID' — сортировать по нумерации ID постов.
'menu_order' — сортировать по порядку. Использовать только со страницами.
'mime_type' — сортировать по MIME-типу. Использовать только с атачментами.
'modified' — сортировать по дате апдейта (обновления, редактирования).
'name' — сортировать по коротким вырезкам.
'parent' — сортировать по родительскому ID.
'password' — сортировать по паорлю.
'rand' — сортировать по случайности.
'status' — сортировать по статусу.
'title' — сортировать по тайтлу (названию).
'type' — сортировать по типу.

Ниже рассмотрены остальные параметры функции get_posts().

Примеры применения тега Вордпресс get_posts()

Вывод нумерации постов

Если требуется пронумеровать посты, комментарии, категории, теги или что-то еще, то это делается очень просто — вводом новой переменной в PHP. Итак, выводим порядковый номер поста:

<ul>
<?php
  global $post; $num_posts = 1;
  $myposts = get_posts($args);
  foreach ($myposts as $post) :
?>
    <li>
      Номер поста: <?php echo $num_posts; ?>
      <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </li>
    <?php $num_posts++; ?>
  <?php endforeach; ?>
</ul>

Сокращенную запись "$num_posts++" можно записать и так: "$num_posts = $num_posts + 1".

Вывод списка постов с офсетом (отступом)

Покажем только один пост на морде — главной странице блога и список ссылок следующих пяти постов из категории с ID 1:

<ul>
<?php
  global $post;
  $myposts = get_posts('numberposts=5 & offset=1 & category=1');
  foreach ($myposts as $post) :
?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
  <?php endforeach; ?>
</ul>

Офсет (отступ) — это пропуск из полного списка постов первых несколько штук. Так, допустим, можно на морде блога показывать посты начиная с 6-го по 10-й, а на остальных всех страницах с 1-го по 5-й.

Некоторые данные недоступны в теге get_posts() по умолчанию, который содержится внутри the_content() или в номере ID. Нужно вызывать внутренние функции через $post-массив, как аргумент:

<?php
  $lastposts = get_posts('numberposts=3');
  foreach($lastposts as $post) :
    setup_postdata($post);
?>
    <h2>
      <a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>">
        <?php the_title(); ?>
      </a>
    </h2>
    <?php the_content(); ?>
  <?php endforeach; ?>

Доступ к ID поста (статьи) или контента (содержимого поста) без вызова setup_postdata() или событий любых специальных данных поста (данные содержатся в таблице, приведенной ниже), можно использовать $post->COLUMN, где COLUMN — это табличный столбец имени данных (Field). Так, например, $post->ID содержит ID поста, $post->post_content содержит контент поста и т.д. Чтобы эти данные показать у себя на блоге, нужно использовать команду php echo вот так:

<?php echo $post->ID; ?>

Если этот код вставить в шаблон любого файла Вордпресс, то при открытии любого из постов, можно увидеть его порядковый номер в БД (Базе Данных). Рассмотрим еще несколько примеров использования тега get_posts().

Вывод последних постов

Выведем последние 10 постов с сортировкой по тайтлу (заголовку):

<?php
  $postslist = get_posts('numberposts=10 & order=ASC & orderby=title');
  foreach ($postslist as $post) :
    setup_postdata($post);
?>
    <div>
      <?php the_date(); ?><br />
      <?php the_title(); the_excerpt(); ?>
    </div>
  <?php endforeach; ?>

Вывод случайных постов

Вывод списока из пяти постов, выбранных рандомно (случайно), используя функцию MySQL RAND() по очереди:

<ul><li><h3>Случайные записи</h3>
  <ul>
    <?php
      $rand_posts = get_posts('numberposts=5 & orderby=rand');
      foreach($rand_posts as $post) :
    ?>
    <li>
      <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
    </li>
    <?php endforeach; ?>
  </ul>
</li></ul>

Вывод всех атачментов постов

Вывод атачментов всех постов блога; атачменты — это прикрепленные к посту детали (файлы, например). Делаем это вне лупа шаблонов.

<?php
$args = array(
  'post_type' => 'attachment',
  'numberposts' => -1,
  'post_status' => null,
  'post_parent' => null, // любой родитель
);
$attachments = get_posts($args);
if ($attachments) {
  foreach ($attachments as $post) {
    setup_postdata($post);
    the_title();
    the_attachment_link($post->ID,false);
    the_excerpt();
  }
}
?>

Вывод атачментов текущего поста

Выводим атачменты для текущего поста. Делаем это внутри лупа (где $post->ID номер поста).

<?php
$args = array(
  'post_type' => 'attachment',
  'numberposts' => -1,
  'post_status' => null,
  'post_parent' => $post->ID
);
$attachments = get_posts($args);
if ($attachments) {
  foreach ($attachments as $attachment) {
    echo apply_filters('the_title',$attachment->post_title);
    the_attachment_link($attachment->ID,false);
  }
}
?>

Вывод комментируемых постов

Вывод наиболее комментируемых постов блога в любом его месте с количеством комментариев в каждом посте:

<?php
  $limit_comments = 15;
  $mostcommenteds = $wpdb->get_results("
    SELECT $wpdb->posts.ID, post_title, post_name, post_date,
    COUNT($wpdb->comments.comment_post_ID) AS 'comment_total'
    FROM $wpdb->posts LEFT JOIN $wpdb->comments
    ON $wpdb->posts.ID=$wpdb->comments.comment_post_ID
    WHERE comment_approved='1'
    AND post_date_gmt < '".gmdate("Y-m-d H:i:s")."'
    AND post_status='publish' AND post_password=''
    GROUP BY $wpdb->comments.comment_post_ID
    ORDER BY comment_total DESC LIMIT $limit_comments
  ");
  foreach($mostcommenteds as $post){
    $post_title = htmlspecialchars(stripslashes($post->post_title));
    $comment_total = (int)$post->comment_total;
    echo "<li>
      <a href=\"".get_permalink()."\" title='$post_title'>$post_title</a> —
      $comment_total
    </li>";
}
?>

Вывод обновленных постов

Вывод последних обновленных постов, взято из плагина Recently Updated Posts:

<?php
$hhRupDefaultOptions = array(
  'num' => 3, 'skip' => 0, // Кол-во выводимых постов и офсетных.
  'skipUnmodifiedPosts' => true, // Пропуск немодефицированных постов.
  'includePages' => false, // Исключаем статические страницы.
  'hideProtectedPosts' => true, // Скрываем защищенные посты.
  'showDate' => 'd.m.y', // Формат выводимой даты обновления поста.
  'excludeCategory' => 38, // Исключаем ненужные категории.
);

function hh_recently_updated_posts2($options=array()) {
  $posts = hh_rup_get2($options);
  echo '<ul>';
  foreach ($posts as $post) {
$title_ = wp_specialchars(strip_tags(str_replace('-','- ',$post->post_title)));
echo '<li>'
.hh_rup_date($options['showDate'],$post->post_modified)
.' <a href="'.get_permalink($post->ID).'" title="'.wp_specialchars(strip_tags($post->post_title)).'">'.$title_.'</a>
</li>';
  }
  echo '</ul>';
}

function hh_rup_get2(&$options) {
  global $wpdb;
  if (!is_array($options)) return false;
  hh_rup_sanitize_options($options);
  $now = gmdate('Y-m-d H:i:s',time());
  $select = "SELECT `ID`,`post_title`,`post_modified`,`comment_count`";
  $from   = "FROM `{$wpdb->posts}` AS `p`";
  $where  = "WHERE `post_status`='publish' AND `post_modified_gmt` != '0000-00-00 00:00:00'"
    .($options['skipUnmodifiedPosts'] ? " AND `post_modified_gmt` != `post_date_gmt`" : '')
    .($options['includePages'] ? " AND (`post_type`='post' OR `post_type`='page')" : " AND `post_type`='post'")
    .($options['hideProtectedPosts'] ? " AND `post_password`=''" : '')." AND `post_modified_gmt` < '{$now}'";
  $group = "";
  $order = "ORDER BY `post_modified_gmt` DESC";
  $limit = "LIMIT {$options['skip']}, {$options['num']}";

  if ($options['excludeCategory']) {
    $select .= ", GROUP_CONCAT(`tt`.`term_id`) AS `terms`";
    $from .= " LEFT JOIN `{$wpdb->term_relationships}` AS `tr` ON `tr`.`object_id`=`p`.`ID`"
      ." LEFT JOIN `{$wpdb->term_taxonomy}` AS `tt` ON `tt`.`term_taxonomy_id`=`tr`.`term_taxonomy_id`";
    $where .= " AND `tt`.`taxonomy`='category' AND `tt`.`term_id` NOT IN ({$options['excludeCategory']})";
    $group = "GROUP BY `ID`";
  }
  $sql = "{$select} {$from} {$where} {$group} {$order} {$limit}";
  return $wpdb->get_results($sql);
}

function hh_rup_sanitize_options(&$options) {
  global $hhRupDefaultOptions;
  $options = wp_parse_args($options,$hhRupDefaultOptions);
}

function hh_rup_date($showDate,&$date) {
  $timestamp = strtotime($date);
  $dateFmt = '';
  if (true === $showDate) $dateFmt=__('d.m.y');
    else if (is_string($showDate)) $dateFmt=$showDate;
  if ($dateFmt) return date($dateFmt,strtotime($date)).': ';
  if (false === $showDate) return '';
  return '';
}

hh_recently_updated_posts2();
?>

Вывод постов из определенной рубрики

Перечисляем через запятую ID нужных рубрик.

<?php query_posts('cat=2,3 & showposts=5'); ?>
  <ul>
    <?php while (have_posts()) : the_post(); ?>
      <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
    <?php endwhile;?>
  </ul>

Вывод рекламы после первого поста

В файле index.php меняем строку:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

на

<?php if (have_posts()) : while (have_posts()) : the_post(); $loopcounter++; ?>

... перед endwhile вставляем

<?php if ($loopcounter<=1) include(TEMPLATEPATH.'/adsense.php'); ?>
<?php endwhile; ?>

В папку шаблона темы создаем файл adsense.php, в котором будет находиться наша реклама, например блок ссылок Гугл.Адсенс или какой-либо баннер.

Исключение постов определенной рубрики из общего списка

В файле index.php меняем строку:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

на

<?php if (have_posts()) : query_posts($query_string.'&amp;cat=-1');
  while (have_posts()) : the_post(); ?>

Вывод комментируемых постов

Вывод наиболее комментируемых постов. Пока не разобрался до конца, позже добавлю.

Вывод количества постов блога

<?php
  //Вывод количества опубликованных постов
  $published_posts = $count_posts->publish;
  //или
  $published_posts = wp_count_posts()->publish;
  //Вывод количества черновиков
  $draft_posts = $count_posts->draft;
  //Вывод количества постов
  $count_posts = wp_count_posts();
  //Вывод количества статических страниц
  $count_pages = wp_count_posts('page');
  //Вывод количества постов ('post' — по умолчанию)
  $count_pages = wp_count_posts('post'); //Default
?>

Источник: http://codex.wordpress.org/Function_Reference/wp_count_posts

Вывод количества постов автора блога

Вывод количества постов для одного автора (он же пользователь или "юзер" от англ. user), например, админа можно сделать при помощи функции get_usernumposts(userid), где userid — ID автора блога:

<?php get_usernumposts(1); ?>

Для нескольких авторов (или всех) можно воспользоваться циклом вывода или используя запросы в БД напрямую, например, создав функцию:

<?php
function get_usernumposts($userid) {
  global $wpdb;
  $count = $wpdb->get_var($wpdb->prepare(
    "SELECT COUNT(*) FROM $wpdb->posts
    WHERE post_author=%d AND post_type='post' AND ",$userid)
    .get_private_posts_cap_sql('post')
  ); return $count;
}
?>

Источник: http://codex.wordpress.org/Function_Reference/get_usernumposts

Вывод постов определенной даты

<?php
function filter_where($where='') {
  //posts in the last 30 days
  //$where .= " AND post_date > '".date('Y-m-d',strtotime('-30 days'))."'";
  //posts 30 to 60 days old
  //$where .= " AND post_date >= '".date('Y-m-d',strtotime('-60 days'))."'"
  ." AND post_date <= '".date('Y-m-d',strtotime('-30 days'))."'";
  //posts for March 1 to March 15, 2009
  $where .= " AND post_date >= '2009-03-01' AND post_date < '2009-03-16'";
  return $where;
}
add_filter('posts_where','filter_where');
query_posts($query_string);
?>

Источник: http://codex.wordpress.org/Template_Tags/query_posts

Таблица тега Вордпресс get_posts()

Field Type Null Key Default Extra
ID bigint(20) unsigned PRI & IND Pt4 auto_increment
post_author bigint(20) unsigned 0 FK-> wp_users.ID
post_date datetime IND Pt3 0000-00-00 00:00:00
post_date_gmt datetime 0000-00-00 00:00:00
post_content longtext
post_title text
post_excerpt text
post_status varchar(20) IND PT2 publish
comment_status varchar(20) open
ping_status varchar(20) open
post_password varchar(20)
post_name varchar(200) IND
to_ping text
pinged text
post_modified datetime 0000-00-00 00:00:00
post_modified_gmt datetime 0000-00-00 00:00:00
post_content_filtered text
post_parent bigint(20) unsigned 0 FK-> wp_posts.ID
guid varchar(255)
menu_order int(11) 0
post_type varchar(20) IND Pt1 post
post_mime_type varchar(100)
comment_count bigint(20) 0

Оригинал таблицы WordPress Database: wp_posts и тега get_posts. Также таблица Вордпресс Базы Данных (WordPress database, сокращенно WPDB), готовится пользователем JPMcC. Также см. классы WPDB — wpdb_Class.

Значения полей (Field) таблицы:

ID — порядковый номер поста (записи, статьи).

post_author — автор поста.

post_date, post_date_gmt — дата публикации поста обычная и дата по gmt. Формат по умолчанию: 0000-00-00 00:00:00.

post_content — содержимое поста: текст, картинки и т.д.

post_title — заголовок поста, его название.

post_excerpt — аннотация поста, его первый абзац.

post_status — статус поста.

  • publish — опубликованный для всех читателей. По умолчанию.
  • pending — рассматриваемый пост, находящийся на модерации.
  • draft — неопубликованный черновик.
  • future — запланированный пост, публикуемый в определенную дату.
  • private — опубликованный для автора, другие не видят.
  • inherit — используется для наследования признаков "детей" (подпостов), см. get_children. Принимается по умолчанию, если $post_type установлен как attachment.
  • trash (WP 2.9) — "мусор", удаленные посты.
  • static — нет данных.
  • object — нет данных.
  • (blank) — все статусы.

comment_status — статус комментариев поста.

  • open, closed — открыты и закрыты соответственно.
  • registered_only — только для зарегистрированных.

ping_status — статус пингов поста.

  • open, closed — открыты и закрыты соответственно.

post_password — пароль поста.

post_name — имя поста.

to_ping —.

pinged —.

post_modified, post_modified_gmt — апдейт поста, т.е. время его последнего редактирования.

post_content_filtered —.

post_parent — пост-родитель.

guid — гид.

menu_order — сортировка.

post_type — тип поста, может принимать значения:

  • post — топик (статья, запись). По умолчанию.
  • page — статическая страница.
  • attachment — прикрепленные данные, аттачмент.

post_mime_type — mime-тип поста.

comment_count — счетчик количества комментариев в данном посте.

Ну вот пока все, в чем разобрался. Узнаю еще что-то нового, добавлю. А в следующий раз попробуем разобраться в выводе категорий и... создании Карты Блога.

Нашли ошибки, знаете больше? - Пишите, исправим и дополним.


Другие статьи по теме seo (оптимизация), монетизации и раскрутке:

Просмотров: 398
Комментариев: Комментарии (5)
Опубликованно: Понедельник, Сентябрь 14th, 2009 в 20:34
Обновлено: 13 Ноябрь 2009 в 21:14.
Директории: Wordpress
Автор: admin, все авторы.


В статье: 1808 слов. Ссылки на странице.
Bookmark and Share
УжасноПлохоНормальноХорошоОтлично
(голоса: 2, оценка: 5.00 из 5)
Источник: http://isle-blog.ru/wordpress/get_posts/


Понравилась статья? - Не пропустите следующую, подпишитесь на RSS-канал[?], e-mail или читайте блог Остров МЫСЛЕЙ через Яндекс.Ленту или Google.Reader.

Также Вы можете оставить комментарий, или trackback[?] на Вашем сайте.
На эту статью ссылаются:



Эту статью находят по поисковым запросам:
Оставьте свой комментарий на seo-блоге Остров МЫСЛЕЙ
Нам важно Ваше мнение. (Комментарии (5))
Елена пишет:
октября 11, 2009 Комментариев: 8
#1

Нравятся мне умные мужчины ;-)

Ай Пи Мани пишет:
октября 17, 2009 Комментариев: 2
#2

Игорь Леонидович, подскажите пожалуйста.
Хочу вывести рядом с именем комментатора количество отставленных им комментариев на блоге.
Может вы знаете какой функцией можно воспользоваться.

admin пишет:
октября 17, 2009 Комментариев: 53
#3

Встроенной функции такой нет, увы, не предусмотрено по умолчанию, но составить запрос самому не сложно, там всего 3-4 строчки, но есть одно «но» пока: заметил, что некоторые запросы в БД работают не на всех страницах… ??? Какие-то фильтры придуманы, что ли, хотя не пойму почему так, ведь я не использую встроенные переменные, а запросы прямиком в БД делаю.

Я сейчас изучаю «Юзеров», буду готовить заметку на днях для топика, если не горит, то подождите пару дней, я код у себя проверю (хочу, чтоб цифры не только в комментариях выводились, а на любой странице) и вышлю вам или у себя топик опубликую, где приведу подробные примеры для «Юзеры» категории «Комментаторы».

Ай Пи Мани пишет:
октября 18, 2009 Комментариев: 2
#4

Отлично! :) Будем ждать.

Spoofi пишет:
ноября 3, 2009 Комментариев: 1
#5

Супер пост! Большое спасибо, самому разбираться времени не хватает, а очень надо :) Всё подробно и понятно описано. Добавляюсь блог в ридер и джу продолжений :)



RSS-канал[?] комментариев данной статьи или всего блога Остров МЫСЛЕЙ.
Для установки аватара (фотография комментатора) используйте gravatar!
Оставляя комментарий, Вы соглашаетесь с правилами комментирования.

Прокомментировать

XHTML-теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

символов осталось из 2000.

Trackbacks

    Пример: SEO, PageRank, ТИЦ, Search.
    banner banner banner
    Рекламный блок РБ3 (360x60 или 125х125 пх). Здесь может быть Ваша реклама (текст, ссылки, баннеры) - сквозная прямая ссылка на всех страницах всего за 40 $/мес. Подробности по размещению рекламы в блоге Остров МЫСЛЕЙ: 463768885, zgr@bk.ru...
    Март 2010
    Пн Вт Ср Чт Пт Сб Вс
    « Ноя    
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  
    advertising На этом месте могла
    быть Ваша реклама.
    advertising На этом месте могла
    быть Ваша реклама.
    advertising На этом месте могла
    быть Ваша реклама.
    Регистрация в блоге:

    Частые комментаторы:

    gravatar Марина
    Комментариев: 13
    Сайт: biznes-mesto.ru
    gravatar Олли
    Комментариев: 13
    Сайт: zhenskayalogika.ru
    gravatar Alex
    Комментариев: 8
    Сайт: blog.xx-web.ru
    gravatar Елена
    Комментариев: 8
    Сайт: Ru-party.ru/blogg
    gravatar Светлана Бобровская
    Комментариев: 6
    Сайт: vseuch.ru
    Пользователи:

    Администраторы: 1 (admin)
    Редакторы: 1 (admin)
    Авторы: 1 (admin)
    Публикаторы: 1 (admin)
    Зарегистрировано: 1
    Всего пользователей: 6

    Авторы:

  • admin 1 (75)

  • Статистика блога:

    Blog Rank:
    Alexa:
    Google:
    Yandex: 20
    Technorati:
    Подписчики:
    FeedBurner: 95
    Twitter: 24
    trackback/pingback: 14/3
    Ссылки: 2
    Спам: 9,574, удалил Akismet
    Комментарии: 191
    Страницы: 22
    Статьи: 75
    Метки: 172
    Категории: 27
    Количество читателей (в среднем за 30 дней):
    20 - в день, 140 - в неделю, 600 - в месяц.

    SQL: 97 Time: 2.089 sec; OZU: 5.98 MB; BD: 10.19 MB

    Блог рожден: 1. 10. 2008, живет: 1 год, 5 мес. и 9 дней.
    Предложить работу:

    Обратная связь:

    gravatar Блогер-сеошник, веду сайты: Остров ПОЭЗЫ, Остров УСЛУГ, Остров ЛИТЕРАТУРЫ. Это техническая страница, более подробно обо мне смотрите здесь.Также приглашаю заглянуть в раздел О блоге и посетить личный блог.

    Autor: Зайва Игорь Леонидович

    E-mail: zgr@bk.ru

    ICQ: 463-768-885

    Reserve:

    Reserve:

    Рейтинг@Mail.ru количество читателей онлайн и всего Рейтинг блогов. Заработок в интернете. View blog authority Рейтинг блогов BlogMemes.ru popularsite.ru Я - на Карте Marketing / SEO Rambler's Top100 TopOfBlogs 100 - Персональные страницы ePochta Blog Rating
    Также читайте раздел: Блогосфера.

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

    Блогролл:

    Пока пусто, но Вы можете предложить свой тематический ресурс.
    topics
    Возможно, кому-то пригодится. Выносим элементы CSS и JavaScript в отдельные файлы: http://my.opera.com/isle0/blog/css-javascript-out 4 days ago

    Posting tweet...

    Последние комментарии:
  • Трекбеки и пингбеки:
  • Эстафета продолжается в статьях и комментариях.: Это уже позже я прочитала на блоге Игоря статью “Акции,...
  • Блог Береза Владимира: Алгоритм Google или определяем PR
  • Анонс лучших статей блогосферы: КАРТА САЙТА И БРЕДОСАЙТЫ: ХИТРОСТИ И ЭФФЕКТИВНОСТЬ.


  • Бэклинки (внешние ссылки):


    Статистика ссылок
    Яндекс: 0, Гугл: 0, Яху: 0.
    Самые любимые статьи:

    Использование материалов разрешено только при указании источника.
    Подписаться на рассылку RSS всего блога или только комментариев.
    Блог рожден: 1. 10. 2008, живет: 1 год, 5 мес. и 9 дней.
    SEO-блог Остров МЫСЛЕЙ работает на WordPress
    Copyright © 2008-2010 isle-blog.ru PageRank
    Республика Казахстан, Алматы
    Widgetize!

    seo