Учебники

Grav — учебник по теме

В этой главе давайте создадим тему Grav, чтобы понять концепцию.

антивещество

При установке базового пакета Grav устанавливается тема Antimatter по умолчанию, в которой используется Nucleus (простой базовый набор стилей CSS). Nucleus — это легкий CSS-фреймворк, содержащий основные стили CSS и разметку HTML, которые придают уникальный внешний вид.

начальная загрузка

Давайте создадим тему, которая использует популярный фреймворк Bootstrap . Bootstrap — это популярная платформа HTML, CSS и JS с открытым исходным кодом, позволяющая быстрее и проще создавать интерфейсные веб-разработки.

Следующие шаги описывают создание темы —

Шаг 1: Настройка базовой темы

Как мы изучали в главе « Основы темы», в теме Grav есть несколько ключевых элементов, которые необходимо соблюдать, чтобы создать новую тему.

  • После установки базового пакета Grav создайте папку с именем bootstrap в папке user / themes, как показано ниже.

После установки базового пакета Grav создайте папку с именем bootstrap в папке user / themes, как показано ниже.

Grav Theme Tutorial

  • Внутри папки user / themes / bootstrap создайте css /, fonts /, images /, js / и templates /, как показано ниже.

Внутри папки user / themes / bootstrap создайте css /, fonts /, images /, js / и templates /, как показано ниже.

Grav Theme Tutorial

  • Создайте файл темы с именем bootstrap.php в вашей папке user / themes / bootstrap и вставьте в него следующее содержимое.

Создайте файл темы с именем bootstrap.php в вашей папке user / themes / bootstrap и вставьте в него следующее содержимое.

<?php
namespace Grav\Theme;
use Grav\Common\Theme;
class Bootstrap extends Theme {}
  • Теперь создайте файл конфигурации темы bootstrap.yaml в папке themes / bootstrap и запишите в него следующее содержимое.

Теперь создайте файл конфигурации темы bootstrap.yaml в папке themes / bootstrap и запишите в него следующее содержимое.

enable: true
  • Мы пропустим папку с чертежами, поскольку у нас нет параметров конфигурации, и мы будем использовать обычный CSS для этой главы.

Мы пропустим папку с чертежами, поскольку у нас нет параметров конфигурации, и мы будем использовать обычный CSS для этой главы.

Шаг 2: Добавить Bootstrap

Чтобы создать тему начальной загрузки, вы должны включить в нее Bootstrap. Поэтому вам нужно скачать последнюю версию Bootstrap, нажав на эту ссылку, как показано ниже.

Grav Theme Tutorial

Разархивируйте пакет, и вы увидите три папки, а именно: css, fonts и js. Теперь скопируйте содержимое этих 3 папок в папки с одинаковыми именами в user / themes / bootstrap, которые были созданы ранее.

Шаг 3: Базовый шаблон

Как мы изучали в предыдущей главе, содержимое хранится в файле default.md, который инструктирует Grav искать шаблон рендеринга с именем default.html.twig . Этот файл включает в себя все, что вам нужно для отображения страницы.

Существует лучшее решение, использующее тег Twig Extends, который позволяет определять базовый макет с блоками . Это позволит шаблону веточки расширить базовый шаблон и предоставить определения для блоков, определенных в базе.

Выполните следующие шаги, чтобы создать простой базовый шаблон Bootstrap —

  • Создайте папку с именем partials в папке user / themes / bootstrap / templates . Это используется для хранения нашего базового шаблона.

  • В папке partials создайте файл base.html.twig со следующим содержимым.

Создайте папку с именем partials в папке user / themes / bootstrap / templates . Это используется для хранения нашего базового шаблона.

В папке partials создайте файл base.html.twig со следующим содержимым.

