|
|
Бросить курить реально? | SABRE - Simple Anti Bot Registration Engine [Russian by Daemony] - защищаемся от автоматических регистраций |
|
|
Немного о циклах и условиях в PHP (модифицируем Wordpress шаблон)
Говорю сразу, что в PHP я не шибко силен. Так, по мелочам что-либо (для себя) могу подправить, синтаксис языка знаком. Однако, творить какие-то более или менее сложные вещи это не для меня. Потому, знающих этот язык на хорошем уровне, просьба меня не пинать, а лучше поправить или дополнить, если есть что сказать.
Так же следует отметить, что я никогда не использовал и наверное не буду использовать плагины WP для вставки кода Google Adsense в публикации. Гораздо удобнее и быстрее (как по мне) делать это руками, вставляя блоки непосредственно в шаблон темы оформления.
Значит сегодня заинтересовался блогом товарища Brim’а. Просмотрел практически все публикации в нем, обнаружив интересные для меня заметки. Среди прочего встретились рекомендации, как в полосе комментариев пронумеровать список оставленных комментариев, а так же как выделить те комменты, которые оставил автор обсуждаемого материала. Это мне напомнило то, что я хотел давно сделать у себя…
Собственно, ничего сложного и нет. Использование PHP цикла дает возможность нумеровать комментарии. Условие, которое проверяет соответствие e-mail адреса комментатора адресу автора публикации, вставляет в код необходимый стиль css, если эти параметры равны.
Для того, чтобы пронумеровать ленту комментариев в цикл вывода сообщений вставляется счетчик с переменной $i начальное значение которого равно 1. Далее в цикле это значение каждый раз увеличивается на единицу, после вывода скриптом очередного комментария. Исправления следует сделать в файле comments.php текущей темы оформления. К слову сказать, есть достаточно много wordpress темок, которые уже имеют такой счетчик и вывод комментов сопровождается нумерацией.
Для того, чтобы выделить комментарий автора обсуждаемой публикации следует добавить условие вида if ($comment->comment_author_email == get_the_author_email()) и при выполнении условия задать определенный стиль, либо класс из файла style.css
Вот так выглядит мой файл comments.php (точнее, его фрагмент):
<?php $i = 1; ?> <?php foreach ($comments as $comment) : ?> <?php if (get_comment_type()=="comment") : ?> <li class="<?php if ( $comment->comment_author_email == get_the_author_email() ) echo 'mycomment'; else echo $oddcomment; ?>" id="comment-<?php comment_ID() ?>"> <fieldset <?php if ($comment->comment_author_email == get_the_author_email()) { echo 'style="border: 1px solid #0000ef;"';} ?>> <legend <?php if ($comment->comment_author_email == get_the_author_email()) { echo 'style="border: 1px dotted #0000ef;"';} ?>> <a style="font-family: Verdana;" href="#comment-<?php comment_ID() ?>" title="ID комментария <?php comment_ID() ?>">№ <?php echo $i; $i++; ?></a> .:. <strong><?php comment_author_link() ?></strong> говорит: </legend> <?php if ($comment->comment_approved == '0') : ?> <em><strong>Ваш комментарий ожидает проверки администратором.</strong></em> <?php endif; ?> <?php comment_text() ?> <div style="font-size: 9px; margin-bottom: 5px;" align="right"> <span style="font-size: 11px; font-family: courier new;"> <?php comment_date('Y-m-d H:i:s T') ?> </span> </div> </fieldset> </li>
В нем:
- - желтым маркером отмечены фрагменты кода - счетчика и вывода номера комментария;
- - белым на черном отмечены фрагменты для изменения стилей <fieldset> и <legend>, при условии, что комментарий оставлен автором публикации - необходимо для выделения комментариев автора.
Начинать правку следует с поиска в файле comments.php фрагмента <?php foreach ($comments as $comment) : ?> Таких фрагментов здесь обычно два. Использовать и работать следует с первым, потому что второй служит для вывода трекбеков (см. комментарии в коде темы).
Покрутив комменты, я подумал, что циклы можно использовать еще с одной целью. Ранее, при вставке блоков Google Adsense в шаблоне темы оформления Daemony’s Live я обошел стороной файл index.php который отвечает за вывод ленты последних публикаций на главной странице. В этой ленте у меня отображается семь последних публикаций (анонсов). Неплохо было бы, если рекламные блоки отображались на главной странице в двух местах, допустим, после первого, четвертого и седьмого анонса. С циклами и счетчиком реализовать это несложно.
Лента последних публикаций формируется с помощью цикла <?php while (have_posts()) : the_post(); ?>. Вставим перед этим циклом счетчик с исходным значением $i = 0. В цикле с каждым новым "проходом" будем увеличивать $i на единицу <?php $i++; ?>. Поставим условие, что если $i равно 1 или 4 или 7, то произвести вставку файла через инклюд. В целом у меня index.php преобразился до такого вида:
<?php if (have_posts()) : ?> <?php $i = 0; ?> <?php while (have_posts()) : the_post(); ?> <?php $i++; ?> <div class="entry"> <div id="post-<?php the_ID(); ?>"> <div align="right"><?php the_time('l, j F, Y H:i:s T') ?></div> <h2><a href="<?php the_permalink() ?>" rel="bookmark"> <?php the_title(); ?> </a> </h2> <?php the_content(''); ?> <?php if ($i == 1 || $i == 4 || $i == 7 ) { echo '<div> </div><div align="center"'; include (TEMPLATEPATH . '/adsense/adsense_720x90_text_noborder.php'); echo '</div><div> </div>'; } ?> <p class="postmetadata"> ... </p> </div> </div> <?php endwhile; ?>
А как это выглядит в работе можно посмотреть на главной странице.
Ключевые слова
adsense | php | theme | Wordpress | оформление


