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

 

Доброго времени суток дорогой читатель моего блога! Сегодня я напишу заметку продолжающую глобальный цикл "Создать блог с нуля". Нам предстоит написать мини модуль отображение самых читаемых постов на нашем блоге. Как это сделать? Как сообщить скрипту, что именно эти посты самые просматриваемые? Давайте начну со второго вопроса Улыбаюсь

Прежде чем писать алгоритм вывода топовых заметок необходимо создать инструмент с помощью которого движок бы мог определить этот самый топ.

 

 

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

Ответом на первый же вопрос будет создание самого модуля, который опираясь на данные нашей новой колонки выведет нам 10 самых просматриваемых заметок.

Сам модуль очень простой. Вообще весь алгоритм блога очень простой Смеюсь

 

Для новоприбывших

 

Короткое объявление для тех кто на блог пришел в первый раз. Данный материал является продолжением глобального цикла "Создать блог с нуля". Если Вы заинтересованны научится писать простые проекты на языке php, то переходите по ссылке выше и приступайте к ознакомлению вывешенного мной материала.

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

 

Новая колонка в таблице blog нашей базы данных

 

Давайте зайдем в структуры нашей таблицы blog

 

структура таблицы

 

Для создания новой колонке, в низу выберем "после rss"

 

создаем новую колонку после колонки 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>
<!--ТОП ПОСТОВ-->

Используются следующие код-слова:

  • [_divmenu]...[_divmenu] - Все что между этими код-словами будет вырезано и скопировано 10 или менее раз.
  • [_station] - Ссылка с анкором. Ссылка будет в виде динамики или ЧПУ, все зависит от того включен режим ЧПУ или нет

 

Алгоритм модуля самых популярных постов

 

Ну а теперь давайте напишем саму функцию модуля. Создаем файл в пользовательской папке 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;//выводим результат
}
?>

Описание логики думаю будет лишним, но все же скажу пару слов Смеюсь

  • У функции есть параметр - переменная chpu. Я думаю Вы помните для чего она нужна. С помощью нее мы определимся какого вида ссылку (динамическую или ЧПУ) необходимо создать.
  • Вывод из базы данных с параметром "ORDER BY loock DESC", что обозначает сортировать по колонке loock в обратном порядке (от большего к меньшему). Таким образом первые 10 заметок будут самыми популярными Улыбаюсь

В общем то это все, что возможно понадобится объяснить. Остальное уже не ново, да и комментарии в коде имеются, так что уверен разберетесь Улыбаюсь

 

Подключаем модуль самых популярных постов к нашему движку

 

Подключение осуществляется буквально двумя строчками кода Смеюсь. Открываем пользовательский главный файл - 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. Судя по внушительному списку выбора недвижимости в аренду, могу сказать, что Вы там обязательно подберете то, что Вам необходимо.

 

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

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

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
Вы не подтвердили условия политики конфиденциальности.
Виктор, 14 Февраля 2014 г. 20:49 пишет:
Гость
Я еще вывел количество просмотров статьи в цифрах, над статьей, добавил в файл news.php такой код
$edd_tamp = str_replace("[loock]",$myrow_index[loock],$edd_tamp);//Количество просмотров
и в шаблон news.html и text.html
<span class="stat">Просмотров: [loock]</span>
Правильно сделал?
Алексей, 15 Февраля 2014 г. 22:42 пишет:
Автор
Ну вроде как да... :-)
Ответ для пользователя: Виктор
Павел, 23 Декабря 2017 г. 03:00 пишет:
Гость
Подскажи пожалуйста, как реализовать топ просмотров по внешним ссылкам в этом движке.
Алексей, 28 Декабря 2017 г. 11:53 пишет:
Автор
Доброго времени суток. Я так понял, что у Вас на сайте есть ссылка и Вам хочется посчитать сколько раз по ней тыкнули, я правильно понял?

Если да, то Вам нужно написать приблизительно такой скриптик (l.php)
<?php

// запись в БД о том что по ссылке $_GET['link'] был переход

// перенаправление на страницу $_GET['link']
header('location: ' . $_GET['link']);
ссылка должна выглядеть приблизительно так:
http://example.ru/l.php?link=http://rio-shaman.ru/
Ответ для пользователя: Павел
Павел, 28 Декабря 2017 г. 12:51 пишет:
Гость
// запись в БД о том что по ссылке $_GET['link'] был переход
.... как сделать запись в бд?
Ответ для пользователя: Алексей
Павел, 29 Декабря 2017 г. 04:26 пишет:
Гость
Все спасибо с БД я разобрался. Вопрос, как теперь выводить ссылки из БД, чем больше кликов, тем выше позиция?
Ответ для пользователя: Алексей
Алексей, 17 Января 2018 г. 15:08 пишет:
Автор
Доброго времени суток.
Если Ваша таблица в базе состоит из полей
  • ссылка
  • кол-во тыков
  • другие не очень важные поля
т.е. каждый раз когда кто-то тыкает на ссылку Вы отыскиваете эту ссылку в таблице и увеличиваете значение поля "кол-во тыков" на +1
то выборка будет приблизительно такой
select * from `таблица_с_ссылками` order by `поле_количество_тыков` desc
Такой запрос выведет ссылки отсортированные от большего к меньшему.
Ответ для пользователя: Павел