<!DOCTYPE html>
<html lang = "en">
   <head>
      {% block head %}
      <meta charset = "utf-8">
      <meta http-equiv = "X-UA-Compatible" content = "IE = edge">
      <meta name = "viewport" content = "width = device-width, initial-scale = 1">
      {% if header.description %}
      <meta name = "description" content = "{{ header.description }}">
      {% else %}
      <meta name = "description" content = "{{ site.description }}">
      {% endif %}
      {% if header.robots %}
      <meta name = "robots" content = "{{ header.robots }}">
      {% endif %}
      <link rel = "icon" type = "image/png" href="{{ theme_url }}/images/favicon.png">

      <title>{% if header.title %}{{ header.title }} | {% endif %}{{ site.title }}</title>

      {% block stylesheets %}
         {# Bootstrap core CSS #}
         {% do assets.add('theme://css/bootstrap.min.css',101) %}

      {# Custom styles for this theme #}
         {% do assets.add('theme://css/bootstrap-custom.css',100) %}

         {{ assets.css() }}
      {% endblock %}

      {% block javascripts %}
         {% do assets.add('https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js', 101) %}
         {% do assets.add('theme://js/bootstrap.min.js') %}

         {% if browser.getBrowser == 'msie' and browser.getVersion >= 8 and browser.getVersion <= 9 %}
            {% do assets.add('https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js') %}
            {% do assets.add('https://oss.maxcdn.com/respond/1.4.2/respond.min.js') %}
         {% endif %}

         {{ assets.js() }}
      {% endblock %}

      {% endblock head %}
   </head>
      <body>
         {# include the header + navigation #}
         {% include 'partials/header.html.twig' %}

         <div class = "container">
            {% block content %}{% endblock %}
         </div>

         <div class = "footer">
            <div class = "container">
               <p class = "text-muted">Bootstrap Theme for <a href = "http://getgrav.org">Grav</a></p>
            </div>
         </div>
      </body>
   {% block bottom %}{% endblock %}
</html>

Шаг 4: сломать его

Давайте посмотрим, как работает код в файле base.html.twig, как показано ниже.

  • Синтаксис {% block head%} {% endblock head%} используется для определения области в базовом шаблоне Twig. Головка внутри {% endblock head%} является необязательной.

  • Оператор if проверяет, установлено ли мета-описание в заголовках страниц или нет. Если не установлен, то шаблон должен отображаться с использованием site.description, как определено в файле user / config / site.yaml .

  • Путь к текущей теме определяется переменной theme_url .

  • Синтаксис {% do assets.add (‘theme: //css/bootstrap.min.css’,101)%} используется для использования диспетчера активов . Theme: // представляет текущий путь к теме, а 101 представляет порядок, в котором более высокое значение идет первым, за которым следует более низкое значение. Мы также можем предоставить ссылки на CDN явно как —

Синтаксис {% block head%} {% endblock head%} используется для определения области в базовом шаблоне Twig. Головка внутри {% endblock head%} является необязательной.

Оператор if проверяет, установлено ли мета-описание в заголовках страниц или нет. Если не установлен, то шаблон должен отображаться с использованием site.description, как определено в файле user / config / site.yaml .

Путь к текущей теме определяется переменной theme_url .

Синтаксис {% do assets.add (‘theme: //css/bootstrap.min.css’,101)%} используется для использования диспетчера активов . Theme: // представляет текущий путь к теме, а 101 представляет порядок, в котором более высокое значение идет первым, за которым следует более низкое значение. Мы также можем предоставить ссылки на CDN явно как —

{% do assets.addCss('http://fonts.googleapis.com/css?family = Open + Sans') %}

или же,

{% do assets.addJs(' https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js') %}
  • Все теги JavaScript и теги ссылок CSS отображаются шаблоном при выполнении вызова {{assets.css ()}} или {{assets.js ()}} соответственно.

  • Синтаксис {# … #} используется для написания комментариев в Twig.

  • Для включения другого шаблона Twig используется тег {% include ‘partials / header.html.twig’%} .

  • Содержимое шаблона предоставляется тегом {% block content%} {% endblock%} .

  • Чтобы добавить пользовательскую инициализацию JavaScript или аналитические коды, тег {% block bottom%} {% endblock%} используется в качестве заполнителя для шаблонов.

Все теги JavaScript и теги ссылок CSS отображаются шаблоном при выполнении вызова {{assets.css ()}} или {{assets.js ()}} соответственно.

Синтаксис {# … #} используется для написания комментариев в Twig.

Для включения другого шаблона Twig используется тег {% include ‘partials / header.html.twig’%} .

Содержимое шаблона предоставляется тегом {% block content%} {% endblock%} .

Чтобы добавить пользовательскую инициализацию JavaScript или аналитические коды, тег {% block bottom%} {% endblock%} используется в качестве заполнителя для шаблонов.

Шаг 5: Шаблон заголовка

Когда выполняется {% include ‘partials / header.html.twig’%} , механизм рендеринга Twig ищет шаблон Twig. Поэтому создайте файл шаблона header.html.twig в папке user / themes / bootstrap / templates / partials со следующим содержимым.

<nav class = "navbar navbar-default navbar-inverse navbar-static-top" role = "navigation">
   <div class = "container">
      <div class = "navbar-header">
         <button type = "button" class = "navbar-toggle"
            data-toggle = "collapse" data-target = ".navbar-collapse">
               <span class = "sr-only">Toggle navigation</span>
               <span class = "icon-bar"></span>
               <span class = "icon-bar"></span>
               <span class = "icon-bar"></span>
         </button>
         <a class = "navbar-brand" href = "#">Grav</a>
      </div>
      
      <div class = "navbar-collapse collapse">
         <ul class = "nav navbar-nav navbar-right">
            {% for page in pages.children %}
            {% if page.visible %}
            {% set current_page = (page.active or page.activeChild) ? 'active' : '' %}
            <li class = "{{ current_page }}"><a href = "{{ page.url }}">{{ page.menu }}</a></li>
            {% endif %}
            {% endfor %}
         </ul>
      </div>
      
   </div>
</nav>

Приведенный выше код создает панель навигации и автоматически отображает все пункты меню при создании новой страницы в папке user / pages .

Шаг 6 — Шаблон по умолчанию

Каждый элемент содержимого имеет определенное имя файла, например default.md, которое инструктирует Grav искать файл шаблона с именем default.html.twig . Теперь давайте создадим файл default.html.twig в вашей папке user / themes / bootstrap / templates / со следующим содержимым.

{% extends 'partials/base.html.twig' %}
{% block content %}
   {{ page.content }}
{% endblock %}

Приведенный выше файл default.html.twig расширяет partials / base.html.twig и указывает базовому шаблону использовать {{page.content}} для блока контента .

Шаг 7: Тема CSS

В файле partials / base.html.twig мы ссылались на пользовательскую тему css с помощью assets.add (‘theme: //css/bootstrap-custom.css’,100) , в которой хранится любой пользовательский CSS, используемый на вашем сайте.

Теперь давайте создадим файл bootstrap-custom.css в папке user / themes / bootstrap / css со следующим содержимым:

/* Restrict the width */
.container {
   width: auto;
   max-width: 960px;
   padding: 0 12px;
}

/* Place footer text center */
.container .text-muted {
   margin: 18px 0;
   text-align: center;
}

/* Sticky footer styles
-------------------------------------------------- */
html {
   position: relative;
   min-height: 80%;
}

body {
   /* Margin bottom by footer height */
   margin-bottom: 60px;
}

.footer {
   position: absolute;
   bottom: 0;
   width: 100%;
   /* Set the fixed height of the footer here */
   height: 50px;
   background-color: #dcdcdc;
}

/* Typography */
/* Tables */
table {
   width: 100%;
   border: 1px solid #f0f0f0;
   margin: 30px 0;
}

th {
   font-weight: bold;
   background: #f9f9f9;
   padding: 5px;
}

td {
   padding: 5px;
   border: 1px solid #f0f0f0;
}

/* Notice Styles */
blockquote {
   padding: 0 0 0 20px !important;
   font-size: 16px;
   color: #666;
}

blockquote > blockquote > blockquote {
   margin: 0;
}

blockquote > blockquote > blockquote p {
   padding: 15px;
   display: block;
   margin-top: 0rem;
   margin-bottom: 0rem;
   border: 1px solid #f0f0f0;
}

blockquote > blockquote > blockquote > p {
   /* Yellow */
   margin-left: -75px;
   color: #8a6d3b;
   background-color: #fcf8e3;
   border-color: #faebcc;
}

blockquote > blockquote > blockquote > blockquote > p {
   /* Red */
   margin-left: -100px;
   color: #a94442;
   background-color: #f2dede;
   border-color: #ebccd1;
}

blockquote > blockquote > blockquote > blockquote > blockquote > p {
   /* Blue */
   margin-left: -125px;
   color: #31708f;
   background-color: #d9edf7;
   border-color: #bce8f1;
}

blockquote > blockquote > blockquote > blockquote > blockquote > blockquote > p {
   /* Green */
   margin-left: -150px;
   color: #3c763d;
   background-color: #dff0d8;
   border-color: #d6e9c6;
}

Шаг 8: Тестирование

Измените тему по умолчанию с новой темой начальной загрузки . Откройте файл user / config / system.yaml и отредактируйте строку, которая содержит —

pages:
   themes: antimatter

и измените приведенный выше код на —

pages:
   theme: bootstrap

Теперь перезагрузите ваш сайт Grav, и вы увидите недавно установленную тему, как показано ниже.