2015-02-22 2 views
-1

Мне интересно, как вы создаете счетчик просмотров страницы в Laravel 5. Есть ли какой-то конкретный пакет, который поможет мне с этим? Я в основном застрял, так как недавно была выпущена стабильная версия Laravel 5.Page View Counter в Laravel 5

+0

Я не думаю, что у laravel есть что-то для этого. Это хороший пример http://codebase.eu/source/code-php/ip-counter/. –

+0

такой функции нет в Laravel. – astroanu

ответ

0

Если вы хотите построить это самостоятельно, это будет довольно легко.

Создание нового промежуточного программного app/Htpp/Middleware/PageViews.php:

<?php 

namespace App\Http\Middleware; 

use Closure; 

class PageViews 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @param string|null $guard 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     PageView::increment(); 

     return $next($request); 
    } 

} 

Теперь добавьте \App\Http\Middleware\PageViews::class в $ промежуточного имущества вашего приложения/Http/Kernel.php класса.

Очевидно, что я поставил в PageView :: increment(), который не будет работать, потому что PageView не реализован. Самый простой способ реализовать для вас, вероятно, создать таблицу с int для просмотров страниц и создать модель PageView.

Более совершенным решением было бы хранить это в кеше и с заданием cron сохранять его на постоянное хранение один раз в час. Просто чтобы ограничить производительность при сохранении просмотров страниц.

0

Этот пакет является удивительным и прост в использовании, я был получить тот же вопрос, но я нашел этот пакет разрешающих Kryptonit3/Counter

+0

Ссылка на потенциальное решение всегда приветствуется, но, пожалуйста, [добавьте контекст вокруг ссылки] (http://meta.stackoverflow.com/a/8259/169503), чтобы у ваших друзей-пользователей было некоторое представление о том, что это такое и почему Это здесь. Всегда указывайте наиболее значимую часть важной ссылки, если целевой сайт недоступен или постоянно находится в автономном режиме. Примите во внимание, что быть более чем ссылкой на внешний сайт_ является возможной причиной [Почему и как удаляются некоторые ответы?] (Http://stackoverflow.com/help/deleted-answers). – Tunaki

2

Есть много способов сделать это. Но каждый способ получил свои преимущества и недостатки. В этом ответе я расскажу вам несколько разных способов создания счетчика просмотров страницы.

# 1 Простой столбец в таблице

базы данных Допустим, мы строим блог с постов, и мы хотим показать отсчитывать Всего просмотров. Что мы можем сделать, это добавить столбец views или page_views. Каждый раз, когда мы показали бы пост с контроллером, мы могли бы сделать следующее:

public function show($id) 
{ 
    $post = \App\Models\Post::find($id); // finding the post 
    $post->increment('views'); // or 'page_views'` 

    return view('posts.show', [ 
     'post' => $post, 
    ]); 
} 

Затем внутри вашего зрения (лопастной или PHP), вы могли бы получить колонку, как это;

<div class="panel-footer"> 
    Views: {{ $post->views }} 
</div> 

Но таким образом мы никогда не увидим, когда люди просмотрят сообщение. Это позволит получить общее количество, а не общее количество просмотров за последние 24 часа, 7 дней, 14 недель или «12-01-2017».

# 2 Дополнительные таблицы для хранения всех мнений

Этот путь очень отличается от пути # 1. Поскольку каждый просмотр/посещение будет храниться в виде строки в таблице.

Прежде чем писать шаги, я хочу сообщить вам, что я создал пакет под названием: Laravel Page Visits Counter. Он работает точно так же, как и # 2. В настоящее время он разрабатывается, но начальная версия: v.0.1.0 выпущена вчера. Вы можете взглянуть и проверить его. Но я предлагаю вам не использовать его в производстве, потому что в ближайшие недели он получит множество обновлений. Версия 1.0.0 будет достаточно стабильной и готова к производству.

Сначала нужно создать таблицу с именем views с:

$table->increments('id')->unsigned(); // not necessary 
$table->bigInteger('viewable_id')->unsigned(); // the id of the viewable model 
$table->string('viewable_type'); 
$table->timestamps(); 

Затем создать модель, в которой мы можем получить вид из:

<?php 

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 

class PageView extends Model 
{ 
    protected $table = 'views'; 
    protected $guarded = ['id']; 
} 

Затем добавить к каждой модели, которые могут быть просмотрены или нуждается в этом функциональности следующий код. В этом примере мы предоставляем функциональность модели Post.

<?php 

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 
use Carbon\Carbon; 

class Post extends Model 
{ 
    /** 
    * Adding attributes for retrieving the pagevies of the model. 
    * 
    * @var array 
    */ 
    protected function getArrayableAppends() 
    { 
     $this->appends = array_unique(array_merge($this->appends, [ 
      'total_visits_count', 
      'last_24h_visits_count', 
      'last_7d_visits_count', 
     ])); 
     return parent::getArrayableAppends(); 
    } 

    /** 
    * Get the page views associated with the given model. 
    * 
    * @return \Illuminate\Database\Eloquent\Relations\MorphMany 
    */ 
    public function views() 
    { 
     return $this->morphMany(
      \App\Models\PageView::class, 
      'viewable' 
     ); 
    } 

    /** 
    * Count all page visits together of the model. 
    * 
    * @return int 
    */ 
    public function getTotalViewsCountAttribute() 
    { 
     return $this->views()->count(); 
    } 

    public function getLast24hViewsCountAttribute() 
    { 
     return $this->views()->where('created_at', Carbon::now()->subHours(24))->count(); 
    } 

    public function getLast7dViewsCountAttribute() 
    { 
     return $this->views()->where('created_at', Carbon::now()->subDays(7))->count(); 
    } 
} 

Нет, вы можете использовать следующие атрибуты для повторного просмотра просмотров страниц.

// total count 
$post->total_views_count 

// total count from past 24 hours 
$post->last_24h_views_count 

// total count from past 7 days 
$post->last_7d_views_count 

Как вы можете видеть, это много повторяющегося кода. My package обеспечивают элегантный способ обработки. Он также предоставляет отформатированное число, например: 120 000 просмотров вместо 120000 просмотров. Если вам нужна новая функция, просто создайте проблему или если вы хотите внести свой вклад, свяжитесь со мной.