В этом руководстве мы добавляем шаблон панели инструментов vali-admin в приложение Buffalo.

Настройка проекта Buffalo

1. Перейдите к своему $GOPATH

cd $GOPATH/src/github.com/$USER/

2. Создайте новый проект Buffalo.

buffalo new valibuffalo

3. Измените каталог проекта.

cd valibuffalo

4. Создайте базу данных для проекта.

buffalo db create — env development

5. Сделайте пробный запуск

buffalo dev

и перейдите на localhost: 3000 /

Подготовьте файлы шаблонов панели инструментов vali-admin

1. Перейдите на страницу vali-admin Github

2. Нажмите кнопку Клонировать или загрузить.

3. Нажмите кнопку Загрузить ZIP, чтобы загрузить сжатые исходные файлы.

4. Извлеките загруженный zip-файл в любую папку по вашему выбору.

5. Из извлеченной папки скопируйте все файлы html из папки docs в папку templates проекта. Обязательно замените существующий index.html.

6. Скопируйте /docs/css/main.css в ./assets/css/main.css.

7. Скопируйте /docs/js/main.js в ./assets/js/main.js.

Обновите application.scss

1. Откройте assets / css / application.scss и закомментируйте строку импорта начальной загрузки.

2. Добавьте @import “./main.css”; под font-awesome.css.

По завершении файл должен иметь следующее содержимое:

// File: assets/css/application.scss
// @import “~bootstrap/scss/bootstrap.scss”;
@import “~font-awesome/css/font-awesome.css”;
@import “./main.css”;

Обновите application.js

1. Откройте assets / js / application.js и вставьте require(“./main.js”); под require(“bootstrap/dist/js/bootstrap.bundle.js”);.

После того, как вы выполнили вышеуказанный шаг, содержимое файла должно быть примерно таким:

// File: assets/js/application.js
require(“expose-loader?$!expose-loader?jQuery!jquery”);
require(“bootstrap/dist/js/bootstrap.bundle.js”);
require(“./main.js”);
$(() => {
});

Обновите templates / index.html

1. Откройте templates / index.html и удалите открывающие теги <!DOCTYPE html> и <html lang=”en”> и все содержимое в разделе <head>. Также удалите открывающий тег <body class=”app sidebar-mini rtl”>

2. Прокрутите страницу вниз и удалите следующие строки под тегом </main>.

<! — Essential javascripts for application to work →
<script src=”js/jquery-3.2.1.min.js”></script>
<script src=”js/popper.min.js”></script>
<script src=”js/bootstrap.min.js”></script>
<script src=”js/main.js”></script>
<! — The javascript plugin to display page loading on top →
<script src=”js/plugins/pace.min.js”></script>
<! — Page specific javascripts →
<script type=”text/javascript” src=”js/plugins/chart.js”></script>

3. Переместитесь вниз по странице и удалите скрипт Google Analytics над тегом </body>. Мы сохраняем скрипт данных диаграмм, так как он нам понадобится по мере продолжения.

4. Прокрутите вниз и удалите теги </body> и </html>closing.

5. Откройте templates / application.html и замените открывающий тег <body> на <body class=”app sidebar-mini rtl”>.

Первый тематический тест

Из Терминала запустите

buffalo dev

и перейдите на localhost: 3000 /

Переместить верхний заголовок Nav в отдельный файл

1. Создайте частичный файл _app-header-nav.html в папке шаблонов.

2. Переместите содержимое <header> в index.htnl, начиная с <header class=”app-header”><a class=”app-header__logo” href=”index.html”>Vali</a> и заканчивая <\header>, в _app-header-nav.html. После этого шага ваше содержимое _app-header-nav.html должно напоминать следующий отрывок.

<! — Navbar →
<header class=”app-header”><a class=”app-header__logo” href=”index.html”>Vali</a>
<! — Sidebar toggle button →
<a class=”app-sidebar__toggle” href=”#” data-toggle=”sidebar” aria-label=”Hide Sidebar”></a>
<! — Navbar Right Menu →
<ul class=”app-nav”>
<li class=”app-search”>
…
</ul>
</header>

3. Замените href = ”index.html” в файле _app-header-nav.html на href = ”/”.

Переместить заголовок бокового меню в отдельный файл

1. Создайте частичный файл _app-side-nav.html в папке шаблонов.

2. Переместите все содержимое (в index.html), начиная с <! — Sidebar menu → и заканчивая <\aside>, в _app-side-nav.html. После этого шага ваше содержимое _app-side-nav.html должно напоминать следующий отрывок.

<! — Sidebar menu →
<div class=”app-sidebar__overlay” data-toggle=”sidebar”></div>
<aside class=”app-sidebar”>
<div class=”app-sidebar__user”>
…
</aside>

3. Удалите открывающий тег <main class=”app-content”>.

4. Прокрутите вниз и удалите закрывающий тег </main>.

5. Замените href = ”index.html” в файле _app-side-nav.html на href = ”/”.

Переместить заголовок приложения в отдельный файл

