Действия пользователя. Часть 3
Продолжим работу с профилем пользователя. На данный момент у нас там выводятся записи о сообщениях пользователя и об опубликованных им новых темах. Добавим к этому также записи о сообщениях, за которые пользователь проголосовал.
Первым делом нам нужно включить трейт RecordsActivity в модель Favorite. Добавляемая строчка выделена жирным шрифтом.
class Favorite extends Model
{
use RecordsActivity;
…
}
После чего все модели проекта будут составлять следующую структуру:
Теперь мы сможем отслеживать момент добавления голоса за сообщение и сохранять запись об этом событии в таблице activities.
Также в этот же файл добавим следующий код:
/* Полиморфное отношение – получаем сообщение, за которое был отдан голос */
public function favorited()
{
return $this->morphTo();
}
Далее отредактируем файл модели Reply. Добавим в него следующее содержимое:
public function path()
{
return $this->thread->path() . "#reply-{$this->id}";
}
Данный путь в виде ссылки будет вести со страницы профиля пользователя на страницу темы форума, при этом браузер будет автоматически переходить к нужному сообщению благодаря использованию якоря.
Модифицируем html-код в файле reply.blade.php (папка resources/views/threads/). Заменим строку:
<div class="panel panel-default">
на следующую:
<div id="reply-{{ $reply->id }}" class="panel panel-default">
Далее создадим вид для вывода списка сообщений, за которые проголосовал пользователь. Файл будет называться created_favorite.blade.php (папка resources/views/profiles/activities/). Его содержимое должно быть следующим:
@component('profiles.activities.activity')
@slot('heading')
<span class="flex">
{{ $profileUser->name }} проголосовал за
<a href="{{ $activity->subject->favorited->path() }}"> сообщение</a>
</span>
<span>{{ $activity->subject->created_at->format('d-m-Y | H:i:s') }}</span>
@endslot
@slot('body')
{{ $activity->subject->favorited->body }}
@endslot
@endcomponent
Здесь мы используем Blade-директиву @component. Поэтому содержимое этого вида включается в отдельный компонент, в нашем случае profiles.activities.activity, который мы создали в предыдущем разделе этого материала (Действия пользователя. Часть 2).
Последнее, что мы сделаем, это немного модифицируем файл для вида профиля пользователя show.blade.php (папка resources/views/profiles/). Найдите строчку
@include ("profiles.activities.{$record->type}", ['activity' => $record])
и замените ее следующим кодом:
@if (view()->exists("profiles.activities.{$record->type}"))
@include ("profiles.activities.{$record->type}", ['activity' => $record])
@endif
На этом все, теперь страница профиля пользователя должна выглядеть следующим образом: