Всем доброго времени суток! Спасибо, что все еще присутствуете на моем блоге и ждете новых постов к циклу "Создать блог с нуля". Да, я искренне извиняюсь за то, что обновления теперь происходят не очень часто. Данная проблема связана с тем, что я вышел на работу и не могу посвящать блогу также много внимание как делал это ранее. Уж поверьте, после восьми часов работы с php кодом на рабочем месте не особо хочется лезть в php код своего проекта
Ладно, что-то я отвлекся. Чем мы сегодня займемся? Я предлагаю создать очередной мини модуль для нашего проекта.
Цель заметки - создать мини модуль похожих постов. Работу данной чудо штуки Вы можете лицезреть в самом низу данного (и не только данного) поста. Вот скрин для того чтобы Вы поняли, что именно мы будем делать
Если Вы по обновляете страничку с заметкой то можете заметить, что с каждой загрузкой страницы, скрипт выдает разный набор ссылок.
Для реализации нам понадобится:
Скажу пару строк для тех кто на блоге в первый раз, и приступим к реализации данного мини модуля
В общем-то цель этого блока ввести нового читателя, который чисто случайно вышел на данную страницу, в курс дела. Текст изложенный в данном посте будет полезен тем кто читает глобальный цикл статей "Создать блог с нуля". Этот цикл повествует о создание простого скрипта персонального блога на великом и могучем php. Если Вам интересен данный курс, то заходите по ссылке, что я дал Вам чуть выше, и приступайте к изучению изложенного мной материала. Если у Вас есть какие либо вопросы, то Вы можете оставить комментарий в заметке к которой у Вас есть вопрос. Если я в силах Вам помочь, то обязательно помогу
Для того что бы не пропускать новые заметки предлагаю Вам подписаться на RSS ленту блога через ридер, или же по почте.
В шаблоне буквально пару строк, поэтому я не думаю что у Вас возникнут по нему вопросы Нарек я данный шаблон следующим именем - morepost.html. А поместил в пользовательскую папку templates. Теперь собственно сам html код:
<!--ЕЩЕ ПОСТЫ-->
<div class="title_txt">Возможно Вам будут интересны следующие заметки:</div>
<ul style="padding-left:25px;">
[_more]
</ul>
<div class="end"></div>
<!--ЕЩЕ ПОСТЫ-->
Смысл модуля выбрать пять заметок для показа. Все пять заметок имеют одну общую особенность. Все они являются частью одной категории, именно эта особенность позволяет добиться эффекта похожести постов.
В основном (скажем плагин для wordpress) данный модуль выбирает заметки опираясь на так называемые теги, но так как у нас в движке нет тегов, то придется делать выборку по категории.
Первая функция модуля вытащит все посты из определенной категории, и выберет из них пять случайных.
Вторая функция просто с генерирует список из пяти полученных заметок
Создаем в пользовательской папке moduls файл с именем morepost.php. Теперь прописываем в созданном файле следующую функцию:
function morepost($cat,$blog)//модуль похожих постов (сбор массива)
{
$result_index = mysql_query("SELECT title,id,nameurl FROM blog WHERE
viewindex='1' AND
cat='$cat' AND
cat!='0' AND
id!='$blog'
");//Выводим из базы статью
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//если найдена хотя бы одна заметка
{
$more = file("templates/morepost.html");//подключаем шаблон
$more = implode("",$more);//склеиваем его
//Формируем массив со всеми постами необходимой категории
$ps = 0;//индикатор массива
do
{
$post[$ps][0] = $myrow_index['title'];//заголовок заметки
$post[$ps][1] = $myrow_index['id'];//id заметки
$post[$ps][2] = $myrow_index['nameurl'];//чпу заметки
$ps++;//переключаем индикатор массива
}
while($myrow_index = mysql_fetch_array($result_index));
//Формируем массив со всеми постами необходимой категории
$ellem = count($post);//определяем кол-во элементов в массиве, то бишь кол постов
if($ellem > 5)//Если постов больше 5-ти то отсеиваем не нужные (рандом)
{
$maxr = $ellem - 1;//максимальное кол постов в массиве, от нуля
for($i=0;$i<5;$i++)
{
$rand = rand(0, $maxr);//генерируем число от нуля до макс
if(isset($post[$rand]))//если такой элемент есть
{
$gen[$i][0] = $post[$rand][0];//переносим заголовок
$gen[$i][1] = $post[$rand][1];//переносим id
$gen[$i][2] = $post[$rand][2];//переносим чпу
unset($post[$rand]);//уничтожаем элемент для того чтобы снова его не выбрать
}
else $i--;//если элемента нет, то пере запускаем шаг цикла
}
$li = listMOREpost($gen);//генерируем список из массива содержащего рандомные посты
}
else $li = listMOREpost($post);//если постов меньше 5-ти то просто генерируем список без отсеивания
$more = str_replace("[_more]",$li,$more);//заменяем код-слово в шаблоне на список заметок
return $more;//выводим с генерированный html код
}
else return "";//если заметок не найдено функция выдаст пустоту
}
Код за комментирован, так что проблем с пониманием кода быть не должно
Тут все просто. Запускается цикл for() с помощью которого сформируется пять пунктов с ссылками. В общем вот код:
function listMOREpost($massiv)//модуль похожих постов (список)
{
global $chpu;
for($i=0;isset($massiv[$i]);$i++)
{
if($chpu == 0)$li .= "<li><a href=\"index.php?blog=".$massiv[$i][1]."\">".$massiv[$i][0]."</a></li>";
if($chpu == 1)$li .= "<li><a href=\"post/".$massiv[$i][2]."\">".$massiv[$i][0]."</a></li>";
}
return $li;
}
Поместите данную функцию в самый низ файла morepost.php
Как я уже говорил подключение будет производится не в главном файле (НЕ в index.php) а в модуле статей. Поэтому открываем файл text.php и прописываем новые строчки кода сразу после алгоритма вырезание код-слова [end]. Вот код (я дам Вам код функции blog(), учтите это не полный код станицы text.php!):
function blog($blog)
{
$result_index = mysql_query("SELECT * FROM blog WHERE id = '$blog'");//Выводим из базы статью
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//Проверяем есть ли в базе данных записи
{//Если есть...
$newloock = $myrow_index['loock'] + 1;//прибавляем плюс один к просмотрам
$up_loock = mysql_query ("UPDATE blog SET loock='$newloock' WHERE id='$blog'");//записываем новое значение в базу данных
$sm_read = file("templates/text.html");//...подключаем шаблон
$sm_read = implode("",$sm_read);//функция file() возвращаем массив, поэтому склеиваем его
$text = str_replace("<p>[end]</p>","",$myrow_index[text]);//Удаляем код-слово из текста
//(напоминаю, что этот [end] служит нам разделителем текста статьи, это нужно для вклеивания кнопки "Читать дальше")
//МОДУЛЬ ПОХОЖИХ ПОСТОВ
include("moduls/morepost.php");
$more = morepost($myrow_index['cat'],$blog);
$sm_read = str_replace("[_morepost]",$more,$sm_read);
//МОДУЛЬ ПОХОЖИХ ПОСТОВ
//Замены идентификаторов на переменные из базы данных
$sm_read = str_replace("[_text]",$text,$sm_read);//Текст
$sm_read = str_replace("[_title]",$myrow_index[title],$sm_read);//Название статьи
$sm_read = str_replace("[_author]",$myrow_index[author],$sm_read);//Автор статьи
$sm_read = str_replace("[_date_b]",$myrow_index[date_b],$sm_read);//Дата размещения
}
else $sm_read = "<p align='center'>Нет записей в базе данных</p>";//Если записей нет, то вывести это сообщение
$result[0] = $sm_read;
$result[1] = $myrow_index[viewcomm];
return $result;//Выводим с генерированный html код
}
В общем то все очень просто.
Вывод будет производится не в сайтбаре как мы делали это в предыдущих заметках, а в модуле статей. Стало быть нам необходимо подправить шаблон text.html. Открываем его и вставляем код-слово [_morepost] в то место где Вы хотите видеть список похожих постов. В моем случае (да и в большинстве остальных ) данный модуль выводится в самом конце текста заметки. Поэтому прописываем код слово вот так (даю Вам полный html код шаблона text.html):
<!--ТЕКСТ-->
<div class="title_txt">[_title]</div>
<div class="txt">
[_text]
<p align="right"><a href="javascript:history.go(-1);">Назад</a></p>
</div>
<div class="txt">Автор: [_author] | [_date_b]</div>
<div class="end"></div>
<br />
<!-- ПОХОЖИЕ ПОСТЫ -->
[_morepost]
<!-- ПОХОЖИЕ ПОСТЫ -->
<br />
<!--ТЕКСТ-->
Ну что же, еще один модуль на нашем блоге Поздравляю! В завершение покажу что получилось у меня:
Не особо конечно красиво, да и заметка вывелась всего одна (их в базе данных всего две) но тем не менее все работает
На этом я заканчиваю, если у Вас есть какие либо вопросы, то пользуйтесь формой ниже. Если Вы еще не подписаны на мой блог, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте.
Всего Вам наилучшего! У меня все!
Исходник |
_________
P.S.: Вам когда-нибудь приходила в голову мысль: "Какие позиции занимает мой проект в поисковых системах?" Те кто задумывался подобным вопросом прекрасно знают, что не так уж и просто проанализировать свой проект, особенно бесплатно. Но выход из данного положения есть! Анализ своего сайта можно произвести с помощью сервиса megaindex.ru. Как именно пользоваться данным сервисом можете почитать в посте Мегаиндекс (megaindex) на замечательном блоге ktonanovenkogo.ru
нужно будет и себе такую сделать!
спасибо)