Мне интересно, как вы создаете счетчик просмотров страницы в Laravel 5. Есть ли какой-то конкретный пакет, который поможет мне с этим? Я в основном застрял, так как недавно была выпущена стабильная версия Laravel 5.Page View Counter в Laravel 5
ответ
Если вы хотите построить это самостоятельно, это будет довольно легко.
Создание нового промежуточного программного 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 сохранять его на постоянное хранение один раз в час. Просто чтобы ограничить производительность при сохранении просмотров страниц.
Этот пакет является удивительным и прост в использовании, я был получить тот же вопрос, но я нашел этот пакет разрешающих Kryptonit3/Counter
Ссылка на потенциальное решение всегда приветствуется, но, пожалуйста, [добавьте контекст вокруг ссылки] (http://meta.stackoverflow.com/a/8259/169503), чтобы у ваших друзей-пользователей было некоторое представление о том, что это такое и почему Это здесь. Всегда указывайте наиболее значимую часть важной ссылки, если целевой сайт недоступен или постоянно находится в автономном режиме. Примите во внимание, что быть более чем ссылкой на внешний сайт_ является возможной причиной [Почему и как удаляются некоторые ответы?] (Http://stackoverflow.com/help/deleted-answers). – Tunaki
Есть много способов сделать это. Но каждый способ получил свои преимущества и недостатки. В этом ответе я расскажу вам несколько разных способов создания счетчика просмотров страницы.
# 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 просмотров. Если вам нужна новая функция, просто создайте проблему или если вы хотите внести свой вклад, свяжитесь со мной.
- 1. Page View Counter Account
- 2. Php mysql page view counter
- 3. Page View Counter like on StackOverFlow
- 4. Page-view-counter с Rails и Memcached
- 5. Laravel 5 blank page
- 6. Laravel 5: blank page
- 7. PHP view view counter
- 8. Laravel 5 get view name
- 9. Laravel 5, View :: Share
- 10. Laravel 5 view caching
- 11. Redis page counter
- 12. Blog page hit counter
- 13. Page View Counter - Настройка базы данных и техника/стратегия
- 14. page view counter, код предоставляется, это лучший способ?
- 15. PHP View Counter
- 16. Laravel 5 view не найден
- 17. Laravel 5 Array to View
- 18. Django View Counter
- 19. RESTful view counter
- 20. Laravel 5 & AngularJS ng-view issue
- 21. Laravel 5 - Загрузить файл Excel View
- 22. Render view from path Laravel 5
- 23. Как сделать laravel 5 view composer
- 24. Laravel 5: change auth/register view
- 25. Laravel 5 Excel Import to View
- 26. Laravel 5 Password Reset with Angular View
- 27. Laravel 5 preend to parent view section
- 28. laravel 5 html to pdf view issue
- 29. Laravel 5 - View [главная] не найден
- 30. Laravel 5 триггера модальный in view условно
Я не думаю, что у laravel есть что-то для этого. Это хороший пример http://codebase.eu/source/code-php/ip-counter/. –
такой функции нет в Laravel. – astroanu