Всем доброго времени суток. Спасибо что заглянули на мой блог! Сегодня мы продолжим улучшать наш движок. На повестке дня создание модуля который, в сайтбаре нашего блога, будет выводить последние комментарии.
Модуль представляет собой список имен авторов и заголовков постов в которых автор оставлял свое сообщение. При наведение на имя или заголовок вылезет окошко с сообщением пользователя. Сообщение выводить будем не полной, приблизительно 30 слов.
Поддержка заметки: Каким именно бизнесом заняться женщине? Не можете ответить на данный вопрос? Тогда представляю Вашему вниманию список бизнес идеи для женщин. Просмотрите, может данный материал покажется Вам интересным
Данный материал предназначен для тех кто читает цикл статей "Создать блог с нуля". Данный цикл повествует о создание персонального блога на php. Таким образом данные статьи можно рассматривать как практические уроки php.
Если Вам интересен данный цикл, то предлагаю Вам подписаться на RSS ленту блога через ридер, или же по почте. Подписавшись Вы не пропустите новые заметки на моем блоге.
Для нового шаблона, а именно для окошка с не полным сообщением, пришлось написать новый стиль css. Поэтому давайте первым делом вставим новый стиль, в наш файл style.css
Открываем файл 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 взяты на глазок.
Создаем новый файл, не забываем про кодировку, и пишем в нем вот такой код:
<!--ТОП КОММ-->
<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.
В шаблоне использую следующие код-слова:
Данный файл я назвал lastcomm.html и поместил в пользовательскую папку templates.
Сначала дам Вам код, после скажу пару слов о логике скрипта.
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. Она, как Вы уже догадались, нужна для того чтобы определить какой должна быть ссылка на пост (ЧПУ или динамическая).
В теле функции следующая логика.
При генерации ссылки на пост, к ссылке приклеивается значение якоря.
Но самого якоря у нас пока нет. Для чего он нужен? Он нужен для того чтобы ссылка перенесла нас к определенному комментарию, стало быть у каждого комментария должен быть свой якорь. Добиться этого легче легкого. Открываем пользовательский шаблон 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 ленту блога через ридер, или же по почте.
Всего Вам наилучшего! У меня все!
Исходник |
Поздравляю Вас с повышением тица =)
половину нету, а половино вообще не работает :(
для чего блог вообще создавать
Комментариев [_comm] в чём причина?
В этих файлах 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);