В этой статье мы будем разбирать, как сделать счетчик просмотров по дням. Делать мы это будем на 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 Просмотров сегодня +1 26 июня 2017 команда сайта
Ещё пока нет комментариев, будь первым!
Оставить комментарий
→ Займы под залог недвижимости срочно за 1 день! ИП Блажевич Денис Викторович ИНН: 032602092643
Реклама Получите займ под залог без подтверждения доходов в день обращения. Самые выгодные условия. Любая кредитная история!
www.capitalinvestbv.ru
SEO продвижение ваших сайтов от 25 000 руб. в мес. Создание сайтов и мобильных приложений от 5 500 руб. Любой сложности!
Реклама Собственный фреймворк. Большие и сложные проекты. ТОП 100 разработчиков РФ.
irogex.ru
→ BULLET-SHOP - сварка аргоном, полуавтомат, тюнинг авто!
Реклама Ремонтируем радиаторы, интеркулеры, пайпинг и ВСЁ из алюминия, чугуна, стали с ГАРАНТИЕЙ КАЧЕСТВА. Диагностика и ремонт подвески, трансмиссии, всех узлов и агрегатов
www.bullet-shop.pro
Реклама помогает поддерживать
и развивать наш сервис.


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