среда, 6 сентября 2017 г.

Laravel. Блог. Ссылки для категорий и тегов.

Сделаем ссылки для категорий и тегов.


Идем в \resources\views\user\post.blade.php
Для категорий:
<a href="">{{ $category->name }}</a>

Для тегов:
<a href=""><small class="pull-left" style="margin-right: 20px; border-radius: 5px; border: 1px solid gray; padding: 5px;">
{{ $tag->name }}
</small></a>

Создадим маршруты для ссылок. Идем в \routes\web.php
Route::group(['namespace' => 'User'], function() {
Route::get('/', 'HomeController@index');
Route::get('post/{post}', 'PostController@post')->name('post');

Route::get('post/tag/{tag}', 'HomeController@tag')->name('tag');
Route::get('post/category/{category}', 'HomeController@category')->name('category');

});

Идем в \resources\views\user\post.blade.php
Для категорий:
<a href="{{ route('category', $category->slug) }}">{{ $category->name }}</a>

Для тегов:
<a href="{{ route('tag',$tag->slug) }}"><small class="pull-left" style="margin-right: 20px; border-radius: 5px; border: 1px solid gray; padding: 5px;">
{{ $tag->name }}
</small></a>

Идем в \app\Http\Controllers\User\HomeController.php
public function category($slug) {
return $category = category::where('slug', $slug)->get();

}
}

Нажимаем и получаем массив: http://blog.my/post/category/category-2

Но напишем по-другому.

Идем в \app\Model\user\category.php
и
\app\Model\user\tag.php

public function getRouteKeyName() {
return 'slug';
}
}

Идем в \app\Http\Controllers\User\HomeController.php
public function category(category $category) {
return $category;
}

Теперь нажмем: http://blog.my/post/category/category-2
У нас возвратиться категория.

Создадим связь между постом и категорией. Сделаем пагинацию.
Пагинации не может быть в связи, только после связи. Поэтому идем в \app\Model\user\category.php
public function posts() {
return $this->belongsToMany('App\Model\user\post', 'category_posts')->paginate(2);
}

Идем в \app\Http\Controllers\User\HomeController.php
public function category(category $category) {
$posts = $category->posts();
return view('user.blog', compact('posts'));
}


Изменим сортировку \app\Model\user\category.php
public function posts() {
return $this->belongsToMany('App\Model\user\post', 'category_posts')->orderBy('created_at', 'DESC')->paginate(2);
}

\app\Model\user\tag.php
public function posts() {
return $this->belongsToMany('App\Model\user\post', 'post_tags')->orderBy('created_at', 'DESC')->paginate(2);
}

Идем в \app\Http\Controllers\User\HomeController.php
public function tag(tag $tag) {
$posts = $tag->posts();
return view('user.blog', compact('posts'));
}

Страница полностью:

<?php

namespace App\Http\Controllers\User;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Model\user\post;
use App\Model\user\category;
use App\Model\user\tag;

class HomeController extends Controller
{
public function index() {
$posts = post::where('status', 1)->orderBy('created_at', 'DESC')->paginate(2);
return view('user.blog', compact('posts'));
}

public function tag(tag $tag) {
$posts = $tag->posts();
return view('user.blog', compact('posts'));
}

public function category(category $category) {
$posts = $category->posts();
return view('user.blog', compact('posts'));
}
}

Комментариев нет:

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

Materialize-css. Футер

Сделаем футер и прижмем к низу страницы. Документация: https://materializecss.com/footer.html