1. Создайте частичный файл _app-title.html в папке шаблонов.

2. Переместите все содержимое (в index.html), начиная с <div class=”app-title”> и заканчивая закрывающим тегом <\div> в _app-title.html. После этого шага содержимое _app-title.html должно выглядеть следующим образом:

<div class=”app-title”>
<div>
<h1><i class=”<%= task-icon %>”></i> <%= task-title %></h1>
<p><%= task-desc %></p>
</div>
<ul class=”app-breadcrumb breadcrumb”>
<li class=”breadcrumb-item”><i class=”fa fa-home fa-lg”></i></li>
<li class=”breadcrumb-item”><a href=”#”><%= task-title %></a></li>
</ul>
</div>

Мы использовали теги <%= task-icon %>, <%= task-title %> и <%= task-desc %>, чтобы во время выполнения теги отображались динамически.

Обновите application.html с частичными данными

1. Откройте templates / application.html.

2. Замените открывающий тег <div class=”container”> в templates / application.html на <main class=”app-content”> и замените закрывающий <\div> на <\main>.

3. Вставьте <%= partial(“app-header-nav.html”) %> и <%= partial(“app-side-nav.html”) %> в application.html под начальным тегом <body>. <%= partial(“app-title.html”) %> следует поставить после <main class=”app-content”>.

<body class=”app sidebar-mini rtl”>
<%= partial(“app-header-nav.html”) %>
<%= partial(“app-side-nav.html”) %>
<main class=”app-content”>
<%= partial(“app-title.html”) %>
<%= partial(“flash.html”) %>
<%= yield %>
</main>
<%= javascriptTag(“application.js”) %>
</body>

Обновить обработчики маршрутов

1. Замените содержимое actions / home.go следующим:

// actions/home.go
package actions
import “github.com/gobuffalo/buffalo”
// HomeHandler is a default handler to serve up
// a home page.
func HomeHandler(c buffalo.Context) error {
c.Set(“task-title”, “Dashboard”)
c.Set(“task-icon”, “fa fa-dashboard”)
c.Set(“task-desc”, “A free and open source Bootstrap 4 admin template”)
return c.Render(200, r.HTML(“index.html”))
}
// ChartsHandler testing dynamic content handling of vali-admin theme
func ChartsHandler(c buffalo.Context) error {
c.Set(“task-title”, “Charts”)
c.Set(“task-icon”, “fa fa-pie-chart”)
c.Set(“task-desc”, “Various type of charts for your project”)
return c.Render(200, r.HTML(“charts.html”))
}

2. Добавьте app.GET(“/charts”, ChartsHandler) в actions / app.go ниже app.GET(“/”, HomeHandler.

// actions/app.go
// Setup and use translations:
app.Use(translations())
app.GET(“/”, HomeHandler)
app.GET(“/charts”, ChartsHandler)

Настройка графиков

1. Установите плагин Графики, запустив

yarn add chart.js

в окне терминала

2. Обновите application.js, чтобы включить require(“chart.js”); до require(“./main.js”);.

// File: assets/js/application.js
require(“expose-loader?$!expose-loader?jQuery!jquery”);
require(“bootstrap/dist/js/bootstrap.bundle.js”);
require(“chart.js”);
require(“./main.js”);
$(() => {
});

Настроить пользовательские сценарии страницы

На странице index.htnl есть настраиваемый сценарий. В настоящее время сценарий будет отображаться до application.js в браузере. Это предотвратит отображение диаграмм. Если вы проверите страницу в браузере, вы заметите ошибку ReferenceError `$ is not defined`.

Чтобы исправить ошибку и отобразить диаграммы, выполните следующие действия:

1. Включите настраиваемый сценарий страницы в index.html в contentFor(“pageScript”) помощник.

<% contentFor(“pageScript”) { %>
<script>
…
var ctxl = $(‘#lineChartDemo’).get(0).getContext(‘2d’);
var lineChart = new Chart(ctxl, {type:’line’, data: data});
var ctxp = $(‘#pieChartDemo’).get(0).getContext(‘2d’);
var pieChart = new Chart(ctxp, {type: ‘pie’, data: pdata});
</script>
<% } %>

2. В файле макета application.html мы добавляем contentOf(“pageScript”) помощник под <%= javascriptTag(“application.js”) %>.

<body class=”app sidebar-mini rtl”>
<%= partial(“app-header-nav.html”) %>
<%= partial(“app-side-nav.html”) %>
<main class=”app-content”>
<%= partial(“app-title.html”) %>
<%= partial(“flash.html”) %>
<%= yield %>
</main>
<%= javascriptTag(“application.js”) %>
<%= contentOf(“pageScript”) %>
</body>

Если мы сейчас запустим приложение

buffalo dev

и перейдите на localhost: 3000 /. На странице указателя теперь должны отображаться диаграммы.

Теперь остается только обновить все остальные страницы, чтобы они соответствовали изменениям, которые мы внесли в index.html, и добавить обработчики маршрутов для этих страниц.

Полный исходный код этого примера доступен на Github.