Введение в шаблоны
Во Flute существует система шаблонизации. Это значит, что движок может иметь несколько установленных тем, и переключаться между ними.
Основная структура шаблона
Все шаблоны должны находиться в папке app/Themes/
. Пример структуры шаблона:
├── assets
│ ├── img
│ ├── js
│ └── styles
│ ├── base
│ ├── components
│ ├── layouts
│ ├── pages
│ │ ├── lk
│ │ ├── profile_edit
│ ├── utils
│ └── main.scss
├── components
├── errors
├── i18n
│ └── ru
│ └── t_standard.php
├── other
├── pages
│ ├── lk
│ ├── profile
├── layout.blade.php
└── ThemeLoader.php
Каждый шаблон не имеет какой-то строгой структуры, но существует некоторый свод правил, которому должны придерживаться все шаблоны:
- Название шаблона (оно же название папки) должно быть уникальным!
- В каждом шаблоне обязательно должен существовать файл
layout.blade.php
иThemeLoader.php
- Файлы в папке
pages
должны соответствовать стандартному шаблону. Название этих файлов нельзя менять!
Про ThemeLoader
ThemeLoader - Это класс, который позволяет инициализировать наш шаблон внутри системы.
Так как в качестве шаблонизатора используется библиотека BladeOne, то основные функции и возможности оттуда доступны в движке.
Пример ThemeLoader
:
<?php
namespace Flute\Themes\standard;
use Flute\Core\Support\AbstractThemeLoader;
class ThemeLoader extends AbstractThemeLoader
{
public function __construct()
{
$this->createTheme();
}
public function register(\Flute\Core\Template\Template $templateService)
{
}
protected function createTheme()
{
$this->setKey("standard");
$this->setName("Flute Standard");
$this->setAuthor("Flames");
$this->setDescription("Просто стандартный шаблон на Flute");
$this->setVersion("1.1");
}
}
Как вы видите, в самом инициализаторе указывается ключ, название шаблона, автор и так далее.
Шаблон должен наследоваться от класса AbstractThemeLoader
Чтобы узнать подробнее про загрузчик, вы можете почитать тут
Подробнее про layout
В самом корне шаблона, должен существовать файл layout.blade.php
. Этот файл отвечает за подгрузку и настройку всех основных компонентов системы.
layout
и другие шаблоны используют функции @push
и @stack
.
@stack
- служит для вывода кода, который был инциализирован внутри @push
@push
- позволяет вносить данные внутри @stack
неограниченное количество раз
Пример структуры layout.blade.php
<!DOCTYPE html>
<html lang="{{ app()->getLang() }}" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="icon" type="image/x-icon" href="@asset('favicon.ico')">
<title>@yield('title', page()->title)</title>
<meta name="csrf-token" content="{{ csrf_token() }}">
<meta name="description" content="{{ page()->description }}">
<meta name="keywords" content="{{ page()->keywords }}">
<meta name="robots" content="{{ page()->robots }}">
<meta property="og:title" content="{{ page()->og_title }}">
<meta property="og:description" content="{{ page()->og_description }}">
<meta property="og:image" content="{{ page()->og_image }}">
<link rel='stylesheet' href='@asset('montserrat')' type='text/css'>
<link rel='stylesheet' href='@asset('sfpro')' type='text/css'>
<link rel="stylesheet" href="@asset('animate')" type='text/css'>
<link rel="stylesheet" href="@asset('grid')" type='text/css'>
<link rel="stylesheet" href="@asset('assets/css/libs/driver.css')">
<script src="@asset('phosphor')"></script>
@at(tt('assets/styles/main.scss'))
@stack('header')
</head>
<body>
<main>
@stack('content')
</main>
<footer>
<script src="@asset('jquery')"></script>
<script src="@asset('assets/js/sweetalert.js')"></script>
<script src="@asset('assets/js/driver.js')"></script>
<script src="@asset('assets/js/forms.js')"></script>
<script src="@asset('assets/js/app.js')"></script>
@at(tt('assets/js/modal.js'))
@at(tt('assets/js/template.js'))
@stack('footer')
</footer>
<div class="toast-container">
@stack('toast-container')
</div>
</body>
</html>
В движке безусловно существуют основные stack
для заполнения контента. Если вы не кординально меняете шаблон, советую оставить их названия теми же.
Про доп.функции
Если вы внимательно смотрели пример layout
, то могли заметить, что там используется функция @asset
и @at
.
Предлагаю кратенько углубиться в смысл разделения:
Весь движок работает в папке public/
. Это значит, что все стили и скрипты будут браться именно оттуда.
@asset
добавит URL сайта к указанному в аргументе пути. Будет http://site.com/{путь}
@at
перенесет и минимизирует указанный в аргументе файл, и отдаст готовый путь. Вам лишь нужно указать полный путь до файла css / js
@at
так же применим к картинкам, и может автоматически конвертировать картинки в формат webp
Так же вы могли заметить функцию tt
. Эта функция будет возвращать полный путь до активного на данный момент шаблона.
К слову mm(string $moduleName, string $path)
вернет путь до модуля