Реализуем модуль последних комментариев

 

Всем доброго времени суток. Спасибо что заглянули на мой блог! Сегодня мы продолжим улучшать наш движок. На повестке дня создание модуля который, в сайтбаре нашего блога, будет выводить последние комментарии.

Модуль представляет собой список имен авторов и заголовков постов в которых автор оставлял свое сообщение. При наведение на имя или заголовок вылезет окошко с сообщением пользователя. Сообщение выводить будем не полной, приблизительно 30 слов.

 

 

Поддержка заметки: Каким именно бизнесом заняться женщине? Не можете ответить на данный вопрос? Тогда представляю Вашему вниманию список бизнес идеи для женщин. Просмотрите, может данный материал покажется Вам интересным Улыбаюсь

 

Для тех кто на блоге в первый раз

 

Данный материал предназначен для тех кто читает цикл статей "Создать блог с нуля". Данный цикл повествует о создание персонального блога на php. Таким образом данные статьи можно рассматривать как практические уроки php.

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

 

Шаблон для модуля последних комментариев

 

Для нового шаблона, а именно для окошка с не полным сообщением, пришлось написать новый стиль css. Поэтому давайте первым делом вставим новый стиль, в наш файл style.css

 

Новый класс css - invisiblecomm

 

Открываем файл style.css и прописываем в самом низу новый класс:

.invisiblecomm
{
border:1px solid #dcdcdc;
width:300px;
position:absolute;
margin-left:-285px;
margin-top:-20px;
display:none;
padding:5px;
background-color:#fff;
text-align:left;
z-index:2;
}

Каждая строчка в классе Вам должна уже быть известна. Хочу сказать, что значения стилей margin-left и margin-top взяты на глазок.

 

Шаблон для модуля - lastcomm.html

 

Создаем новый файл, не забываем про кодировку, и пишем в нем вот такой код:

					<!--ТОП КОММ-->	
<div class="menu_title">Комментарии</div>
<div style="margin-left:5px;margin-right:5px;">
[_divmenu]
<div class="menu_link" onmouseover="document.getElementById('blog_comm_[_namber]').style.display = 'block';" onmouseout="document.getElementById('blog_comm_[_namber]').style.display = 'none';"><span style="color:#63A7CC;cursor:pointer;">[_author]</span> пишет в "[_station]"</div>
<div id="blog_comm_[_namber]" class="invisiblecomm">[_text]</div>
[_divmenu]
</div>
<!--ТОП КОММ-->

В один из блоков div вклеен javascript. Этот скрипт простенький. При наведение, блок с id blog_comm_N поменяет стиль с display:none на display:block. Если убрать курсор то блок с id blog_comm_N поменяет стиль с display:block на display:none.

В шаблоне использую следующие код-слова:

  • [_namber] - необходим для того чтобы каждый id у блока div был индивидуален. Так же данное код-слово необходимо для работы в клееного javascript
  • [_author] - Имя пользователя который оставил сообщение
  • [_station] - Ссылка на пост в котором пользователь оставил комментарий
  • [_text] - Текст оставленного сообщение (~30 слов)
  • [_divmenu]...[_divmenu] - Все что между этими код-словами будет вырезано. Данный кусочек необходимо будет размножить (строчки в списке)

Данный файл я назвал lastcomm.html и поместил в пользовательскую папку templates.

 

Модуль последних комментариев - lastcomm.php

 

Сначала дам Вам код, после скажу пару слов о логике скрипта.

