Счетчик просмотров страницы в Laravel

Добавлено: 05/11/2014 00:52 |  Обновлено: 02/08/2019 11:39 |  Добавил: nick |  Просмотры: 17606 Комментарии: 12
Вводная часть
Счетчик просмотров страницы в Laravel реализовать достаточно просто. Имеется ввиду простая функция подсчета количества загрузок страницы. В этом материале описывается реализация такой функции на примере простой заготовки сайта, созданной с нуля. Предполагается, что вы умеете загружать новый проект с ядром фреймворка на сервер и подключать к нему базу данных. Перед началом работы нужно будет это сделать, так как в материале это не описывается. Рассматриваются версии Laravel 4.2 и Laravel 5.4-5.8.

Содержание:

  1. Laravel 4.2
  2. Laravel 5.4-5.8

Laravel 4.2

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

Создадим миграцию для нашей таблицы, используя следующую команду:
php artisan migrate:make create_posts_table --create="posts"
Миграция будет помещена в папку app/database/migrations и будет содержать текущее время, которое позволяет библиотеке определять порядок применения миграций. Полное имя миграции будет таким: время_создания_create_posts_table.php.

Добавим несколько строк в файл миграции, в функцию "up", чтобы она выглядела следующим образом:
public function up()
{
  Schema::create('posts', function(Blueprint $table)
  {
    $table->increments('id');
    $table->string('title');
    $table->text('content');
    $table->integer('view_count')->default(0);
    $table->timestamps();
  });
}
Далее просто применим созданную миграцию, запустив команду:
php artisan migrate
После чего будет создана таблица с названием "posts". Как делается сидинг данных (seeding) в этой статье рассматривать не будем. Если вы об этом ничего не знаете, то можно просто вручную добавить новые строки в таблицу.

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

В первую очередь создадим простую модель "Post" в папке models, пример кода можно взять с сайта laravel.com, по адресу http://laravel.com/docs/4.2/eloquent. Конечный вариант модели будет выглядеть так:
<?php
//Файл: app/models/Post.php
class Post extends Eloquent {
  protected $table = 'posts';
}
Далее создадим заготовку контроллера с помощью команды:
php artisan controller:make PostController
После выполнения команды мы получим файл контроллера (PostController.php) в папке controllers. В файле будет куча методов, нужных для обработки и вывода данных(create, show, edit, update, и т.д.). Нам будет нужен только метод show для вывода единичной записи блога.

Откроем файл PostController.php и в секции функции "show($id)" добавим 2 строчки. Первая получает содержимое нужного нам поста из базы. Вторая передает это содержимое в вид. В итоге функция получится такой:
/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return Response
 */
public function show($id)
{
  $post = Post::find($id);
  return View::make('posts.show', compact('post'));
}
Далее пропишем маршрут в файле routes.php:
Route::resource('post', 'PostController');
И осталось нам еще создать вид. В контроллере мы указали "posts.show". То есть вид будет называться "show" и лежать в папке posts. Для чего мы должны ее создать в папке views, и назвать файл "show.blade.php". В нем мы просто выведем содержимое поста. Файл будет выглядеть следующим образом:
id: {{$post->id}}
<br>
Название поста: {{$post->title}}
<br>
Текст поста: {{$post->content}}
<br>
Количество просмотров: {{$post->view_count}}
<br>
Все. С подготовительной частью мы закончили. Можно перейти по адресу http://адрес_вашего_сайта/post/id_поста и на экран будет выведено содержимое записи блога с указанным id. Далее, наконец уже, реализуем сам подсчет просмотров страницы поста. Сделаем мы это с помощью системы событий. Документация об этом на английском языке есть на сайте фреймворка laravel.com, а русский вариант документации представлен на сайте laravel.ru.

Для начала откроем ранее созданный контроллер PostController.php, в секции функции "show" нужно добавить новую строку:
Event::fire('post.view', $post);
Окончательный вид функции будет таким:
/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return Response
 */
public function show($id)
{
  $post = Post::find($id);
  Event::fire('post.view', $post);
  return View::make('posts.show', compact('post'));
}
Добавленная строка отвечает за возбуждение события в данном месте. Обратите внимание, что строка события должна быть именно после получения данных из базы, то есть после строки $post = Post::find($id);

Теперь нужно создать файл events.php в папке приложения, он будет содержать код наблюдателя события, который после возбуждения события увеличит значение счетчика в базе данных на единицу. В итоге файл будет выглядеть так:
<?php
//Файл: app/events.php
Event::listen('post.view', function($post)
{
  $post->increment('view_count'); 
});
Но счетчик пока работать не будет так как его еще нужно подключить в файле global.php, в папке приложения (app/start/global.php). Открываем этот файл и инклудим в конец файла файл events.php. Добавить нужно следующий код:
/*
|--------------------------------------------------------------------------
| Require The Events File
|--------------------------------------------------------------------------
*/
require app_path().'/events.php';
Все, теперь можно попробовать поперезагружать страницу с любым постом из блога, в результате число в строке "Количество просмотров" должно инкрементироваться.
К содержанию

Оставьте свой комментарий

Комментарии