Авторы комментариев
Воскресенье, 29 июля 2007 г.
Просмотров: 2440
Подписаться на комментарии по RSS
Совсем забыл что обещал выложить код для отображения авторов комментариев. Исправляюсь. ![]()
Для начала сделайте шаблон постоянной страницы. Для этого скопируйте page.php (если его нет, то single.php, или если и этого нет, то index.php) как main-allautorurl.php. После этого удалите в нем цикл TheLoop, который обычно находится в строчках (включая указанные):
- if (have_posts()) : while (have_posts()) : the_post();
- ...
- ...
- <?php endwhile; else:
- echo '<h1>Извините, ничего не найдено...</h1>';
- endif; ?>
Теперь в самое начало файла допишем:
- <?php
- /*
- Template Name: Авторы комментариев (allautorurl)
- */
- ?>
Теперь идем в админку и создаем новую постоянную страницу, где в качестве шаблона выбираем "Авторы комментариев (allautorurl)". Текст можно не писать. Также нужно указать короткую ссылку "allautorurl".
После этого добавьте в ссылку на страницу в сайдбар или меню, в общем, где вам нужно:
- <a href="http://сайт/allautorurl">Авторы комментариев</a>
Дальше открываем main-allautorurl.php и вместо удаленного цикла TheLoop вбиваем такой код:
<h1 class="search">Авторы комментариев</h1>
<p>На этой странице отображены(*) 100 наиболее активных комментаторов. Для того, чтобы отобразилась ссылка на ваш сайт, нужно попасть в первую десятку.</p>
<ol class="is_link allcomment">
<?php
$request = "SELECT comment_author, comment_author_url, COUNT(comment_author) AS comment_count, comment_date, comment_approved
FROM $wpdb->comments
WHERE comment_approved = '1' AND comment_author_url > '' AND comment_author_url <> 'http://ваш сайт/'
GROUP BY comment_author_url
ORDER BY comment_count DESC, comment_date DESC
LIMIT 100";
$a = $wpdb->get_results ($request);
$i = 0;
foreach ($a as $b)
{
if ($i < 10 )
{
$link = $b->comment_author_url;
$link_name = str_replace('http://', '', $link);
if (strrpos($link_name , '/') == (strlen($link_name)-1) )
$link_name = substr($link_name, 0, strlen($link_name)-1 );
$link = ' - <a href="' . $link . '">' . $link_name . '</a>';
echo '<li style="margin: 5px 0; font-size: 1.8em;"><strong style="color: #0C4070;">' .
$b->comment_author . '</strong> <sub>' .
$b->comment_count . '</sub>' . $link . '</li>';
}
else
echo '<li><strong><font style="color: gray;">' .
$b->comment_author . '</strong> <sub>' .
$b->comment_count . '</sub></font></li>';
$i++;
}
?>
</ol>
<?php endif ?>
<p>(*) <em>Список составлен из авторов тех сообщений, где указаны
адреса сайтов. Группировка выполнена по адресу сайта, поэтому возможны дубли
авторов, которые указывали разные адреса и/или свое имя. В случае равенства
количества сообщений, более высокую позицию занимает автор с более новым
комментарием.</em></p>
Оформление, естественно делайте уже по-своему. Также не забудьте указать свой сайт в SQL-запросе. Это для того, чтобы не учитывать ваши собственные комментарии.
Из недостаков данного кода отмечу то, что у меня так и не получилось в одном SQL-запросе сделать так, чтобы суммировались комментарии от одного автора при указанном и отсутствующем адресе.
Мой рабочий пример.



Комментариев: 16
Интересная идея
благодарю, возможно где-нибудь можно будет применить
Очень полезная статья - загорелся желанием сделать у себя подобную страницу. Только вот как мне сделать, чтобы ссылка на эту страницу не выводилась наверху сайта (в списке статических страниц)? Подскажите, пожалуйста... :shock:
Зашел поглядеть твой рабочий пример. А вместо списка получил надпись "Эта страница не предназначена для просмотра этим браузером!
Установи нормальный!" и долго смеялся
Нерабочий пример ...
Пример рабочий, это браузер нерабочий
Макс, ты придумал замечательную вещь для стимулирования посетителей оставлять посты. Те, у кого есть сайты, будут стремиться теперь попасть в твой TOP-10
конечно конечно
кто же спорит ... Люди с "рабочим браузером" любят чем-нибудь выделиться :idea:
а какой в этом смысл?
Это я на говорю примере данного сайта - МАКС для первых 10 выводит видимую ссылку на сайт. Чисто теоретически кого-то это может стимулировать.
Про рабочий браузер все немного проще.
Просто я сделал оформление как положено: разные шрифты, sub и списки, а этот ... IE показывает через одно место. Я пробился с ним кучу времени, но получился безумный код. Плюнул, снес и поставил определитель браузера. ;)
2Feelov:
В функции wp_list_pages() укажите параметр exclude=N, где N - номер исключенной страницы.
А есть неусеченная версия без проверки браузера :-D ?
Максим, несколько не понял вот этого абзаца:
"Из недостаков данного кода отмечу то, что у меня так и не получилось в одном SQL-запросе сделать так, чтобы суммировались комментарии от одного автора при указанном и отсутствующем адресе."
Почему бы не делать группировку по e-mail адресу? Указывать сайт или нет - право комментатора, а вот e-mail - поле обязательное для заполнения и соответственно указывающее на 1 пользователя. Имхо конечно.
Что-то вроде,
SELECT comment_author, comment_author_email, COUNT(comment_author) AS comment_count, comment_dateFROM $wpdb->comments
WHERE comment_approved = '1' AND comment_author_email 'ваш@емейл'
GROUP BY comment_author_email
ORDER BY comment_count DESC, comment_date DESC
LIMIT 100
comment_approved из селекта убрал, достаточно его в WHERE, всё равно при выводне не используется. И ещё, не плохо бы добавлять ."\n" в строчках, а то код страницы читается с трудом)))
А как нам получить группировку по comment_author_url? Нужно ведь это поле выводить.
У меня почему-то не получается.:?: Делаю все, как здесь написано - страница вообще не грузится. Если удалить запрос - загружается... может быть там еще что-то нужно править?
2Максим, тут я думаю можно точно так же взять только последний урл, указаный пользователем.
Т.е. максимально актуальный.
Feelov, попробуй из кода убрать . У меня тоже не грузилось, убрал и всё нормально.
2Maksus, я наверное покажусь тупым, но все-таки... что из кода-то убрать?? :???:
Максим, прости за офф топ, но не мог бы ты мне подсказать, как поставить проверку на браузер? IE у меня в блоге стили коверкает, вернее проблема, в основном, только в плеере, его уносит влево В лисе показывает всё чётко. Есть мысль запретить просмотр в IE, но реализация страдает =)