function lastcomm($chpu)
{
//выводим из базы данных 5 последних комментариев
$result_index = mysql_query("SELECT author,id,blog,text FROM comm WHERE status != '1' ORDER BY id DESC LIMIT 5");
$myrow_index = mysql_fetch_array($result_index);

if($myrow_index != "")//если в базе есть комментарии
{
$sm_read = file("templates/lastcomm.html");//подключаем шаблон
$sm_read = implode("",$sm_read);//сливаем его в одну переменную

preg_match("/\[_divmenu\](.*?)\[_divmenu\]/s",$sm_read,$a);//вырезаем ту часть шаблона, которую будем ву вайлить
do//цикл ду вайл
{
//выводим инфу о посте в котором оставленны комментарий
$result_blog = mysql_query("SELECT id,nameurl,title FROM blog WHERE id='".$myrow_index['blog']."'");
$myrow_blog = mysql_fetch_array($result_blog);

$edd_tamp = $a[1];//делаем копию вырезанного шаблона

//определяем чпу ссылка или динамическая.
if($chpu == 0)$href = "<a href=\"index.php?blog=".$myrow_blog['id']."#comm".$myrow_index['id']."\">".$myrow_blog['title']."</a>";
else $href = "<a href=\"post/".$myrow_blog['nameurl']."#comm".$myrow_index['id']."\">".$myrow_blog['title']."</a>";

//создаем текст комментария (не больше ~30 слов)
$no_tags = strip_tags($myrow_index['text']);//чистим текст от html кода
$txtcomm = explode(" ",$no_tags);//делим текст на массив (в каждом элементе массива будет одно слово)
for($i=0;$i<=30 AND isset($txtcomm[$i]);$i++)//склеиваем 30 слов
{
if($i == 0)$txtcomm_result = $txtcomm[$i];//если это первое слово, то пробел в начале не нужен
else $txtcomm_result .= " ".$txtcomm[$i];//для последующих слов ставим в начале пробел
if($i == 30)$txtcomm_result .= "...";//в конце пристыковываем к тексту троеточие
}

$edd_tamp = str_replace("[_text]",$txtcomm_result,$edd_tamp);//обрезанный текст комментария
$edd_tamp = str_replace("[_station]",$href,$edd_tamp);//ссылка на пост (чпу или динамическая)
$edd_tamp = str_replace("[_namber]",$myrow_index['id'],$edd_tamp);//id для создания персонально id. Например id="blog_comm_1"
$edd_tamp = str_replace("[_author]",$myrow_index['author'],$edd_tamp);//автор коммента

$link .= $edd_tamp;//склеиваем все обрезки шаблона в одну переменную
}
while($myrow_index = mysql_fetch_array($result_index));
$lastcomm = preg_replace("/\[_divmenu\](.*?)\[_divmenu\]/s",$link,$sm_read);//вместо код слов вклеиваем генерированный html код
}
return $lastcomm;//выводим результат.
}

Функция имеет параметр, переменную chpu. Она, как Вы уже догадались, нужна для того чтобы определить какой должна быть ссылка на пост (ЧПУ или динамическая).

В теле функции следующая логика.

  • Первым делом выводим из базы данных последние пять комментариев.
  • Если хотя бы один комментарий был найден подключаем шаблон.
  • Далее скрипт вырежет необходимый кусочек шаблона.
  • В теле do while первым делом мы узнаем в каком посте был оставлен комментарий
  • Далее узнаем какая должна быть ссылка на пост. В этом нам поможет переменная chpu
  • Сформируем текст сообщения. Как уже говорил текст будет состоять приблизительно из 30 слов
  • В конце скрипт заменит код-слова на значения и выведет результат в виде с генерированного html кода

 

Создаем якорь для комментариев

 

При генерации ссылки на пост, к ссылке приклеивается значение якоря.

 

ссылка на якорь

 

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

<a name="comm[_id]"></a>

Теперь у каждого комментария будет свой якорь, что позволит перенести пользователя к нужному ему сообщению.

 

Подключаем новый модуль к движку и выводим результат работы в сайтбаре

 

Осталось лишь подключить новый модуль и вывести его значение в сайтбаре. С начало подключим модуль

 

Подключаем модуль к движку

 

Открываем главный пользовательский файл index.php и сразу после модуля опроса пишем скрипт подключения:

//ПОСЛЕДНИЕ КОММЕНТАРИИ
include("moduls/lastcomm.php");
$lastcomm = lastcomm($chpu);
//ПОСЛЕДНИЕ КОММЕНТАРИИ

 

Выводим результат работы модуля в сайтбаре

 

