04
06
10

Конструктивные элементы шаблона Wordpress | Файл comments.php | Вывод комментариев

Рубрики: WordPress
Тэги: , ,

wplogo.gifПродолжим рассматривать файлы шаблона Wordpress. Сегодня речь пойдет о такой важнейшей детали любого блога, как комментарии. Ибо без них и блог не блог.

За вывод комментариев отвечает файл comments.php. Прицепляется он, как мы уже говорили, к файлу single.php, который выводит отдельно взятый пост на блоге.

По сути, лента комментариев на блоге в чем-то схожа с лентой самих же постов. Только посты идут от нового к старым, если смотреть сверху вниз, а комментарии наоборот — вверху самые старые, а внизу свежие. Напрашивается вывод: стало быть, комменты тоже выводятся при помощи какой-то повторяющейся конструкции вроде лупа (loop) как у постов? Да, почти что так. Но обо всем по порядку.

Комментарии на блоге могут выводиться по-разному. Во-первых, кучно. То есть, если у вас в настройках блога включен прием трэкбэков, то все комменты и трэкбэки будут выводиться одной лентой по мере поступления. Во-вторых, дифференцированно. То есть, комменты отдельно, трэкбэки отдельно. В-третьих, можно для разнообразия оформить комменты поочередно с различным фоном для лучшего восприятия. Ну и, в-четвертых, можно как-то заметнее выделить комменты автора блога, а все остальные пусть будут одинаковые. Вот все эти четыре варианта мы сегодня и рассмотрим.

Поехали!

Файл comments.php состоит из двух основных частей: нумерованного списка, выводящего все комментарии поочередно, и формы для добавления оных. Сегодня разберем вывод комментов.

Как я уже и говорил, комменты можно выводить по разному.

Первый вариант (по-умолчанию) выводит все поступающие комменты одной лентой, независимо коммент это или трэкбэк. Код выглядит следующим образом:

<ol>
<?php foreach ($comments as $comment) : ? >
<li <?php echo $oddcomment; ? >id="comment-<?php comment_ID() ? >" >
<?php comment_author_link() ? >:
<?php if ($comment->comment_approved == '0') : ? >
<em>Ваш комментарий ожидает модерации</em>
<?php endif; ? >
<br />
<a href="#comment-<?php comment_ID() ? >" title=""><?php comment_date('d.m.Y') ? > в <?php comment_time('H:i') ? > </a> <?php edit_comment_link('Редактировать','',''); ? >
<?php comment_text() ? >
</li>
<?php
if('alt' == $oddcomment) {$oddcomment="";}
else { $oddcomment='alt'; }
? >
<?php endforeach; ? >
</ol>

Код приведен в сокращенном виде, без текстовых пометок и привязок к стилям. Что нас тут интересует больше всего?

1. <?php comment_author_link() ? > — выводит имя автора комментария со ссылкой на его сайт, если он его указал.

2. <em>Ваш комментарий ожидает модерации</em> — если комментатор впервые на блоге, то после отправки своего первого коммента он увидит именно эту надпись.

3. <a href=”#comment-<?php comment_ID() ? >” title=”"><?php comment_date(’d.m.Y’) ? > в <?php comment_time(’H:i’) ? > </a> — у каждого комментария есть собственный ID и ссылка-метка. В данном случае эта ссылка оформлена как дата комментария. Это нужно, чтобы любой другой комментатор или автор мог сослаться на данный коммент. Про дату и время (их php-коды) мы уже говорили в теме про файл index.php

4. <?php edit_comment_link(’Редактировать’,”,”); ? > — очень удобная фишка. Можно отредактировать коммент прямо из поста, не переходя в раздел комментариев в админской.

5. <?php comment_text() ? > — непосредственно текст комментария

Второй вариант. По умолчанию трэкбэки выводятся вперемешку с другими комментариями и выглядят, мягко говоря, не очень симпатично:

Каким-то чудом я, Билли Гейтц пишу про…
[…] Бла-бла-бла… На блоге Тынц-Тынц автор пишет, что у него запас золота иссяк и гр… […]

Намного лучше выводить трэкбэки отдельно. Например, в конце всех остальных комментов, и оформить их вменяемыми ссылками. Для этого нужно видоизменить код вывода комментариев следующим образом:

