Как на MVC с помощью PHP и MySQL создать счетчик просмотров страниц


X

Как на MVC с помощью PHP и MySQL создать счетчик просмотров страниц

В этой статье мы будем разбирать, как сделать счетчик просмотров по дням. Делать мы это будем на MVC при помощи MySQL и PHP, приступим.

Для начала создаем таблицу в базе данных, в которой будут храниться просмотры наших страниц. Она будет содержать поля: id – id записи, является ключевым полем; see – количество просмотров; id_art – id страницы для которой будем считать просмотры и date – дата. Выглядеть она будет вот так:

Теперь зайдем в папку models и откроем файл Page.php. В нем нам нужно написать следующие функции:

Для начала напишем функцию, которая будет определять текущую дату.  С помощью функции date получаем текущую дату и время через пробел, записываем все это в переменную date_time_string.

Далее разбиваем переменную date_time_string через пробел и берем первую ее часть – в ней лежит наша дата. Разбиваем дату через точки и получаем в массив с датой, месяцем и годом. Все эти элементы мы через точку записываем в аргументы функции trim, она нужна, чтобы удалить пробелы в начале и конце предложения. Полученный результат записываем в переменную date.

public static function dateToday(){
    $date_time_string = date('d.m.Y');
    $dt_elements = explode(' ',$date_time_string);
    $date_elements = explode('.',$dt_elements[0]);
    $date = trim($date_elements[0].'.'.$date_elements[1].'.'.$date_elements[2]);
    return $date;
}

 

Функция checkSeeArticle. Эта функция проверяет, существует ли в базе данных запись с просмотрами на сегодняшнюю дату, если да, то возвращает true иначе false. В качестве аргументов принимает id страницы и текущую дату:

    public static function checkSeeArticle($id, $date) 
    {
        $db = Db::getConnection();
        $sql = 'SELECT * FROM counter_article WHERE id_art= :id_art AND date= :date';
        $result = $db->prepare($sql);
        $result->bindParam(':id_art', $id, PDO::PARAM_INT);
        $result->bindParam(':date', $date, PDO::PARAM_STR);
        $result->execute();
        $art = $result->fetch();
        if ($art) return true;
        else return false;
    }

 

Функция viewsSeeTodayArticle. Функция возвращает количество просмотров по текущей дате. В качестве аргументов принимает id страницы и текущую дату:

public static function viewsSeeTodayArticle($id,$date) 
{
    $db = Db::getConnection();
    $result = $db->prepare('SELECT see FROM counter_article WHERE id_art= :id_art AND date= :date');
    $result->bindParam(':id_art', $id, PDO::PARAM_INT);
    $result->bindParam(':date', $date, PDO::PARAM_STR);
    $result->execute();
    $see = $result->fetchColumn();
    return $see;
}

 

Функция viewsSeeAllArticle. Эта функция в SQL запросе считает общее количество просмотров страницы. В качестве аргумента принимает id страницы:

public static function viewsSeeAllArticle($id) {
    // Сумма всех ячеек с предварительным условием PDO
    $db = Db::getConnection();
    $result = $db->prepare('SELECT sum(see) FROM counter_article WHERE id_art= :id_art');
    $result->bindParam(':id_art', $id, PDO::PARAM_INT);
    $result->execute();
    $all = $result->fetchColumn();
    return $all;
}

 

Функция counterArticle. Эта функция принимает id страницы, его она записывает в переменную id_art. Потом с помощью функции dateToday получает текущую дату.  В переменную check получаем true или flase (есть запись по просмотрам страницы на сегодня или нет):

public static function counterArticle($id) {
    $id_art = $id;
    $date = self::dateToday();
    $check = self::checkSeeArticle($id, $date);

 

Если в записи о просмотрах на сегодня нет, то создаем новую запись с помощью просто SQL запроса:

    if (!$check)
    {
        $db = Db::getConnection();
        $see = 1;
        $sql = 'INSERT INTO counter_article (see, id_art, date) VALUES (:see, :id_art, :date)';
        $result = $db->prepare($sql);
        $result->bindParam(':see', $see, PDO::PARAM_INT);
        $result->bindParam(':id_art', $id_art, PDO::PARAM_INT);
        $result->bindParam(':date', $date, PDO::PARAM_STR);
        return $result->execute();
    }

 

Иначе, если запись на текущую дату уже имеется в нашей таблице, то с помощью SQL запроса прибавляем количество просмотров на единицу:

    else 
    {
        $db = Db::getConnection();
        $sql = "UPDATE counter_article SET see = `see` + 1 WHERE id_art =:id_art AND date =:date";
        $result = $db->prepare($sql);
        $result->bindParam(':id_art', $id_art, PDO::PARAM_INT);
        $result->bindParam(':date', $date, PDO::PARAM_STR);
        return $result->execute();
    }
}

 

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

$page_content = 2;
Page::counterArticle($page_content);
$all = Page::viewsSeeAllArticle($page_content);
$date = Page::dateToday();
$see = Page::viewsSeeTodayArticle($page_content, $date);

 

В каждом методе отрисовки нам нужно задавать id страницы. Своей странице я задал id равный двум. При загрузке страницы с помощью второй строчки будет прибавляться один просмотр. В переменную all с помощью функции viewsSeeAllArticle получаем общее количество просмотров страницы за все время.

Далее получаем текущую дату и с помощью функции viewsSeeTodayArticle, в переменную see получаем количество просмотров, которые были совершены сегодня.

На самой странице можно выводить просмотры, используя простую PHP конструкцию:

<?php
    echo 'Общее количество просмотров этой страницы: '.$all.<br>;
    echo 'Количество просмотров за сегодня: '.$see;
?>

Выглядеть это будет вот так:

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

Grai Просмотров сегодня +4 26 июня 2017 команда сайта
Ещё пока нет комментариев, будь первым!
Оставить комментарий
   🔔 Отдохните не много, может Вам будет интересно прочитать статьи пользователей нашего сайта.

Работа с БД на MVC создание модели и выполнение SQL запросов. Часть Вторая

Как сделать алгоритм поиска по нескольким словам на PHP из БД

Тег article - это статья

Тег datalist - это список возможных вариантов

Как разрезать изображение на части и склеить обратно из фрагментов, используя PHP и Ajax

Решил и я написать статью о том, как покупал сайт на бирже ТЕЛДЕРИ

Как узнать ID последней вставленной записи

Тег acronym - это акроним

Тег abbr - это аббревиатура

Как на MVC с помощью PHP загружать изображения на сервер

Создание профиля или личного кабинета пользователя на MVC, PHP и SQL

Как создать свою CMS или фреймворк на MVC. Часть Первая

Создание сайтов и мобильных приложений | Любой сложности | Android, iOS, AR, VR
Реклама Собственный фреймворк. Большие и сложные проекты. ТОП 100 разработчиков РФ.
Создание сайтов от 5 000 руб.
Мобильные приложения от 50 000 руб.
irogex.ru
Наши проекты Контакты
Реклама помогает поддерживать
и развивать наш сервис.


Подробнее
(ссылка откроется в новой вкладке)
  Реклама