Доброго времени суток дорогой читатель моего блога! Сегодня я напишу заметку продолжающую глобальный цикл "Создать блог с нуля". Нам предстоит написать мини модуль отображение самых читаемых постов на нашем блоге. Как это сделать? Как сообщить скрипту, что именно эти посты самые просматриваемые? Давайте начну со второго вопроса
Прежде чем писать алгоритм вывода топовых заметок необходимо создать инструмент с помощью которого движок бы мог определить этот самый топ.
Первым делом нам необходимо будет создать новую колонку для таблицы заметок в нашей базе данных. В этой колонке мы будем считать просмотры, то есть каждый раз когда кто-нибудь откроет определенную заметку, скрипт в эту колонку запишет плюс один к просмотру. Таким образом скрипт сможет определить какие же посты на блоге самые популярные.
Ответом на первый же вопрос будет создание самого модуля, который опираясь на данные нашей новой колонки выведет нам 10 самых просматриваемых заметок.
Сам модуль очень простой. Вообще весь алгоритм блога очень простой
Короткое объявление для тех кто на блог пришел в первый раз. Данный материал является продолжением глобального цикла "Создать блог с нуля". Если Вы заинтересованны научится писать простые проекты на языке php, то переходите по ссылке выше и приступайте к ознакомлению вывешенного мной материала.
Если Вам интересен данный цикл, то предлагаю Вам подписаться на RSS ленту блога через ридер, или же по почте. Подписавшись Вы не пропустите новые заметки на моем блоге.
Давайте зайдем в структуры нашей таблицы blog
Для создания новой колонке, в низу выберем "после rss"
Заполняем поля вот так:
Жмем "Сохранить". На этом создание новой колонки заканчивается
Тут в принципе ничего сложного нет. Нам необходимо каждый раз когда кто-либо открывает заметку прибавлять к колонке loock плюс один
За открытие полного текста заметки отвечает модуль text.php. Открываем его и добавляем новые строчки кода. Я опубликую весь код модуля, внимание на экран
<?
@$result_meta = mysql_query("SELECT title FROM page WHERE id='1'");
@$myrow_meta = mysql_fetch_array($result_meta);
if($myrow_meta != "")
{
$result_meta_blog = mysql_query("SELECT title,meta_d,meta_k FROM blog WHERE id='$blog'");
$meta_blog = mysql_fetch_array($result_meta_blog);
$header_title = $myrow_meta[title]." - ".$meta_blog[title];
$header_metaD = $meta_blog[meta_d];
$header_metaK = $meta_blog[meta_k];
}
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] служит нам разделителем текста статьи, это нужно для вклеивания кнопки "Читать дальше")
//Замены идентификаторов на переменные из базы данных
$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 код
}
?>
С помощью комментария я выделил новый кусочек кода. Мы всего лишь прибавляем плюс один к просмотрам и обновляем строчку в базе данных.
Теперь приступим к написанию модуля. Модуль будет вытаскивать 10 самых популярных постов, после чего вклеит всю нужную информацию в шаблон, который мы тоже сейчас создадим. Начнем с шаблона
Шаблон я назвал topdoc.html и сохранил в пользовательской папке templates. Сам шаблон не сложный. Очень похож на шаблон меню или последних комментариев. Вот код:
<!--ТОП ПОСТОВ-->
<div class="menu_title">Самое читаемое</div>
<div style="margin-left:5px;margin-right:5px;">
[_divmenu]
<div class="menu_link">[_station]</div>
[_divmenu]
</div>
<!--ТОП ПОСТОВ-->
Используются следующие код-слова:
Ну а теперь давайте напишем саму функцию модуля. Создаем файл в пользовательской папке moduls, и называем его topdoc.php. Вот код функции:
<?
function topdoc($chpu)//функция вывода самых читаемых постов
{
//выводим 10 самых читаемы постов из базы данных
$result_index = mysql_query("SELECT nameurl,title,id FROM blog WHERE viewindex!='0' ORDER BY loock DESC LIMIT 10");
$myrow_index = mysql_fetch_array($result_index);
if($myrow_index != "")//если выведен хотя бы один пост
{
$sm_read = file("templates/topdoc.html");//подключаем шаблон
$sm_read = implode("",$sm_read);//склеиваем массив в переменную
preg_match("/\[_divmenu\](.*?)\[_divmenu\]/s",$sm_read,$a);//вырезаем часть шаблона которую будем ду вайлить
do
{
$edd_tamp = $a[1];//делаем копию вырезанной части шаблона
//генерация динамической ссылки или ЧПУ
if($chpu == 0)$href = "<a href=\"index.php?blog=".$myrow_index['id']."\">".$myrow_index['title']."</a>";
else $href = "<a href=\"post/".$myrow_index['nameurl']."\">".$myrow_index['title']."</a>";
$edd_tamp = str_replace("[_station]",$href,$edd_tamp);//Заменяем код-слово на ссылку
$link .= $edd_tamp;//склеиваем все в одну переменную
}
while($myrow_index = mysql_fetch_array($result_index));
//заменяем все что между [_divmenu] и [_divmenu] на генерированные данные
$topdoc = preg_replace("/\[_divmenu\].*?\[_divmenu\]/s",$link,$sm_read);
}
return $topdoc;//выводим результат
}
?>
Описание логики думаю будет лишним, но все же скажу пару слов
В общем то это все, что возможно понадобится объяснить. Остальное уже не ново, да и комментарии в коде имеются, так что уверен разберетесь
Подключение осуществляется буквально двумя строчками кода . Открываем пользовательский главный файл - index.php. Сразу после подключение модуля последних комментариев прописываем вот такой код:
//ТОП СТАТЬИ
include("moduls/topdoc.php");//Модуль топ статьи
$topdoc = topdoc($chpu);
//ТОП СТАТЬИ
Следующим шагом необходимо прописать переменную topdoc в нашем главном шаблоне. Открываем шаблон index.html и редактируем правый блог следующим образом:
<!--ПРАВЫЙ БЛОК-->
<td class="border" width="210px" valign="top">
<?=$menu?>
<br><br>
<?=$poll?>
<br><br>
<?=$topdoc?>
<br></br>
<?=$lastcomm?>
</td>
<!--ПРАВЫЙ БЛОК-->
Как видите я прописал переменную сразу после вывода значения переменной poll.
После манипуляций, описанных в данной заметке, мы увидим вот такой результат:
Теперь, если пользователи будут открывать пост "Материал для тестовой категории" чаще чем "Добро пожаловать!", то пост "Материал для тестовой категории" выбьется на первое место. Мои поздравления! Модуль реализован!
Если у Вас есть какие либо вопросы, то пользуйтесь формой ниже. Если Вы еще не подписаны на мой блог, то обязательно подпишитесь на RSS ленту блога через ридер, или же по почте.
Всего Вам наилучшего! У меня все!
Исходник |
_________
P.S.: Если Вам необходимо снять квартиру в Харькове то советую посетить rieltor.kh.ua. Судя по внушительному списку выбора недвижимости в аренду, могу сказать, что Вы там обязательно подберете то, что Вам необходимо.
Если да, то Вам нужно написать приблизительно такой скриптик (l.php)
.... как сделать запись в бд?
Если Ваша таблица в базе состоит из полей
то выборка будет приблизительно такой