Grav - 主题基础知识

主题控制Grav网站的外观. Grav中的主题是使用功能强大的 Twig模板引擎构建的.

内容页面和树枝模板

您创建的页面,按名称引用特定模板文件或通过设置页面的模板标题变量.建议使用页面名称以便更简单的维护.

安装Grav Base软件包后,您将在user/pages/01.home中找到 defauld.md 文件.夹.该文件的名称,即默认告诉Grav该页面应该使用放在 themes/<中的树枝模板 default.html.twig 进行渲染. mytheme>/templates 文件夹.

例如,如果您有一个名为 contact.md 的文件,它将使用twig模板呈现为 themes/< mytheme>/templates/contact.html.twig .

主题组织

在以下部分中,我们将讨论主题组织,即其定义,配置等.

定义和配置

有关主题的信息将在 user/themes/antimatter/blueprints.yaml 可选择提供"管理"面板中使用的文件和表单定义.您将在用户/主题/反物质/蓝图.yaml 文件中看到反物质主题的以下内容.

name: Antimatter
version: 1.6.0
description: "Antimatter is the default theme included with **Grav**"
icon: empire
author:
   name: Team Grav
   email: devs@getgrav.org
   url: http://getgrav.org
homepage: https://github.com/getgrav/grav-theme-antimatter
demo: http://demo.getgrav.org/blog-skeleton
keywords: antimatter, theme, core, modern, fast, responsive, html5, css3
bugs: https://github.com/getgrav/grav-theme-antimatter/issues
license: MIT

form:
   validation: loose
   fields:
      dropdown.enabled:
         type: toggle
         label: Dropdown in navbar
         highlight: 1
         default: 1
         options:
            1: Enabled
            0: Disabled
         validate:
            type: bool

为了使用主题配置选项,您需要在名为 user/themes/< mytheme>的文件中提供默认设置;/< mytheme> .yaml .

示例

enable: true

主题和插件事件

主题通过插件与Grav交互的能力架构是Grav的另一个强大功能.要实现此目的,只需创建 user/themes/< mytheme>/< mytheme> .php (例如, antimatter.php ,用于默认的反物质主题)文件并使用格式如下.

<?php
namespace Grav\Theme;

use Grav\Common\Theme;

class MyTheme extends Theme {
   public static function getSubscribedEvents() {
      return [
         'onThemeInitialized' => ['onThemeInitialized', 0]
      ];
   }
   public function onThemeInitialized() {
      if ($this->isAdmin()) {
         $this->active = false;
         return;
      }
      
      $this->enable([
         'onTwigSiteVariables' => ['onTwigSiteVariables', 0]
      ]);
   }
   public function onTwigSiteVariables() {
      $this->grav['assets']
         ->addCss('plugin://css/mytheme-core.css')
         ->addCss('plugin://css/mytheme-custom.css');

      $this->grav['assets']
         ->add('jquery', 101)
         ->addJs('theme://js/jquery.myscript.min.js');
   }
}

模板

Grav主题的结构没有设定规则,除了每个页面类型内容的模板/文件夹中都必须有相关的树枝模板.

由于页面内容和树枝模板之间的这种紧密耦合,最好基于下载页面中提供的Skeleton软件包.

假设如果您希望在主题中支持模块化模板,则必须创建 modular/文件夹并在其中存储twig模板文件.如果您想支持表单,则应创建表单/文件夹并在其中存储表单模板.

蓝图

要为每个模板文件定义选项和配置的表单,请使用 blueprints/文件夹.这些将无法通过管理员面板进行编辑,并且可以选择使用.主题完全正常,没有蓝图文件夹.

SCSS/LESS/CSS

如果你想开发网站SASS或LESS,那么你必须在 user/themes/< mytheme>/scss/中创建子文件夹,或者 less/如果你想要一个css/folder.

对于从SASS或LESS编译的自动生成的文件,使用 css-compiled/文件夹.在Antimatter主题中,使用 scss SASS变体.

按照以下步骤在您的机器中安装SASS.

  • 在主题的根目录下,键入下面给出的命令以执行scss shell脚本.

$ ./scss.sh

  • 键入以下命令直接运行它.

$ scss --sourcemap --watch scss:css-compiled

css-compiled/将包含所有已编译的scss文件,并且将在主题中生成css文件.

其他文件夹

建议创建单独的 images/,fonts/ js/ user/themes/< mytheme>/文件夹中的文件夹,用于主题中使用的所有图片,字体和JavaScript文件.

主题示例

Antimatter 主题的整体文件夹结构我们到目前为止讨论的内容如下所示.

Grav Theme Basics