<ol>
<?php foreach ($comments as $comment) : ? >
<?php $comment_type = get_comment_type(); ? >
<?php if($comment_type == 'comment') { ? >
<li class="<?php echo $oddcomment; ? >" id="comment-<?php comment_ID() ? >" > <?php comment_author_link() ? >
<?php if ($comment->comment_approved == '0') : ? >
<em>Ваш комментарий ожидает модерации. </em>
<?php endif; ? >
<br />
<?php comment_text() ? >
</li>
<?php
if('alt' == $oddcomment) {$oddcomment="";}
else { $oddcomment='alt'; }
? >
<?php } else { $trackback = true; } ? >
<?php endforeach; ? >
</ol>
<h3>Трэкбеки</h3>
<ul>
<?php foreach ($comments as $comment) : ? >
<?php $comment_type = get_comment_type(); ? >
<?php if($comment_type != 'comment') { ? >
<li> <?php comment_author_link() ? > </li>
<?php } ? >
<?php endforeach; ? >
</ul>

Как видим, здесь уже присутствуют два списка: нумерованный (ol), выводящий только комментарии, и маркированный (ul), выводящий трэкбэки. Разделение сделано достаточно просто: в код добавлена функция get_comment_type. В первом случае она говорит “выводим только комменты” — <?php if($comment_type == ‘comment’) { ? >
А во втором случае “выводим только НЕ комменты” — <?php if($comment_type != ‘comment’) { ? > Знак восклицания (!) здесь как раз для указания обратного действия.

Третий вариант. Оформляем поочередно комменты разными стилями. Для этого сначала перед тэгом списка <li> добавим следующий код:

<?php $i++;
($i % 2 == 1) ? $bg_comment = 'class_comment1' : $bg_comment = 'class_comment2';
? >

Далее пишем так:

<li id="comment-<?php comment_ID() ? >" class="<?php echo $bg_comment; ? >" >
<?php comment_author_link() ? >
<a href="#comment-<?php comment_ID() ? >" title=""><?php comment_date('d.m.Y') ? > в <?php comment_time('H:i') ? > </a> <?php edit_comment_link('Редактировать','',''); ? >
<?php comment_text() ? >
</li>

Теперь останется только в листе стилей прописать два разных стиля, соответственно class_comment1 и class_comment2. Например, можно задать им разный фон.

Четвертый вариант. Иногда имеет смысл выделить комментарий автора блога, чтобы он отличался от других. Самый простой способ — писать комменты от имени админа. Тогда по-умолчанию имя автора будет записано простым текстом (не ссылкой) и выглядеть как слово admin.

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

<li class="<?php echo $oddcomment; ? >" id="comment-<?php comment_ID() ? >" <?php if ($comment->comment_author == "Вася Хитрый") echo "style='background-color:#e9f9fe; color: #000;'"; ?> >

Это так называемый “местный стиль”, внедренный непосредственно в код файла comments.php. И пусть это не совсем корректно по отношению к валидации, но зато самый простой и, надо заметить, рабочий код. Здесь все просто: когда при написании коммента добавляется имя автора Вася Хитрый, то код срабатывает автоматически и подставляет этот местный стиль.

Есть, конечно же, и другие варианты и даже какой-то плагин. Но этот способ самый простой.

В следующий раз поговорим о форме для комментирования.

rss Подпишитесь на RSS


Комментарии (5)

  1. Neolot 04.06.2010 15:29

    По поводу 4 варианта: если используется классическая (из шаблона default) верстка комментариев, то достаточно прописать стили для класса comment-author-admin

  2. Piks 05.06.2010 17:31

    Как раз занимаюсь созданием мобильной темы для WP, пригодится. Спасибо

  3. extezy 08.06.2010 11:33

    Благодарю за разбор внутренностей. Верстаю шаблон для ВП и именно на комментариях немного приостановился. ;)

  4. Игорь Квентор 10.06.2010 14:32

    extezy, вэлкам!

  5. Придумываю идеи 10.06.2010 15:07

    Как раз возникли проблемы одном из вп-блогов. Ваша статья помогла решить проблему .Спасибо.

Трэкбеки

Оставить комментарий