понедельник, 4 сентября 2017 г.

Laravel. Блог. Делаем пользовательскую часть

Установим через cdn полную версию текстового редактора ckeditor.

Выберем CKEditor CDN.

То есть: <script src="//cdn.ckeditor.com/4.7.2/full/ckeditor.js"></script>

Заменим в edit.blade.php и post.blade.php ссылку <script src="{{ asset('admin/bower_components/ckeditor/ckeditor.js') }}"></script>
на новую
<script src="{{ asset('//cdn.ckeditor.com/4.7.2/full/ckeditor.js') }}"></script>

Начнем менять пользовательскую часть сайта.
Идем в \resources\views\user\post.blade.php

Выведем текст по адресу: http://blog.my/post

Откроем маршрут, чтобы вывести пост со слагом в адресной строке:
\routes\web.php

Route::group(['namespace' => 'User'], function() {
Route::get('/', 'HomeController@index');
Route::get('post/{post}', 'PostController@post')->name('post');
});

Идем в модель постов по адресу: \app\Model\user\post.php и создадим там функцию:
public function getRouteKeyName() {
return 'slug';
}
}

Откроем контроллер \app\Http\Controllers\User\PostController.php

<?php

namespace App\Http\Controllers\User;

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

class PostController extends Controller
{
// используем модель post
public function post(post $
post) {
return $
post;
return view('user.post');
}

}

Если мы наберем в адресной строке http://blog.my/post/bitfumes-post У нас откроется данный пост.
Перепишем функцию, передадим слаг в шаблон.
// используем модель post
public function post(post $
post) {
return view('user.post', compact('
post'));
}

Идем в \resources\views\user\post.blade.php
@extends('user/app')

@section('bg-img', asset('user/img/post-bg.jpg'))
@section('title', 'Bitfumes Post')
@section('sub-heading', 'Learn together and grow together')

@section('main-content')
<!-- Post Content -->
<article>
<div class="container">
<div class="row">
<div class="col-lg-8 col-md-10 mx-auto">
{{ $post->body }}
</div>
</div>
</div>
</article>

<hr>
@endsection

У нас выводится текст с тегами, как они есть.
Для этого нам не нужно экранировать вывод.
Если вы не хотите экранировать данные, используйте такой синтаксис:
Hello, {!! $name !!}.

<div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offet-1">
{!! htmlspecialchars_decode($post->body) !!}
</div>

Выведем заголовок и остальное.
@extends('user/app')

@section('bg-img', asset('user/img/post-bg.jpg'))
@section('title', $post->title)
@section('sub-heading', $post->subtitle)

@section('main-content')
<!-- Post Content -->
<article>
<div class="container">
<div class="row">
<div class="col-lg-12">
<small>Created at {{ $post->created_at->diffForHumans() }}</small>
@foreach ($post->categories as $category)
<small class="pull-right" style="margin-right: 20px;">
{{ $category->name }}
</small>
@endforeach
{!! htmlspecialchars_decode($post->body) !!}
<h3>Tag Clouds</h3>
@foreach ($post->tags as $tag)
<small class="pull-left" style="margin-right: 20px; border-radius: 5px; border: 1px solid gray; padding: 5px;">
{{ $tag->name }}
</small>
@endforeach
</div>
</div>
</div>
</article>

<hr>
@endsection


Идем в \routes\web.php
Route::group(['namespace' => 'User'], function() {
Route::get('/', 'HomeController@index');
Route::get('post/{post?}', 'PostController@post')->name('post');
});

? означает, что post не обязателен.
Теперь мы можем открыть главную страницу: http://blog.my/

Откроем контроллер \app\Http\Controllers\User\HomeController.php

<?php

namespace App\Http\Controllers\User;

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

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


Идем в \resources\views\user\blog.blade.php
@extends('user/app')

@section('bg-img', asset('user/img/home-bg.jpg'))
@section('title', 'Bitfumes blog')
@section('sub-heading', 'Learn together and grow together')

@section('main-content')
<!-- Main Content -->
<div class="container">
<div class="row">
<div class="col-lg-8 col-md-10 mx-auto">
<div class="post-preview">
@foreach ($posts as $post)
<a href="{{ route('post', $post->slug) }}">
<h2 class="post-title">
{{ $post->title }}
</h2>
<h3 class="post-subtitle">
{{ $post->subtitle }}
</h3>
</a>
<p class="post-meta">Posted by
<a href="#">Start Bootstrap</a>
{{ $post->created_at->diffForHumans() }}</p>
</div>
@endforeach
<hr>
<!-- Pager -->
<div class="clearfix">
<a class="btn btn-secondary float-right" href="#">Older Posts &rarr;</a>
</div>
</div>
</div>
</div>

<hr>
@endsection

Идем в \routes\web.php и удалим знак вопроса

Route::group(['namespace' => 'User'], function() {
Route::get('/', 'HomeController@index');
Route::get('post/{post}', 'PostController@post')->name('post');
});

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

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

Materialize-css. Футер

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