воскресенье, 2 июля 2017 г.

LARAVEL. ШАБЛОНИЗАТОР BLADE. ЧАСТЬ 2

Открываем IndexController.php и добавим туда массив переменных:


<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class IndexController extends Controller
{
public function show() {

$array = array(

'title'=>'Laravel Project',
'data' =>[
'one' => 'List 1',
'two' => 'List 2',
'three' => 'List 3',
'four' => 'List 4',
'five' => 'List 5'
],
'dataI' =>['List 1','List 2','List 3','List 4','List 5'],

'bvar' => true,
'script' =>"<script>alert('hello')</script>"

);

if(view()->exists('default.index')) {
return view('default.index', $array);
}
abort(404);
}
}


Открываем layout.blade.php
И отображаем передаваемые переменные: <h1>{{ $title }}</h1>

Мы можем использовать стандартные функции PHP.
<h1>{{ date('Y.m.d', time()) }}</h1>

<ul class="nav navbar-nav">
<li class="active"><a href="{{ route('home') }}">Home</a></li>
<li><a href="{{ route('about') }}">About</a></li>
<li><a href="{{ route('articles') }}">Articles</a></li>
<li><a href="{{ route('article',array('id'=>10)) }}">Article</a></li>
</ul>

Открываем content.blade.php
Передаваемые переменные будут доступны и в дочерних шаблонах и в файлах подключаемых через include
Все передаваемые переменные обрабатываются шаблонизатором blade htmlentities в html-сущности.
Чтобы отключить данную возможность и передать, например, скрипт нужно использовать:
{{!! $script !!}}

Чтобы что-то не учитывать шаблонизатором blade, нужно написать символ собаки: @{{ var }}
Мы можем использовать различные управляющие конструкции PHP.
{{ isset($bvar) ? $bvar : $title}}
Аналог данной записи: {{ $bvar or $title}}

Формирование условных операторов:
@if(count($data) > 3)
В массиве больше 3 элементов
@endif

или

@if(count($data) < 3)
В массиве меньше 3 элементов
@else
В массиве больше 3 элементов
@endif

или

@if(count($data) < 3)
В массиве меньше 3 элементов
@elseif(count($data) > 10)
В массиве больше 10 элементов
@else
В массиве неизвестное кол-во элементов
@endif

Оператор for
Пройдемся по массиву и выведем его:
<ul>
@for($i = 0; $i < count($dataI); $i++)
<li>{{ $dataI[$i] }}</li>
@endfor
</ul>

Оператор foreach
<ul>
@foreach($data as $k=>$value)
<li>{{ $k.'=>'.$value }}</li>
@endforeach
</ul>


Оператор forelse – его работа аналогична циклу foreach и поддерживает дополнительную возможность.
Если в массиве есть передаваемые ячейки, то его работа аналогична оператору foreach.
Если массив пуст, значит отработает содержимое директории empty
Не нужно прописывать проверку.
<ul>
@forelse($data as $k=>$value)
<li>{{ $k.'=>'.$value }}</li>
@empty
<p>No items</p>
@endforelse
</ul>

Оператор while
@while(FALSE)
I'm looping forever.
@endwhile

Директива each.

@each('default.list', $dataI, 'value')

Создадим вид: list.blade.php в папке default.

В качестве первого параметра принимает имя вида, а второго — массив с данными, которые будут передаваться в вид, третий — имя переменной для передачи данных.

Директива обходит при помощи цикла содержимое массива, который передается при помощи второго параметра и на каждой итерации цикла содержимое ячеек массива попадает в переменную value.

В list.blade.php:
include
<li>{{ $value }}</li>

Выводит:

В массиве неизвестное кол-во элементов

List 1
List 2
List 3
List 4
List 5

one=>List 1
two=>List 2
three=>List 3
four=>List 4
five=>List 5

one=>List 1
two=>List 2
three=>List 3
four=>List 4
five=>List 5

include
List 1
include
List 2
include
List 3
include
List 4
include
List 5

Создание собственной директивы или инструкции
Создадим собственную директиву. Откроем файл App\Providers\AppServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Blade;

class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
Blade::directive('myDir', function($var) {
return "<h1>New Directive - $var</h1>";
});
}


/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}

В шаблоне, где необходимо использовать данную директиву обращаемся к ней: @myDir('hello')


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

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

Materialize-css. Футер

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