Открываем главный пользовательский шаблон index.html и в правом блоке добавляем переменную lastcomm. Правый блок будет выглядеть вот так:

                <!--ПРАВЫЙ БЛОК-->
<td class="border" width="210px" valign="top">
<?=$menu?>
<br><br>
<?=$poll?>
<br></br>
<?=$lastcomm?>
</td>
<!--ПРАВЫЙ БЛОК-->

 

Заключение

 

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

 

модуль последних комментов

сообщение последнего комментария

 

Если у Вас есть какие либо вопросы, то пользуйтесь формой ниже. Если Вы еще не подписаны на мой блог, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте.

Всего Вам наилучшего! У меня все!

Исходник
 

Возможно Вам будут интересны следующие заметки

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

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
Константин, 05 Июля 2012 г. 13:40 пишет:
Гость
А зачем шаблон? Если уж возьмётся кто-то кодить, то думаю будет разбираться. Конечно, жрёт это немного рессурсов, но имхо лучше обойтись без шаблона. Опять же не лишним будет уточнить, что этот ещё один запрос к БД. К слову, здесь можно было бы использовать класс WordPress для работы с БД, а не функции MySQL.
Rio-Shaman, 05 Июля 2012 г. 14:44 пишет:
Автор
Данный модуль не для wordpress а для движка персонального блога, работу которого я описываю с 9-ого октября 2011-ого года =) Правда возможно я не правильно понял Ваше замечание =)
Ответ для пользователя: Константин
intelegent, 17 Июля 2012 г. 22:16 пишет:
Читатель
Мои поздравления, у вас десятка тиц ;) Мне тоже + 10 дали (20)
Rio-Shaman, 17 Июля 2012 г. 23:11 пишет:
Автор
Спасибо за поздравления... Правда я пока не верю в эту мифическую десятку, ибо количество ссылок на мой блог не менялось уже пару месяцев, странно что яндекс решился на числить мне 10 пунктов.

Поздравляю Вас с повышением тица =)
Ответ для пользователя: intelegent
coocke, 18 Января 2013 г. 04:05 пишет:
Гость
Мда, в этом блоге одна невиданная джигурдятина :(
половину нету, а половино вообще не работает :(
для чего блог вообще создавать
Rio-Shaman, 18 Января 2013 г. 09:46 пишет:
Автор
Для теста системы и саморазвития...
Ответ для пользователя: coocke
Андрей, 19 Января 2013 г. 01:41 пишет:
Гость
а я пока без тица, ну все впереди)
ArlushaMen, 31 Марта 2014 г. 03:37 пишет:
Читатель
Приветствую тебя Rio-Shaman у меня такая заморочка, не получается вывести комментарии на странице text.tpl.php у меня на этой странице news.tpl.php не выводятся, показано
Комментариев [_comm] в чём причина?
Алексей, 31 Марта 2014 г. 10:04 пишет:
Автор
На сколько я помню в этой статье не производилась работа с ключевым словом [_comm]. С чего Вы взяли, что данное ключевое слово должно обрабатываться?
Ответ для пользователя: ArlushaMen
ArlushaMen, 31 Марта 2014 г. 14:01 пишет:
Читатель
Я понимаю что не в этой статье.
Ответ для пользователя: Алексей
Алексей, 31 Марта 2014 г. 14:33 пишет:
Автор
Я к сожалению не могу запомнить все (не помню где именно я писал код на обработку данного ключевого слова), поэтому не могли бы Вы уточнить после какой статьи у Вас не работает, то что не работает...
Ответ для пользователя: ArlushaMen
ArlushaMen, 01 Апреля 2014 г. 01:38 пишет:
Читатель
Я уже разобрался, комментарии вывел на двух страницах, а были только на одной

В этих файлах news.tpl.php и text.tpl.php вставил

вот этот код <div class="text">Комментариев [_comm]</div>

а в этих файлах news.php и text.php вот так

$sm_read = str_replace("[_comm]",$myrow_index['comm'],$sm_read);
Ответ для пользователя: Алексей