Переход к предыдущей публикации Бросить курить реально? SABRE - Simple Anti Bot Registration Engine [Russian by Daemony] - защищаемся от автоматических регистраций Переход к следущей публикации

Немного о циклах и условиях в PHP (модифицируем Wordpress шаблон)

Вторник, 13 мая, 2008 07:57:03 EEST

Исправления от 23 марта, 2009 13:10:10

Немного о циклах и условиях в 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>&nbsp;</div><div align="center"';
			include (TEMPLATEPATH . '/adsense/adsense_720x90_text_noborder.php');
			echo '</div><div>&nbsp;</div>';
		} ?>

				<p class="postmetadata">
                                   ...
				</p>
		   </div>
		</div>

		<?php endwhile; ?>

А как это выглядит в работе можно посмотреть на главной странице.

Похожие публикации

Выделенные сервера дешевле обычного хостинга

Комментариев 2

Olmer 27 апреля, 2009 13:56:06 EEST .:. ID #8991 .:.

Спасибо большое

Zefo 15 марта, 2009 03:48:32 EET .:. ID #6475 .:.

Благодарности автору. Пригодилось.

Возник вопрос по этой теме, или есть что добавить? Говорите!

  1. Зарегистрированным пользователям вводить защитный код (captcha) не приходится.
  2. Загрузить свою аватарку Вы сможете, зарегистрировавшись на сервисе www.gravatar.com
Публикуя комментарий Вы подтверждаете, что ознакомились c Правилами и принимаете их!
HOMOSAPIENS ONLY! :)