Как на 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 Просмотров сегодня +2 26 июня 2017 команда сайта
Ещё пока нет комментариев, будь первым!
Оставить комментарий
   🔔 Отдохните не много, может Вам будет интересно прочитать статьи пользователей нашего сайта.

Тег a - это ссылка

Как редактировать и удалять новости на MVC и PHP

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

Как добавить свой сайт в поисковые системы GOOGLE и YANDEX

Основные запросы SQL работа с базой данных PHP

Тег b - это полужирный шрифт

Как проверить радио кнопку checkbox без перезагрузки страницы ajax php

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

Подключение к БД и вывод результата на PHP через PDO на MVC

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

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

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

Создание сайтов и мобильных приложений от 5 500 руб. Любой сложности!
Реклама Собственный фреймворк. Большие и сложные проекты. ТОП 100 разработчиков РФ.
Создание сайтов от 5 500 руб.
Мобильные приложения от 50 000 руб.
irogex.ru
Наши проекты Инстаграм от 6 500 руб.
Конструкторы Ugears купить в Иркутске от 690 руб. с Доставкой!
Реклама UGEARS это путешествие в удивительную атмосферу гармонии природы и совершенства конструкторской мысли
Конструктор Навигатор дат - 690 руб.
Конструктор Комбайн - 2990 руб.
ugears-irk.ru
Оплата и Доставка Контакты
Стоматология в Улан-Удэ | ДентаВита | Шок цены от 100 руб!
Реклама От всей нашей семьи хотим выразить огромную благодарность стоматологической клинике
Осмотр, консультация от 150 руб.
Рентгеновский снимок от 100 руб.
dentavita03.ru
Наши цены Отзывы
Реклама помогает поддерживать
и развивать наш сервис.


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