Grav - 快速指南
Grav - 概述
Grav 是一个基于平面文件的内容管理系统。该系统不使用数据库来存储内容,而是使用文本 (.txt) 文件或 markdown (.md) 文件来存储内容。平面文件部分指的是可读文本,它以一种简单的方式处理内容,这对开发人员来说很简单。
Grav 由 Rocket Theme 团队开发。它运行在 PHP 上,是一个开源 CMS,如 Joomla、Wordpress 或 Drupal。
为什么选择 Grav?
Grav 现在是最快的平面文件内容管理系统。使用 Grav 发布和管理内容更容易。它允许开发人员通过将内容存储在文件(如文本或 markdown 文件)中而不是数据库中来非常轻松地处理内容。
Grav 可帮助您构建一个简单、易于管理且快速的网站。它的成本低于数据库驱动的 CMS,并且在您没有足够的资源时,它可用于文件处理的 I/O。
Grav 的功能
它是一个快速、简单且功能强大的平面文件 Web 平台。
它用于构建网站,无需额外的工具或 html 知识。
它使用文本文件或 markdown 文件来存储内容。
它不使用数据库,因此可以缓解瓶颈的情况。
它使用 Twig 提供的基于 PHP 的模板,该模板直接解析为 PHP,使其速度更快。
优点
它不是基于数据库的 CMS,因此非常容易安装并可随时使用当您将文件上传到服务器时。
它使用 Markdown 文本文件来简化操作。使用此功能,内容会动态转换为 HTML 并显示在浏览器中。
出于安全考虑,Grav 没有管理区域和数据库。因此,黑客不可能入侵帐户或数据库来访问重要数据。
您可以轻松备份所有文件以保留网站的备份副本,因为没有数据库需要备份。
这是一款不需要更多时间学习的软件。
缺点
您可能会遇到未经授权的用户可能直接从文件访问您的内容的情况,因为没有文件的数据库。
使用 Grav CMS 构建复杂的网站很困难。
Grav - 安装
在本章中,我们将了解 Grav 的安装。我们将讨论 Grav 的软件要求以及如何下载它。
Grav 的软件要求
现在让我们了解 Grav 的软件要求。
Web 服务器
- WAMP (Windows)
- LAMP (Linux)
- XAMP (多平台)
- MAMP (Macintosh)
- Nginx
- Microsoft IIS
操作系统 − 跨平台
浏览器支持 − IE(Internet Explorer 8+)、Firefox、Google Chrome、Safari、Opera
PHP 兼容性 − PHP 5.4 或更高版本
文本编辑器
- Sublime Text (Mac / Windows/ Linux)
- Atom (Mac / Windows)
- Notepad ++ (Windows)
- Bluefish (Mac / Windows/ Linux)
下载 Grav
单击此链接 https://getgrav.org/downloads 并按照下面给出的屏幕截图中所示的步骤下载 Grav。
将下载的 Grav 文件解压到您的 Web 服务器中。
设置向导
Grav 的安装是一个非常简单的过程。按照下面给出的步骤进行 Grav 设置。
下载 zip 文件并将其解压到您的 Web 服务器或本地主机。将文件夹重命名为您想要用来引用您网站的当前名称。
打开浏览器并导航到 localhost/<your_folder_name>,您将被重定向到一个屏幕,该屏幕显示 您已成功安装 Grav,如以下屏幕截图所示。
Grav 附带一个示例页面,可帮助您入门。在上面的截图中,您可以看到主页链接显示了一个示例页面。
Grav - 页面
在本章中,让我们学习Grav 页面。页面可以定义为网站的构建块。页面结合了内容和导航;这使得即使是没有经验的用户也能更轻松地工作。
首先,让我们了解如何创建一个简单的页面。所有用户内容都将存储在user/pages/文件夹下。只有一个名为01.home的文件夹。文件夹的数字部分是可选的;它表示页面的顺序(例如,01 将在 02 之前),并明确告知 Grav 此页面应在菜单中可见。
现在让我们看看如何创建一个新页面。
步骤 1 −在 /user/pages/ 下创建一个文件夹;例如 02.about,如以下屏幕截图所示。
步骤 2 − 在新建的 02.about 文件夹中创建一个名为 default.md 的文件,其中包含以下内容。
--- title: About Us --- # About Us Page! This is the body of **about us page**.
上述代码使用了一些 Markdown 语法,下面简要解释一下。您可以在 Markdown 章节中详细了解 Markdown。
--- 指示符之间的内容是 页面标题。
# 或 hashes 语法在 Markdown 中表示将转换为 <h1> 标题的标题。
** 标记表示粗体文本或 HTML 中的 <b>。
步骤 3 −重新加载浏览器,您可以在菜单中看到新页面,如以下屏幕截图所示。
页面类型
Grav Pages 支持 3 种类型的页面 −
- 标准页面。
- 列表页面。
- 模块化页面。
标准页面
标准页面是最基本的页面类型,例如博客文章、联系表单、错误页面等。默认情况下,页面被视为标准页面。下载并安装 Base Grav 包后,您将立即看到标准页面。安装 Base Grav 包后,您将看到以下页面。
列表页面
列表页面是标准页面的扩展,它引用了页面集合。设置列表页面的最简单方法是在列表页面下方创建子页面。博客列表页面就是一个很好的例子。
可以在Grav 下载中找到带有列表页面的博客骨架示例。以下屏幕截图显示了一个示例。
模块化页面
模块化页面是一种列表页面,它从其子页面构建单个页面。这使我们能够从较小的模块化内容页面构建非常复杂的单页布局。这可以通过从页面主文件夹中的多个模块化文件夹构建模块化页面来实现。
可以在Grav Downloads中找到使用模块化页面的示例单页框架。以下屏幕截图显示了一个示例。
文件夹
/user/pages 文件夹将包含其各自页面的内容。/user/pages 文件夹中的文件夹会被 Grav 自动视为菜单,并用于排序。例如,01.home 文件夹将被视为主页。排序也应保持,即 01.home 将位于 02.about 之前。
您应该提供一个入口点,以便当您将浏览器指向站点根目录时,它指定浏览器要转到的位置。例如,如果您在浏览器中输入 http://mysite.com,Grav 默认需要别名 home/,但您可以通过更改 Grav 配置文件中的 home.alias 选项来覆盖主位置。
文件夹名称前的下划线 ( _ ) 标识为 模块化文件夹,这是一种特殊的文件夹类型,仅用于模块化内容。例如,对于 pages/02.about 等文件夹,slug 将默认为 about,URL 将为 http://mysite.com/about。
如果文件夹名称没有以数字为前缀,则该页面被视为不可见,不会显示在导航中。例如,如果 user/pages/ 有 /contact 文件夹,则不会显示在导航中。可以通过在页面本身的标题部分中将 visible 设置为 true 来覆盖此功能(如下所示),以使其在导航中可见。
--- title: contact visible: true ---
默认情况下,如果周围的文件夹有数字前缀,则页面在导航中可见。设置可见性的有效值为 true 或 false。
排序
有很多方法可以控制文件夹的排序,其中一种重要方法是设置页面配置设置的 content.order.by。选项如下所列。
default − 文件系统可用于排序,即 01.home 在 02.about 之前。
title − 标题可用于排序,在每个页面中定义。
date −排序可以基于每个页面中定义的日期。
folder − 文件夹名称包含任何数字前缀,例如 01.,将被删除。
basename − 排序基于字母文件夹,没有数字顺序。
modified − 也可以使用页面的修改时间戳。
header.x − 任何页面标题字段都可用于排序。
manual − 可以使用 order_manual 变量进行排序。
random −也可以随机化您的订单。
手动订单是通过向 content.order.custom 配置设置提供选项列表来具体定义的。您可以设置 pages.order.dir 和 pages.order.by 选项来覆盖 Grav 系统配置文件中的默认行为。
页面文件
页面文件夹中的页面应创建为 .md 文件,即 Markdown 格式的文件;它是带有 YAML 前言的 markdown。default 将是主模板的标准名称,您可以为其指定任何名称。下面显示了一个简单页面的示例 −
--- title: Title of the page taxonomy: category: blog page --- # Title of the page Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque porttitor eu felis sed ornare. Sed a mauris venenatis, pulvinar velit vel, dictum enim. Phasellus ac rutrum velit. **Nunc lorem** purus, hendrerit sit amet augue aliquet, iaculis ultricies nisl. Suspendisse tincidunt euismod risus. Nunc a accumsan purus.
--- 标记之间的内容称为 YAML 前言,此 YAML 前言包含基本 YAML 设置。在上面的示例中,我们为博客页面设置标题和分类法。一对 --- 标记之后的部分是我们在网站上看到的实际内容。
摘要大小和分隔符
摘要的默认大小可以在 site.yaml 中设置,通过 page.summary() 使用。这对于只需要摘要信息而不是完整页面内容的博客很有用。您可以使用手动摘要分隔符(也称为摘要定界符):=== 并确保将其放在内容中,并在其上方和下方留有空行,如下所示。
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. === Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
当被 page.summary() 引用时,将使用分隔符上方的文本;当被 page.content() 引用时,将使用完整内容。
查找其他页面
Grav 具有名为 find() 的方法,用于查找其他页面并在该页面上执行操作。
例如,如果您想在特定页面上列出所有公司位置,请使用以下 markdown 规则 −
# Locations <ul> {% for loc in page.find('/locations').children if loc != page %} <li><a href="{{loc.url}}">{{ loc.title }}</a></li> {% endfor %} </ul>
Grav - Markdown 语法
Markdown 语法被定义为以易于阅读和编写的格式编写纯文本,然后将其转换为 HTML 代码。Markdown 语法中使用 (*) 或 (`) 等符号。这些符号用于加粗、创建标题和组织内容。
要使用 Markdown 语法,您必须在 user/pages/02.mypage 文件夹中创建一个 .md 文件。在您的 \user\config\system.yaml 配置文件中启用 Markdown 语法。
使用 Markdown 语法有很多好处,其中一些如下。
它易于学习且字符数最少。
使用 markdown 时,出错的可能性很小。
有效的 XHTML 输出。
您的内容和视觉显示保持分开,因此不会影响您网站的外观。
您可以使用任何文本编辑器或 markdown 应用程序。
在以下部分中,我们将讨论 HTML 的主要元素在 markdown 中使用。
标题
每个标题标签都使用 # 来创建,即从 h1 到 h6,# 的数量如图所示增加。
#my new Heading ##my new Heading ###my new Heading ####my new Heading #####my new Heading ######my new Heading
在浏览器中以 localhost/Grav/mypage; 的形式打开 .md 文件,您将收到以下结果 −
评论
您可以按照以下格式撰写评论。
<!— This is my new comment -->
在浏览器中以 localhost/Grav/mypage; 的形式打开 .md 文件,您将收到以下结果 −
水平规则
水平规则用于在段落之间创建主题分隔符。您可以使用以下任何一种方法在段落之间创建分隔符。
___ − 三个下划线
--- − 三个破折号
*** −三个星号
在浏览器中以 localhost/Grav/mypage; 的形式打开 md 文件,您将收到以下结果 −
正文
正文 可以定义为在 markdown 语法中以正常格式编写文本,不使用 (p) 标签
示例
It is a way of writing your plain text in an easy to read and write format, which later gets converted into HTML code.
在浏览器中以 localhost/Grav/mypage; 的形式打开 .md 文件,您将收到以下结果 −
强调
强调是 markdown 语法中的书写格式,用于对部分文本加粗、斜体或删除线。让我们在下面讨论它们 −
粗体
可以使用两侧的两个 (**) 符号将部分文本加粗。
示例
The newest articles from **Advance Online Publication (AOP)** and the current issue.。
在此示例中,我们必须将 'Advance Online Publication (AOP)' 单词显示为粗体。
在浏览器中将 .md 文件打开为 localhost/Grav/mypage,您将收到以下结果 −
斜体
在单词两侧使用 "_"(下划线)符号将文本变为斜体。
示例
The newest articles from _Advance Online Publication_ (AOP) and the current issues.。
在此示例中,我们必须将 "Advance Online Publication" (AOP) 字样斜体化。
在浏览器中以 localhost/Grav/mypage 形式打开 .md 文件。这将为您提供以下结果 −
删除线
在单词的两边使用两个 "~~"(波浪符号)来删除该单词。
示例
The newest articles from ~~Advance Online Publication~~ (AOP) and the current issues.
在此示例中,我们必须删除"Advance Online Publication"(AOP)字样。
在浏览器中以 localhost/Grav/mypage 形式打开 .md 文件。这将为您提供以下结果 −
Blockquote
要创建块引用,您必须在句子或单词前添加 > 符号。
示例
>The newest articles from Advance Online Publication (AOP) and the current issues.
在此示例中,我们在句子前使用了 > 符号。
在浏览器中以 localhost/Grav/mypage; 的形式打开 .md 文件,您将收到以下结果 −
Blockquote 也可以按以下方式使用 −
>The newest articles from Advance Online Publication (AOP) and the current issues. >>> The newest articles from Advance Online Publication (AOP) and the current issues.
在浏览器中以 localhost/Grav/mypage; 的形式打开 .md 文件,您将收到以下结果 −
通知
通知可用于通知或告知重要事项。
通知有四种类型 − 黄色、红色、蓝色和绿色。
黄色
在描述 !Info 或信息的黄色通知类型前必须使用 >>> 符号。
示例
>>>Neurotransmitter-gated ion channels of the Cys-loop receptor family are essential mediators of fast neurotransmission throughout the nervous system and are implicated in many neurological disorders.
红色
在红色警告通知前使用四个 >>>> 个标志。
示例
>>>>Neurotransmitter-gated ion channels of the Cys-loop receptor family are essential mediators of fast neurotransmission throughout the nervous system and are implicated in many neurological disorders.
蓝色
使用五个 >>>>> 符号表示蓝色通知类型,这描述了一条注释。
示例
>>>>>Neurotransmitter-gated ion channels of the Cys-loop receptor family are essential mediators of fast neurotransmission throughout the nervous system and are implicated in many neurological disorders.
绿色
在绿色通知类型前使用六个 >>>>>> 标志,这描述了小费。
示例
>>>>>>Neurotransmitter-gated ion channels of the Cys-loop receptor family are essential mediators of fast neurotransmission throughout the nervous system and are implicated in many neurological disorders.
在浏览器中以 localhost/Grav/mypage; 的形式打开 md 文件,您将收到以下结果 −
列表
在本节中,我们将了解 Grav 中无序列表和有序列表的工作原理。
无序
在无序列表中,使用项目符号。使用 *、-、+。项目符号符号。在任何文本前使用带空格的符号,项目符号就会显示出来。
示例
+ Bullet + Bullet + Bullet -Bullet -Bullet -Bullet *Bullet
在浏览器中以 localhost/Grav/mypage; 的形式打开 .md 文件,您将收到以下结果 −
有序
在列出某些内容之前添加数字。
示例
1. Coffee 2. Tea 3. Green Tea
在浏览器中以 localhost/Grav/mypage 格式打开 .md 文件。这将为您提供以下结果 −
代码
在本节中,我们将了解 Grav 中的内联和块代码"围栏"如何工作。
内联代码
使用 (`) 制作内联代码,以便在 markdown 中使用代码。
示例
在给定的示例中,必须将"<section></section>"转换为代码。
在浏览器中以 localhost/Grav/mypage 的形式打开 .md 文件,您将收到以下结果 −
阻止代码"围栏"
如果要阻止多行代码,请使用 (```) 围栏。
示例
``` You're Text Here ```
在浏览器中以 localhost/Grav/mypage; 的形式打开 .md 文件,您将收到以下结果 −
表格
在 Grav 中,表格是使用标题部分下的竖线和破折号创建的。竖线不能垂直对齐。
示例
| Number | Points | | ------ | ----------- | | 1 | Eve Jackson 94 | | 2 | John Doe 80 | | 3 | Adam Johnson 67 |
在浏览器中以 localhost/Grav/mypage; 的形式打开 .md 文件,您将收到以下结果 −
右对齐文本
要使表格内容显示在右侧,您必须在标题下方的破折号右侧添加冒号。
| Number | Points | | ------:| -----------: | | 1 | Eve Jackson 94 | | 2 | John Doe 80 | | 3 | Adam Johnson 67 |
在浏览器中以 localhost/Grav/mypage; 的形式打开 .md 文件,您将收到以下结果 −
链接
在本节中,我们将了解 Grav 中的链接工作原理。
基本链接
链接是借助 ([]) 方括号和 (()) 圆括号创建的。在 [] 括号中,您必须写入内容,在 () 中写入域名。
示例
[Follow the Given link](http://www.google.com)
在浏览器中以 localhost/Grav/mypage; 的形式打开 .md 文件,您将收到以下结果 −
添加标题
在本节中,我们将了解如何在 .md 文件中添加标题。
示例
[Google](https://www.gogle.com/google/ "Visit Google!")
在浏览器中以 localhost/Grav/mypage; 的形式打开 .md 文件,您将收到以下结果 −
图像
图像类似于链接,但在语法开头有一个感叹号。
示例
![Nature] (/Grav/images/Grav-images.jpg)
在浏览器中以 localhost/Grav/mypage 的形式打开 .md 文件,您将收到以下结果 −
Grav - 页面链接
在本章中,我们将了解如何在 Grav 中链接页面。您可以用简单的方式将一个页面链接到另一个页面,甚至可以使用页面链接将远程页面链接起来。Grav 有许多响应式链接选项。如果您以前使用过 HTML 链接文件,那么理解 Grav 中的页面链接就很容易了。
下面给出了 Grav 站点页面目录的基本示例。我们将使用以下目录作为示例,如图所示。
下面给出了 Grav 链接的一些常见组件。
[Linked Content](../path/slug/page)
[] − 指定写入链接的文本或替代内容。在 HTML 中,我们使用 <a href=""> 和 </a> 来放置内容。
() − URL 放在这个括号中,直接放在方括号后面。
../ −表示向上移动一个目录。
内容中使用了 4 种类型的链接,如下所示 −
Slug 相对
目录相对
绝对
远程
Slug 相对
内部链接不仅限于文件/目录结构中的某些名称。可以从标头和后备目录名称中提取 Slug,这有助于您以后轻松创建链接,因为无需记住任何特定文件名,但可以记住相关的 slug。 Grav 的模板引擎使用文件名称来了解要应用哪个模板。
[link](../dog)
上述代码为您获取以下结果 −
在上面的示例中,您必须向上移动一个目录并从 pages/01.home/02.dog/item.md 加载位于 pages/01.home/02.nature/item.md 目录中的默认页面。文件 item.md 没有分配 slug,因此 Grav 使用目录名称。
接下来,您会发现一个类似的示例,从 pages/01.home/01.dog/item.md 链接到 pages/02.black/01.fish/item.md,但当它加载 item.md 文件时,会将 slug 分配给 01.fish 文件。
[link](../../black/fish)
上述代码为您提供以下结果 −
现在您将看到默认 slug 文件夹名称将被替换为item.md 的标题中有 黑色 个 slug。
目录相对
设置相对的目标用于链接当前页面,该页面可以是图像文件或任何其他文件(根据需要)。文件的位置与目标的位置一样重要。如果在更改路径时移动文件,链接可能会中断。只要文件保持一致,您就可以在本地开发服务器和具有不同域名的实时服务器之间轻松切换。链接应该可以正常工作。
您将直接通过名称指向文件的链接,而不是通过其目录或 slug。您可以使用以下命令创建从 pages/01.home/01.dog/item.md 到 pages/02.black/01.fish/item.md 的链接。
[link](../../02.black/01.fish/item.md)
上述代码为您提供以下结果 −
两个文件夹都向上移动,如 ../../ 所示,然后在底部两个文件夹直接指向 item.md 文件。
绝对链接
它类似于相对链接,基于在 Grav 中的 /user/pages/ 目录中。此外,这可以通过两种方法完成。
Slug 相对样式
目录相对样式
Slug 相对样式
您可以像 slug 相对类型一样执行此操作。它在路径中使用目录名称。它通过断开链接消除了顺序错误和稍后更改。它在开头更改文件夹名称的数字,从而导致链接断开。
下面给出了一个绝对链接的示例,链接以 / 开头。它指定在 pages/01.home/01.dog/item.md 中以 Slug 样式进行绝对链接。
[link](/home/nature)
上述代码为您提供以下结果 −
目录相对样式在与 GitHub 等服务一起使用时更加一致。它们没有 Grav 灵活性的优势。下面您可以看到使用目录相对样式建立到 pages/01.home/01.dog/item.md 的绝对链接的示例。
[link](/01.home/01.dog)
远程
远程链接允许您通过其 URL 直接链接到任何文件或文档。无需包含您自己网站的内容。
以下示例向您展示如何链接到 TutorialsPoint 页面。
[link](http://www.tutorialspoint.com)
上述代码为您提供以下结果 −
您可以直接链接到任何 URL,包括安全的 HTTPS 链接。
Grav - 图像链接
在本章中,我们将了解 Grav 中的图像链接。Grav 允许您将图像从一个页面链接到另一个页面,甚至链接到远程页面。如果您使用 HTML 链接文件,那么理解 Grav 中的图像链接将非常容易。
使用此结构,我们将看到如何使用不同类型的链接在页面中显示媒体文件。此结构下的每个文件夹都包含图像,/02.green/img01下有一个特殊目录,充当页面,但仅包含媒体文件。
让我们来看看 Grav markdown 图像标签的一些常见元素。
![Alt Text](../path/image.ext)
! − 当您将其放在 markdown 链接标签的开头时,它表示图像标签。
[] − 它为图像指定可选的 alt-text。
() − 它直接放在包含文件路径的方括号后面。
../ −它表示向上移动一个目录。
Grav 使用以下五种类型的图像链接 −
Slug 相对
目录相对
绝对
远程
图像上的媒体操作
Slug 相对
它将相对图像链接设置为当前页面,并链接同一目录中的另一个文件。使用相对链接时,源文件的位置与目标文件的位置一样重要。如果在移动时更改文件中的路径,则链接可能会断开。使用此图像链接结构的优点是,只要文件结构保持不变,您就可以在本地开发服务器和具有不同域名的实时服务器之间切换。
示例
![link](../water/img01/img.jpg)
此处 ../ 表示您的链接向上移动一个文件夹,然后向下移动一个文件夹,img.jpg 是目标。
当您使用上述路径时,您将收到以下输出 −
Grav 支持页面主 markdown 文件标题中的 slug,此 slug 取代给定页面的文件夹名称。
如果01.sky 文件夹通过其 .md 文件设置了一个 slug,即 /pages/01.blue/01.sky/text.md,那么该文件的标题将是 −
--- title: Sky slug: test-slug taxonomy: category: blog ---
在上面的代码中,我们设置了可选的 slug test-slug。设置 slug 后,您可以链接到媒体文件,该媒体文件将为链接设置 Slug 相对 或 绝对 URL。
目录相对
在这种类型的链接中,您可以设置指向当前页面的目录相对图像链接。您可以在目录相对图像链接中引用完整路径及其文件夹名称,而无需使用 URL 段。
示例
![My image](../../blue/img01/img.jpg)
当您使用上述路径时,它将显示如下所示的输出 −
绝对
绝对链接与相对链接相同,但唯一的区别是它们相对于站点的根目录并存在于 /user/pages/ 目录中。
您可以通过两种不同的方式使用绝对链接 −
您可以使用Slug Relative 样式,在路径中包含 slug 或目录名称,常用于绝对链接。
您可以使用 Absolute Link,以 a/ 打开链接。
![My image](/blue/img01/img.jpg)
使用上述路径时,您将收到以下输出 −
Remote
远程图像链接允许直接通过其 URL 显示任何媒体文件。这些链接不包括您自己网站的内容。以下示例显示如何使用远程 URL 显示图像 −
![Remote Image 1](http://www.freedomwallpaper.com/nature-wallpaper/spring_nature-wide.jpg)
当您单击下图所示的链接时,它将显示来自给定 URL 的图像。
图像上的媒体操作
与页面关联的图像使我们能够利用Grav 的媒体操作的优势。在 Grav 中创建内容时,您可以显示一些媒体文件,如图像、视频和其他文件。
示例
您可以使用下面给出的格式加载图像 −
![Styling Example](../img01/img.jpg?cropResize = 400, 200)
当您使用上述路径时,您将收到如下所示的输出 −
Grav - 媒体
媒体文件包含不同类型的显示内容,例如图像、视频和许多其他文件。 Grav 会自动查找和处理这些文件以供任何页面使用。 通过使用页面的内置功能,您可以访问元数据并动态修改媒体。
智能缓存 由 Grav 使用,可在必要时创建缓存中生成的媒体。 这样,所有人都可以使用缓存版本,而不必一次又一次地生成媒体。
支持的媒体文件
以下是 Grav 支持的媒体文件类型 −
图像 − jpg、jpeg、png
动画图像 − gif
矢量化图像 − svg
视频 − mp4、mov、m4v、swf
数据/信息 − txt、doc、pdf、html、zip、gz
显示模式
以下是 Grav 中的几种显示模式 −
来源 − 它是图像、视频或文件的视觉显示。
文本 − 媒体文件的文本呈现。
缩略图 −媒体文件的缩略图。
定位缩略图
您可以使用三个位置定位缩略图 −
在媒体文件所在的同一文件夹中 − [media-name].[media-extension].thumb.[thumb-extension];此处,media-name 和 media-extension 是实际媒体文件的名称和扩展名,thumb-extension 是图像媒体类型支持的扩展名。
用户文件夹 − user/images/media/thumb-[media-extension].png;此处,media-extension 是实际媒体文件的扩展名。
系统文件夹 − system/images/media/thumb-[media-extension].png; 此处,media-extension 是实际媒体文件的扩展名。
灯箱和链接
Grav 输出一个锚标记,其中包含灯箱插件要读取的一些元素。如果您想使用插件中未包含的灯箱库,则可以使用以下属性创建自己的插件。
rel − 表示灯箱链接。值为 lightbox。
href − 它是媒体对象的 URL。
data-width −设置用户选择的灯箱的宽度。
data-height − 设置用户选择的灯箱的高度。
data-srcset − srcset 字符串用于图像媒体。
操作
Grav 中的构建器模式用于处理媒体,以执行多个操作。有些类型的操作支持所有媒体,而有些仅适用于特定媒体。
常规
有 6 种类型的常规操作可用于媒体类型。每个操作如下所述。
Sr.No. | 动作 &描述 |
---|---|
1 | url()
url() 返回媒体的原始 url 路径。 |
2 | html([title][, alt][, classes]
输出将具有媒体的有效 html 标签。 |
3 | display(mode) 用于在不同的显示模式之间切换。切换到显示模式时,所有操作都将被重置。 |
4 | link()
在链接之前应用的操作将应用于链接的目标。 |
5 | lightbox([width, height])
Lightbox 与链接操作类似,但有一点不同,它创建了一个带有一些额外属性的链接。 |
6 | Thumbnail
在页面和默认之间选择任何类型的媒体文件,这可以手动完成。 |
操作图片
下表列出了一些应用于图片的操作。
Sr.No. | 操作 &描述 |
---|---|
1 | resize(width, height, [background])
通过调整大小更改图像的宽度和高度。 |
2 | forceResize(width, height) 根据需要拉伸图像,而不考虑原始比例。 |
3 | cropResize(width, height) 根据图像的宽度和高度调整图像的大小。高度。 |
4 | crop(x, y, width, height) 根据 x 和 y 位置的宽度和高度描述裁剪图像。 |
5 | cropZoom(width, height) 帮助根据请求缩放和裁剪图像。 |
6 | quality(value) 设置图像质量的值,介于 0 和 100 之间。 |
7 | negate() 颜色在取反时反转。 |
8 | brightness(value) 使用值为-255至+255,亮度滤镜将添加到图像中。 |
9 | 对比度(值) -100 至 +100 之间的值用于将对比度滤镜应用于图像。 |
10 | 灰度() 灰度滤镜用于处理图像。 |
11 | emboss() 浮雕滤镜也用于处理图像。 |
12 | smooth(value) 通过将值设置为 -10 到 +10,将平滑滤镜应用于图像。 |
13 | sharp() 在图像上添加锐化滤镜。 |
14 | edge() 边缘查找滤镜添加到图像上。 |
15 | colorize(red, green, blue) 通过调整红色、绿色和蓝色来为图像着色。 |
16 | sepia() 添加棕褐色滤镜以呈现复古外观。 |
动画和矢量化图像和视频
对图像和视频执行动画和矢量化操作。以下是对图像和视频执行的操作。
Sr.No. | 操作和说明 |
---|---|
1 | 调整大小(宽度、高度)
调整大小操作将设置 width、height、data-width 和 data-height 属性。 |
组合
Grav 具有图像处理功能,可以轻松处理图像。
![My New Image](/images/maxresdefault.jpg?negate&cropZoom = 500, 500&lightbox & cropZoom = 600, 200&contrast = -100&sharp&sepia)
上述代码将生成如下所示的输出 −
响应式图像
下表列出了几种类型的响应式图像。
元文件
image1.jpg、archive.zip 或任何其他引用都可以设置变量或被元文件覆盖。这些文件随后采用 <filename>.meta.yaml 格式。例如,如果您有 image2.jpg 图像,则可以将元文件创建为 image2.jpg.meta.yaml。内容必须采用 yaml 语法。您可以使用此方法添加任何您喜欢的文件或元数据。
Grav - 模块化页面
模块化页面一开始很难理解,但一旦你了解它,就会很容易使用。它允许从其子页面创建单个页面。它能够从模块化内容页面构建复杂的单页布局。
模块化页面被设置为不可路由,因为它们无法通过 URL 直接访问。它们由文件夹名称前的 _(下划线)标识。它是页面的集合,每个页面一个接一个地显示以获得单个页面。例如,user/pages/home/_header.。
文件夹结构
如果是单页框架,您可以在 01.home 文件夹中找到此页面。在这里,您将获得一个模块化 .md 文件,该文件告诉必须包含哪些页面以及要显示的页面顺序。您可以在当前主题文件夹中找到 modules.html.twig。
在下图中,您可以看到为模块化页面创建的文件夹结构。
每个子文件夹必须包含一个描述 markdown 文件的 .md 文件。
首先,您必须在 /users/pages/01.home 文件夹中创建子文件夹。接下来,每个文件夹必须包含一个 .md 文件和一个 modular.md 文件。
创建子文件夹时,图像和文件都必须位于同一文件夹中。
如何创建模块化页面
要创建模块化页面,您必须遵循给定的步骤。
步骤 1 − 在 /user/pages/01.home/ 文件夹中创建几个页面。在下图中,您可以看到我们创建了两个文件夹以及一个 functional.md 文件。
步骤 2 −要创建模块化页面,您必须在每个文件夹中创建一个文件并将其命名为 text.md。
步骤 3 − 接下来,在 text.md 文件中添加代码,保存并运行。
示例
将所有四个页面保存为 .md 文件。这里我们创建了 4 个页面,并分别命名为 text.md、text1.md、text2.md 和 text3.md。
--- title: Bio-diversity --- ## Bio-diversity Biodiversity refers to the variety of life. It is seen in the number of species in an [ecosystem](https://simple.wikipedia.org/wiki/Ecosystem) or on the entire [Earth] (https://simple.wikipedia.org/wiki/Earth). Biodiversity gets used as a measure of the health of biological systems, and to see if there is a danger that too many species become[extinct](https://simple.wikipedia.org/wiki/Extinct).
现在,创建 4 个页面,将它们添加到 emplates\modular 文件夹中,如下所示。
接下来,转到主页并刷新,您可以看到更改。
在新的导航栏中,您可以看到四个文件链接。
Grav - 多语言
多语言是指在您的网站中使用不同的语言。我们将学习不同的程序,帮助您在 Grav 网站中使用多语言。
多语言基础知识
基本上,Grav 需要一个 .md 文件来表示任何页面。当您启用多语言支持时,它将查找 default.en.md 或 default.fr.md. 之类的文件。
语言配置
您必须首先在 user/config/system.yaml 文件中设置一些基本的语言配置。
Language: Supported: - en - Fr
通过这样做,您已在 Grav 中启用了多语言支持。在上面的代码中,en 表示英语,fr 表示法语。这意味着您的网站将支持这两种语言。这里的默认语言是 en (English)。如果您先写 Fr (French),那么它将成为您的默认语言。
多语言页面
如果您的默认语言设置为 English,那么 Grav 将查找 default.en.md 文件。如果找不到该文件,那么 Grav 将查找您设置的另一种语言。如果两种语言都找不到,那么它会查找 default.md 文件。
示例
default.en.md 文件
--- title: Home --- # Grav is Running! ## You have installed **Grav** successfully
上述代码将生成以下输出 −
对于法语作为默认语言,default.fr.md 文件将是 −
--- titre: Accueil --- # Grav est en marche! ## Vous avez installé ** ** Grav succès
上述代码将生成以下输出 −
通过 URL 激活语言
如果您想使用语言代码更新网站的 URL,请按照以下步骤操作 −
示例
如果您希望您的网站使用英语,请在浏览器中输入以下行 −
http://www.mysite.com/en
如果您希望您的网站使用法语,请在浏览器中输入以下行 −
http://www.mysite.com/fr
通过浏览器
Grav 能够获取 http_accept_language 值并将其与当前支持的语言进行比较。如果您希望此功能发挥作用,请在语言部分启用您的 user/system.yaml 文件,如下所示 −
language : http_accept_language : true
基于语言的主页
要拥有基于语言的主页,您必须在 site.yaml 文件中启用以下代码 −
home: aliases: en: /homepage fr: /page-d-accueil
这样,Grav 将从活动语言中找出要使用的语言。
以下代码将强制 Grav 将您重定向到您的默认语言路由。并且 include_route 选项强制在您的网址中添加语言代码,如 http://www.mysite.com/en/home
languages: home_redirect: include_lang: true include_route: false
基于语言的 Twig 模板
如果您的文件是 default.en.md,那么 Grav 将查找 default.html.twig 形式的 twig 文件。当您需要特定于语言的 twig 文件时,您必须将其上传到语言文件夹的根级别。如果您当前的主题位于 templates/default.html.twig 中,则必须创建一个 templates/en/ 文件夹并将英语专用文件夹放入其中,如下所示:templates/en/default.html.twig
语言切换器
语言切换器插件可在 Grav 软件包管理器 (GPM) 中找到。
通过 Twig 进行翻译
使用 twig 过滤器和 t() 函数。两者功能类似。如果您有另一个 twig 文件,那么它允许您从数组中进行翻译。
插件和主题语言翻译
通过在主题或插件的根目录 (/user/plugins/error/languages.yaml) 中创建 languages.yaml 文件来在插件和主题中提供翻译,并且必须包含所有支持的语言。
翻译覆盖
如果您想覆盖翻译,那么您必须将值对放在 user/languages/ 文件夹中的语言文件中。
高级
基于环境的语言处理
可以根据 URL 将用户路由到您网站的正确版本。如果您的网站网址为 http://english.yoursite.com,这是标准网址 http://www.yoursite.com 的别名,那么您可以创建一个配置为 /user/english.yoursite.com/config/system.yaml..
languages: supported: - fr - en
它使用倒置的语言顺序。在上面的代码中,fr 是默认语言。如果您通过将 en 保持在顶部并将 fr 保持在底部来更改顺序,则 en 将成为默认语言。
语言别名路由
在同一页面的不同语言版本之间切换非常困难,您可以在页面对象上使用 Page.rawRoute() 方法。它为单个页面的不同语言翻译获取相同的原始路由。将语言代码放在前面以获取正确的路由。
如果您在法语页面上,则自定义路由为 −
/ma-page-francaise-personnalisee
英语页面的自定义路由为 −
/my-custom-french-page
您获得法语页面的原始页面,这可能是 −
/blog/custom/my-page
然后只需添加您想要的语言,这将是您的新 URL。
/en/blog/custom/my-page
翻译支持
Grav提供简单的机制,通过 PHP 在 Twig 中提供翻译,供主题和插件使用。默认情况下启用该机制,如果未定义特定语言,则使用 en 语言。要启用或禁用,请转到 system.yaml 文件并进行更改。
languages: translations: true
您可以通过多种方式在不同位置提供翻译。第一个位置是 system/languages 文件夹。文件必须以 en.yaml、fr.yaml 等格式创建。每个 yaml 文件必须包含一个或多个密钥对的嵌套数组。
SITE_NAME: My Blog Site HEADER: MAIN_TEXT: Welcome to my new blog site SUB_TEXT: Check back daily for the latest news
基于会话的活动语言
您可以激活基于会话的活动语言存储。要启用,您必须在 system.yaml 中设置 session : enable : true 并启用语言设置。
languages: session_store_active: true
语言切换器
从 GPM 安装语言切换插件。
使用特定于语言的域进行设置
使用基于环境的语言处理配置来分配默认语言。将此选项添加到您的 system.yaml;必须将其设置为 true。
pages.redirect_default_route: true
将以下内容添加到您的 .htaccess 文件,并根据您的要求选择语言 slug 和域名。
# http://www.cheat-sheets.org/saved-copy/mod_rewrite_cheat_sheet.pdf # http://www.workingwith.me.uk/articles/scripting/mod_rewrite # handle top level e.g. http://Grav-site.com/de RewriteRule ^en/?$ "http://Grav-site.com" [R = 301, L] RewriteRule ^de/?$ "http://Grav-site.de" [R = 301, L] # handle sub pages, exclude admin path RewriteCond %{REQUEST_URI} !(admin) [NC] RewriteRule ^en/(.*)$ "http://Grav-site.com/$1" [R = 301, L] RewriteCond %{REQUEST_URI} !(admin) [NC] RewriteRule ^de/(.*)$ "http://Grav-site.de/$1" [R = 301, L]enable: true
主题和插件事件
主题通过插件架构与 Grav 交互的能力是 Grav 的另一个强大功能。要实现这一点,只需创建 user/themes/<mytheme>/<mytheme>.php(例如,默认 Antimatter 主题的 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 主题的结构没有固定的规则,除了 templates/ 文件夹中必须有与每个页面类型内容相关的 twig 模板。
由于页面内容和 twig 模板之间的紧密耦合,最好基于 下载页面 中提供的 Skeleton 包创建通用主题。
假设您想在主题中支持模块化模板,您必须创建 modular/ 文件夹并在其中存储 twig 模板文件。如果您想支持表单,那么您应该创建 form/ 文件夹并在其中存储表单模板。
蓝图
要为每个模板文件定义选项和配置的表单,请使用 blueprints/ 文件夹。这些将无法通过管理员面板进行编辑,并且是可选使用的。即使没有blueprints文件夹,主题也可以完全正常运行。
SCSS/LESS/CSS
如果您想使用 SASS 或 LESS 开发网站,则必须在user/themes/<mytheme>/scss/中创建子文件夹,或者如果您想要 LESS,则在less/中创建子文件夹以及 css/ 文件夹。
对于从 SASS 或 LESS 编译的自动生成的文件,将使用css-compiled/文件夹。在 Antimatter 主题中,使用了 SASS 的 scss 变体。
按照以下步骤在您的机器中安装 SASS。
在主题的根目录中,键入下面给出的命令来执行 scss shell 脚本。
$ ./scss.sh
- 键入以下命令直接运行它。
$ scss --sourcemap --watch scss:css-compiled
css-compiled/ 将包含所有已编译的 scss 文件,并且 css 文件将在您的主题内生成。
其他文件夹
建议创建单独的user/themes/<mytheme>/ 文件夹中的 images/、fonts/ 和 js/ 文件夹,用于存放主题中使用的所有图像、字体和 JavaScript 文件。
主题示例
我们目前讨论的 Antimatter 主题的整体文件夹结构如下所示。
Grav - 主题教程
在本章中,让我们创建一个 Grav 主题来理解这个概念。
Antimatter
当您安装 Grav 基础包时,会安装默认的 Antimatter 主题,该主题使用 Nucleus(一组简单的基本 CSS 样式)。Nucleus 是一个轻量级 CSS 框架,包含基本 CSS 样式和 HTML 标记,可提供独特的外观和感觉。
Bootstrap
让我们创建一个利用流行的 Bootstrap 框架 的主题。 Bootstrap 是一个开源且最流行的 HTML、CSS 和 JS 框架,可使前端 Web 开发更快、更轻松。
以下步骤描述了主题的创建 −
步骤 1:基本主题设置
正如我们在主题基础一章中学习到的,Grav 主题有一些关键元素,需要遵循这些元素才能创建新主题。
安装 Grav 基础包后,在 user/themes 文件夹下创建一个名为 bootstrap 的文件夹,如下所示。
在user/themes/bootstrap 文件夹中,创建 css/、fonts/、images/、js/ 和 templates/,如下所示。
在 user/themes/bootstrap 文件夹中创建一个名为 bootstrap.php 的主题文件,并将以下内容粘贴到其中。
<?php namespace Grav\Theme; use Grav\Common\Theme; class Bootstrap extends Theme {}
现在,在 themes/bootstrap 文件夹中创建一个主题配置文件 bootstrap.yaml,并在其中写入以下内容。
enable: true
我们将跳过 blueprints 文件夹,因为我们没有配置选项,并且将在本章中使用常规 CSS。
第 2 步:添加 Bootstrap
为了创建 bootstrap 主题,您必须在主题中包含 Bootstrap。因此,您需要通过单击此链接下载最新的 Bootstrap 包,如下所示。
解压包,您将看到三个文件夹,即 css、fonts 和 js。现在将这 3 个文件夹的内容复制到之前创建的 user/themes/bootstrap 中名称相似的文件夹中。
步骤 3:基本模板
正如我们在上一章中研究的那样,内容存储在 default.md 文件中,该文件指示 Grav 查找名为 default.html.twig 的渲染模板。此文件包含显示页面所需的一切。
有一个更好的解决方案,即利用 Twig Extends 标记,该标记允许您使用 blocks 定义基本布局。这将允许 twig 模板扩展基本模板并为基本模板中定义的块提供定义。
按照以下步骤创建一个简单的 Bootstrap 基本模板 −
在 user/themes/bootstrap/templates 文件夹中创建一个名为 partials 的文件夹。这用于存储我们的基本模板。
在 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 %} 中的 head 是可选的。
if 语句测试页面标题中是否设置了 meta description。如果未设置,则模板应使用 user/config/site.yaml 文件中定义的 site.description 进行渲染。
当前主题的路径由 theme_url 变量给出。
语法 {% do assets.add('theme://css/bootstrap.min.css',101) %> 用于使用 Asset Manager。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') %}
当分别调用 {{ assets.css() }> 或 {{ assets.js() }> 时,所有 JavaScript 标签和 CSS 链接标签均由模板呈现。
语法 {# ... #> 用于编写注释在 Twig 中。
要包含另一个 Twig 模板,请使用 {% include 'partials/header.html.twig' %> 标签。
模板中的内容由 {% block content %}{% endblock %> 标签提供。
要添加自定义 JavaScript 初始化或分析代码,请使用 {% block bottom %}{% endblock %> 标签作为模板的占位符。
步骤 5:标题模板
执行 {% include 'partials/header.html.twig' %> 时,Twig 渲染引擎会搜索 Twig 模板。因此,在 user/themes/bootstrap/templates/partials 文件夹内创建 header.html.twig 模板文件,内容如下。
<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 的模板文件。现在让我们在 user/themes/bootstrap/templates/ 文件夹中创建 default.html.twig 文件,其中包含以下内容。
{% extends 'partials/base.html.twig' %} {% block content %} {{ page.content }} {% endblock %}
上面的 default.html.twig 文件扩展了 partials/base.html.twig,并告诉基本模板使用 {{ page.content }> 作为 content 块。
第 7 步:主题 CSS
在 partials/base.html.twig 文件中,我们使用以下代码引用了自定义主题 css assets.add('theme://css/bootstrap-custom.css',100),用于存储您网站中使用的任何自定义 CSS。
现在让我们在 user/themes/bootstrap/css 文件夹中创建一个 bootstrap-custom.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 步:测试
使用新的 bootstrap 主题更改您的默认主题。打开 user/config/system.yaml 文件并编辑包含的行 −
pages: themes: antimatter
并将上述代码更改为 −
pages: theme: bootstrap
现在重新加载您的 Grav 网站,您将看到新安装的主题,如下所示。
Grav - Twig 过滤器和函数
在本章中,让我们学习Twig 过滤器和函数。过滤器用于按您想要的方式格式化数据,并提供所需的输出。函数用于生成内容。
Twig 模板是包含表达式和变量(由值替换)的文本文件。Twig 使用三种类型的标签。
输出标签 − 以下语法用于在此处显示评估的表达式结果。
{{ 在此处放置您的输出 }}
操作标签 −以下语法用于在此处执行语句。
{% 可执行语句放在此处 %}
注释标签 − 以下语法用于在 Twig 模板文件中写入注释。
{# 在此处写入您的注释 #}
Twig 过滤器
Twig 过滤器使用 | 字符将过滤器应用于 Twig 变量,后跟过滤器名称。参数可以像 Twig 函数一样在括号中传递。
下表显示了 Grav 中使用的 Twig 过滤器 −
Sr.No. | 过滤器 &描述 | 示例 |
---|---|---|
1 | Absolute URL 它采用相对路径并将其转换为绝对 URL。 |
'<img src="/some/path/img.jpg"/>' |absolute_url 转换为 − <img src="http://learn.getGrav.org/some/path/img.jpg" /> |
2 | Camelize 它将字符串转换为 CamelCase 格式。 |
'contact_us'| camelize 转换为 − ContactUs |
3 | Contains 如果找到字符串。 |
'这是一些字符串' | contains('some') 输出为 − 1 |
4 | Defined 您可以检查某些变量是否已定义。如果变量未定义,则可以提供默认值。 |
set header_image_width = page.header.header_image_width|defined(900) 如果未定义,则将 header_image_width 设置为值 900。 |
5 | Ends-With 您可以使用 Ends-With 过滤器确定字符串是否以给定字符串结尾。 |
'这是 ends-with 过滤器的示例' | ends_with('filter') 显示为 − True |
6 | FieldName 通过将点转换为数组表示法来过滤字段名称。 |
'field.name'|fieldName 显示为 − field[name] |
7 | Humanize 用于将字符串转换为人类可读的格式。 |
'some_text_to_read'|humanize 显示为 − 一些要阅读的文本 |
8 | Ksort 使用 key 对数组映射进行排序。 |
{% set ritems = {'orange':1, 'apple':2, 'peach':3}|ksort %} {% for key, value in ritems %}{{ key }}:{{ value }}, {% endfor %} 显示为 − apple:2, orange:1, peach:3, |
9 | Left Trim 用于删除字符串开头的空格并从字符串左侧删除匹配的字符。 |
'/strip/leading/slash/'|ltrim('/') 显示为 − strip/leading/slash/ |
10 | Markdown 使用 Grav 的 markdown 解析器将包含 markdown 的字符串转换为 HTML。 |
'## some text带有 markdown'|markdown 显示为 −
|
11 | MD5 可以使用此过滤器创建字符串的 md5 哈希值。 |
'something'|md5 它显示为 − 437b930db84b8079c2dd804a71936b5f |
12 | Monthize 通过使用Monthize过滤器,我们可以将整数天数转换为月份数。 |
'61'|monthize 它显示为− 2 |
13 | Nice Time 通过使用 Nice Time 过滤器,我们可以获得一个易于阅读的时间格式的日期作为输出。 |
page.date|nicetime(false) 它显示为 − 3 hrs ago |
14 | Ordinalize 可以使用 Ordinalize 过滤器将序数(如 1st、2nd、3rd)赋予整数。 |
'78'| ordinalize 显示为 − 78th |
15 | Pluralize 使用 Pluralize 过滤器可以将字符串转换为复数英语形式。 |
'child'|pluralize 显示为 − children |
16 | Randomize 此过滤器有助于随机化提供的列表。如果参数包含任何值,则这些值将从随机化中跳过。 |
{% set ritems = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten']|randomize(3) %} {% for ritem in ritems %}{{ ritem }}, {% endfor %} 它显示为 − one, two, three, eight, six, five, nine, seven, ten, four, |
17 | Right Trim 它与左修剪非常相似,只是它会从字符串右侧删除空格和匹配的字符。 |
'/strip/leading/slash/'|rtrim('/') 它显示为 − /strip/leading/slash |
18 | Singularize 使用 Singular 可以将字符串转换为英语单数版本过滤器。 |
'vehicles'|singularize 显示为 − vehicle |
19 | Safe Email 安全电子邮件过滤器用于将电子邮件地址转换为 ASCII 字符,从而使电子邮件更难被发送为垃圾邮件。 |
"someoneemailaddress@domain.com"|safe_email 输出为 − someoneemailaddress@domain.com |
20 | SortByKey 用于使用键对数组图进行排序。 |
{% set people = [{'email':'john@gmail.com', 'id':3}, {'email':'melw@fdd.com', 'id':1}, {'email':'nancy@fb.com', 'id':7}]|sort_by_key('id') %} {% for person in people %}{{ person.email }}:{{ person.id }}, {% endfor %} 它显示 − melw@fdd.com:1, john@gmail.com:3, nancy@fb.com:7, |
21 | Starts-With 您可以使用 Starts-With 过滤器确定字符串是否以给定字符串开头。 |
'这是 starts-with 过滤器的示例' |starts_with('this') 输出为 − true |
22 | Translate 以获取更多详细信息。 |
MY_LANGUAGE_KEY_STRING 它显示− '一些英文文本' |
23 | Translate Admin 它将字符串翻译成在 user.yaml 文件中设置的当前语言。 |
|
24 | Titleize 使用 Titleize 将字符串转换为 Title Case 格式。 |
'欢迎page'|titleize 显示为 − 欢迎页面 |
25 | UnderScoreize 使用 UnderScoreize 过滤器格式化。 |
'ContactUs'|underscorize 转换为 − contact_us |
26 | Truncate a string 您可以使用 Truncate 截断字符串或缩短字符串,必须指定字符数。 |
'一个句子。两个句子'|truncate(5) 它截断为 − 一个句子... 如果您不想在给定字符数后将字符串截断到最近的句子末尾,则可以使用 true 作为参数。 '一个句子。两个句子'|truncate(5, true) 它截断为 − 一个句子您也可以删除 HTML 文本,但应在 truncate 过滤器之前使用 striptags 过滤器。 '<p>一个 <strong>句子<strong>. 两个句子</p>'|striptags|truncate(5) 它显示为 − 一个 s |
Twig 函数
通过传递参数直接调用 Twig 函数。下表列出了函数 −
Sr.No. | 功能 &描述 | 示例 |
---|---|---|
1 | Array 此函数将值转换为数组。 |
array(value) |
2 | Authorize 此函数使经过身份验证的用户被授权查看资源并接受权限字符串或权限字符串数组。 |
authorize(['admin.statistics', 'admin.super']) |
3 | Dump 它接受一个有效的 twig 变量并将其转储到 Grav 调试器面板中。但是,应启用调试器才能查看消息选项卡值。 |
dump(page.header) |
4 | Debug 这与 dump() 函数的工作方式相同。 |
|
5 | Gist 此函数根据 Github Gist ID 创建 Gist 嵌入代码。 |
|
6 | Random String Generation 此函数将创建一个具有指定字符数的随机字符串。这些字符串可用作唯一 ID 或键。 |
generate_random_string(10) |
7 | Repeat 此函数将在给定的时间内重复字符串。 |
repeat('Grav ', 10) 将重复 Grav 10 次。 |
8 | String 生成指定字符长度的随机字符串。 |
ta (23) |
9 | Translate Array 它是一个与 |ta 过滤器连接的函数。 |
|
10 | Url 此过滤器将创建一个 URL,它还将 PHP URL 流转换为有效的 HTML 资源。如果无法解析 URL,则可以传递默认值。 |
url('theme://images/logo.png') | default('http://www.placehold.it/150x100/f4f4f4') |
11 | Translate 使用翻译过滤器, 字符串被翻译为 |t 过滤器。 |
t('SITE_NAME') 被翻译为 − Site Name |
Grav - 主题变量
在本章中,让我们了解 Grav 中的主题变量。在设计主题时,可以从 Twig 模板访问对象和变量,并且这些对象和变量由 Twig 模板框架读取和操作。
核心对象
Twig 模板有许多核心对象;每个对象都有一组变量和函数。
下表显示了带有简要说明的变量。
Sr.No. | 变量和描述 |
---|---|
1 | {{ base_dir }> 我们可以使用此变量获取 Grav 安装基本文件目录。 |
2 | {{ base_url }> 可以使用此变量访问 Grav 站点的基本 URL。 |
3 | {{ base_url_relative }> 它返回基本 URL 到 Grav 站点的相对路径。 |
4 | {{ base_url_absolute }> 它返回 Grav 站点基本 URL 的绝对路径。 |
5 | {{ theme_dir }> 它用于返回当前主题的文件目录文件夹。 |
6 | {{ theme_url }> 它用于返回当前主题的相对 URL。 |
config 对象
在 configuration.yaml 文件中,config 对象设置为访问任何 Grav 配置设置。
{{ config.pages.theme }}
它将返回当前配置的主题。
site 对象
为 config.site 对象提供别名,表示 site.yaml 文件中设置的配置。
stylesheets 对象
这些对象提供了一个用于存储 CSS 样式表资产的数组,可以循环使用该数组将 CSS 添加到模板中。
scripts 对象
这些对象提供了一个由 JavaScript 资产组成的数组,可以循环使用该数组并将 JavaScript 添加到模板中。
page 对象
由于 Grav 的结构是在 pages/ 文件夹中定义的,因此 page 对象 负责表示每个页面。 page 对象包含有关您当前正在处理的页面的所有信息。
下表显示了 page 对象的方法。
Sr.No. | 方法 &描述 | 示例 |
---|---|---|
1 | summary([size]) 它给出页面内容的要点,并提供指定的大小作为参数。 如果未指定大小,则从 system/config/site.yaml 文件中的 summary.size 变量中获取值。 您还可以在内容中使用分隔符 ===。分隔符之前的内容将用于摘要。 |
{{ page.summary }} 或者 {{ page.summary(80) }} |
2 | content() 它用于获取页面的整个 HTML 内容。 |
{{ page.content }} |
3 | headers() 它返回页面 YAML 前言中定义的页面标题。 |
title: About Us author: Johnson上述标题可以这样访问: The author of this page is: {{ page.header.author }} |
4 | media() 用于访问所有媒体文件,如图像、视频和其他文件。它将返回一个包含与页面相关的所有媒体的数组。 |
{% set first_image = page.media|first %} {% set my_pdf = page.media['myfile.pdf'] %} {% for image in page.media.images %} {{ image.html }} {% endfor %} |
5 | title() 设置为返回页面的标题,该标题在页面的 YAML 标头中定义。 |
title: My Page |
6 | menu() 返回 menu 变量的值,该值在页面的 YAML 标头中指定。如果未设置 title 变量,则默认为 title。 |
title: My Blog menu: my blog page |
7 | visible() 用于设置页面的可见性。通常,数值后跟句点的页面(即 01.foldername)显示在菜单中,不包含数值的文件夹名称(即 foldername)不可见。我们可以在页面标题中覆盖它。 |
title: About Us visible: true |
8 | routable() 通过使用它,我们可以确定页面是否可路由或不可路由,这意味着您是否可以在将浏览器指向该页面时接收返回的内容。不可路由的页面可用于插件、模板等,并且这些页面无法直接访问。这是在页面标题中设置的。 |
title: My Page routable: true |
9 | slug() 通过使用此变量,我们可以获得页面 URL 中显示的直接名称。 |
my-page |
10 | url([include_host = false]) 它用于返回页面的 URL |
{{ page.url }} { # could return /myfolder/mypage #} 或者 {{ page.url(true) }} {# could return http: //mysite.com/ myfolder/mypage #} |
11 | route() 用于返回页面的内部路由。 |
|
12 | home() 使用此变量可以确定页面是否配置为home页面。当页面配置为主页时,返回 true,未配置时,返回 false。您可以在system.yaml文件中找到此设置。 |
|
13 | root() 它确定当前页面是否是层次结构的根页面。如果是根页面,则返回 true;如果不是根页面,则返回 false。 |
|
14 | active() 您可以使用此变量确定浏览器是否正在访问当前页面。如果浏览器正在访问此页面,则返回 true;如果不是,则返回 false。 |
|
15 | modular() 通过使用此变量,我们可以确定此页面是否是模块化的。如果这是一个模块化页面,则返回 true,如果不是,则返回 false。 |
|
16 | activeChild() 此变量可以确定此 URI 的 URL 是否具有活动页面的 URL;或者,简单地说,当前 URL 中此页面的 URL。当您在导航上工作并且想要知道页面是否在同一个父页面上迭代时,这非常有用。 |
|
17 | find(url) 根据路由 URL 的指定,页面对象由此变量返回。 |
{% include 'modular/author-detail.html.twig' with {'page': page.find('/authors/ john-bloggs')} %} |
18 | collection() 此变量用于返回由集合页面标题确定的上下文的页面组。 |
{% for child in page.collection %} {% include 'partials /blog_item.html.twig' with {'page':child, 'truncate':true} %} {% endfor %} |
19 | isFirst() 如果当前页面是其兄弟页面中的第一个,则返回 true,否则返回 false。 |
|
20 | isLast() 如果当前页面是其兄弟页面的最后一个,则返回 true,否则返回 false。 |
|
21 | nextSibling() 参考当前位置,它从数组中返回下一个兄弟页面。 |
|
22 | prevSibling() 参考当前位置,它从数组中返回上一个兄弟页面。 |
|
23 | children() 如页面内容结构中定义,此变量返回子页面数组。 |
|
24 | orderBy() 此方法返回排序后的子页面顺序类型。可能包含的值有default、title、date和folder,这些值在页面标题中配置。 |
|
25 | orderDir() 此方法返回排序后的子页面顺序方向。并且值可以是asc(升序)或desc(降序)。通常这些值在页面标题中配置。 |
|
26 | orderManual() 此方法返回一个由手动页面排序组成的数组,此排序将适用于页面的任何子页面。此值通常在页面标题中设置。 |
|
27 | maxCount() 此变量表示最多允许返回多少个子页面。通常,该值在页面标题中指定。 |
|
28 | children.count() 此变量返回页面中有多少个子页面。 |
|
29 | children.current() 此变量将返回当前子项。 |
|
30 | children.next() 这将从子页面数组中返回下一个子项。 |
|
31 | children.prev() 这将从子页面数组中返回上一个子项。 |
|
32 | children.nth(position) 这将返回子项在子项数组中的位置。 |
|
33 | parent() 在嵌套树结构中,当您想要导航回父页面时,可以使用此变量。它将返回当前页面的父页面对象。 |
|
34 | isPage() 通过此变量,您可以确定此页面是否有实际的 .md 文件,或者它只是一个用于路由的文件夹。 |
|
35 | isDir() 通过此变量,您可以确定当前页面是否只是一个用于路由的文件夹。根据此返回 true 或 false。 |
|
36 | id() 这将返回页面的唯一 ID。 |
|
37 | modified() 它返回页面最后修改的时间戳。 |
|
38 | date() 此方法返回页面的日期时间戳。通常,这是在表示页面或帖子日期的标题中配置的。如果未提供任何值,则默认使用修改后的时间戳。 |
|
39 | filePath() 通过使用它,您可以获取页面的完整文件路径。 |
/Users/yourname/sites/ Grav/user/pages/ 01.home/default.md |
40 | filePathClean() 这将返回相对路径。 |
user/pages/ 01.home/default.md |
41 | path() 这将返回当前页面所在目录的完整路径。 |
/Users/yourname /sites/ Grav/user/pages /01.home |
42 | folder() 这将返回页面的文件夹名称。 |
|
43 | taxonomy() 这将返回与页面相关的分类数组。 |
pages 对象
Pages 对象表示为页面对象的嵌套树。此嵌套树在创建导航、站点地图或查找特定页面时非常有用。
children 方法
这将返回由子页面组成的页面对象数组。具有树状结构的页面对象可以遍历文件夹中的每个页面。
为了获取菜单的顶级页面,请使用以下代码。
<ul class = "navigation"> {% for page in pages.children %} {% if page.visible %} <li><a href = "{{ page.url }}">{{ page.menu }}</a></li> {% endif %} {% endfor %} </ul>
uri 对象
可以使用 Uri 对象的几种方法来访问当前 URI 的部分。
http://mysite.com/Grav/section/category/page.json/param1:foo/param2:bar/?query1 = baz&query2 = qux:
下表显示了 Uri 对象的方法。
Sr.No. | 方法 &描述 | 示例 |
---|---|---|
1 | path() 使用此方法可以访问当前 url 的部分。 |
uri.path = /section/category/page |
2 | paths() 使用此方法返回路径元素数组。 |
uri.paths = [section, category, page]) |
3 | route([absolute = false][, domain = false]) 此方法返回具有绝对或相对 URL 的路由。 |
uri.route(true) = http://mysite.com/Grav/ section/category/page 或者, uri.route() = /section/category/page) |
4 | params() 这将返回 URL 中的参数部分。 |
uri.params = /param1:foo/param2:bar |
5 | param(id) 这将返回 param 的值。 |
uri.param('param1') = foo |
6 | query() 使用此方法可以访问 URL 的查询部分。 |
uri.query = query1=bar&query2=qux |
7 | query(id) 使用此方法可以访问特定的查询项。 |
uri.query('query1') = bar |
8 | url([include_host = true]) 这将返回完整的 URL,其中可能包含也可能不包含主机。 |
uri.url(false) = Grav/section/ category/page/param:foo?query = bar |
9 | extension() 这将返回扩展名,如果未提供,则将返回 html。 |
uri.extension = json) |
10 | host() 这将返回 URL 的主机。 |
uri.host = mysite.com |
11 | base() 这将返回 URL 的基本部分。 |
uri.base = http://mysite.com |
12 | rootUrl([include_host = true]) 这将返回 Grav 实例的根 URL。 |
uri.rootUrl() = http://mysite.com/Grav |
13 | referrer() 此方法返回页面的引荐来源信息。 |
header 对象
它是原始页面的 page.header() 的替代品。循环遍历子页面时,使用原始页面标题更为合适。
内容对象
它是原始页面的 page.content() 的替代品。
分类对象
网站的所有分类信息都包含在全局分类对象中。
浏览器对象
Grav 使用内置支持以编程方式确定用户的平台、浏览器和版本。
{{ browser.platform}} # windows {{ browser.browser}} # chrome {{ browser.version}} # 24
添加自定义变量
可以通过多种方式添加自定义变量。如果您使用的是站点范围的变量,则将其放入 user/config/site.yaml 文件中,然后您可以按如下所示访问它。
{{ site.my_variable }}
如果变量仅适用于特定页面,则可以将其添加到 YAML 前言中,并使用 page.header 对象访问它。
例如 −
title: My Page author: John
作者姓名可以作为 − 访问
此页面的作者是:{{ page.header.author }}
添加自定义对象
通过使用插件,您可以添加自定义对象到 Twig 对象。这是一个高级主题,我们将在插件章节中看到更多信息。
Grav - 资产管理器
在本章中,让我们研究资产管理器。资产管理器是在 Grav 0.9.0 中引入的,以统一添加和管理资产(如 JavaScript 和 CSS)的界面。从主题和插件中添加这些资产将提供高级功能,例如 排序 和 资产管道。资产管道 用于最小化和压缩资产,从而降低浏览器的要求并减少资产的大小。
资产管理器是一个类,可通过插件事件挂钩在 Grav 中使用。您还可以通过使用 Twig 调用直接在主题中使用资产管理器类。
配置
资产管理器由一组配置选项组成。system.yaml 文件包含默认值;您可以在 user/config/system.yaml 文件中覆盖这些值。
assets: # 资产管理器 (JS、CSS) 的配置 css_pipeline: false # CSS 管道是将多个 CSS 资源统一到一个文件中 css_minify: true # 在管道传输过程中缩小 CSS css_rewrite: true # 在管道传输过程中重写任何 CSS 相对 URL js_pipeline: false # JS 管道是将多个 JS 资源统一到一个文件中 js_minify: true # 在管道传输过程中缩小 JS
主题中的资产
安装 Grav 时,Antimatter 主题是默认主题。它展示了如何在此主题中的 base.html.twig 文件中添加 CSS 文件的示例。
{% block stylesheets %} {% do assets.addCss('theme://css/pure-0.5.0/grids-min.css', 103) %} {% do assets.addCss('theme://css-compiled/nucleus.css',102) %} {% do assets.addCss('theme://css-compiled/template.css',101) %} {% do assets.addCss('theme://css/custom.css',100) %} {% do assets.addCss('theme://css/font-awesome.min.css',100) %} {% do assets.addCss('theme://css/slidebars.min.css') %} {% if browser.getBrowser == 'msie' and browser.getVersion == 10 %} {% do assets.addCss('theme://css/nucleus-ie10.css') %} {% endif %} {% if browser.getBrowser == 'msie' and browser.getVersion >= 8 and browser.getVersion <= 9 %} {% do assets.addCss('theme://css/nucleus-ie9.css') %} {% do assets.addJs('theme://js/html5shiv-printshiv.min.js') %} {% endif %} {% endblock %} {{ assets.css() }}
下面简要解释一下上面的代码。
在扩展该代码的模板中,可以替换或附加 block twig 标签中定义的区域,您可以看到此块中 do assets.addCss() 调用的次数。
{% do %> 标签允许您处理变量,而无需任何内置于 Twig 本身的输出。
可以使用 addCss() 方法将 CSS 资源添加到 Asset Manager。您可以通过传递数值作为第二个参数来设置样式表的优先级。对 addCss() 方法的调用会从 CSS 资源中呈现 HTML 标签。
JavaScript 资源的使用方式与 CSS 资源相同。 block twig 标签内的 JavaScript 资产如下所示。
{% block javascripts %} {% do assets.addJs('jquery',101) %} {% do assets.addJs('theme://js/modernizr.custom.71422.js',100) %} {% do assets.addJs('theme://js/antimatter.js') %} {% do assets.addJs('theme://js/slidebars.min.js') %} {% do assets.addInineJs('alert(\'This is inline!\')') %} {% endblock %} {{ assets.js() }}
添加资产
下表列出了不同类型的添加方法 −
Sr.No. | 方法和说明 |
---|---|
1 | add(asset, [options]) 根据文件扩展名,add 方法与资产相匹配。它是调用 CSS 或 JS 的直接方法之一的适当方法。您可以使用 options 来设置优先级。资产是否应包含在组合/最小化管道中由管道属性控制。 |
2 | addCss(asset, [options]) 使用此方法,您可以将资产添加到 CSS 资产中。根据第二个参数中设置的优先级,资产在列表中排序。如果没有设置优先级,则默认设置为 10。资产是否应包含在组合/最小化管道中由管道属性控制。 |
3 | addDirCss(directory) 通过此方法,您可以添加一个由 CSS 资产组成的实体目录,这些资产将按字母顺序排列。 |
4 | addInlineCss(css, [options]) 您可以使用此方法在内联样式标签内提供 CSS 字符串。 |
5 | addJs(asset, [options]) 通过此方法,您可以可以向 JS 资源中添加资源。如果未设置优先级,则将默认优先级设置为 10。管道属性确定资产是否应包含在组合/最小化管道中。 |
6 | addInlineJs(javascript, [options]) 此方法允许您在内联脚本标记内添加一串 JS。 |
7 | addDirJs(directory) 通过使用此方法,您可以添加由 JS 资产组成的实体目录,这些资产将按字母顺序排列。 |
8 | registerCollection(name,array) 此方法允许您注册一个由 CSS 或 JS 资源组成的数组,并为其指定一个名称,以便稍后使用 add() 方法使用它。如果您使用多个主题或插件,则此方法非常有用。 |
选项
有许多选项可以传递资源数组,如下所示 −
对于 CSS
priority − 它采用整数值,默认值为 100。
pipeline − 当资产未包含在管道中时,它设置为 false 值。默认值设置为 true。
对于 JS
priority − 它采用整数值,默认值为 100。
pipeline − 当资产未包含在管道中时,设置 false。默认值为true。
loading − 该选项支持empty、async、defer3个值。
group − 由一个字符串组成,用于指定组的唯一名称。默认值设置为 true。
示例
{% do assets.addJs('theme://js/example.js', {'priority':101, 'pipeline':true, 'loading':'async', 'group':'top'}) %}
渲染资产
可以使用以下 − 渲染 CSS 和 JS 资产的当前状态
css()
基于已添加到 Asset Manager 的所有 CSS 资产,css() 方法渲染由 HTML CSS 链接标签组成的列表。根据管道属性,列表可以包含最小化文件和单个/组合资产。
js()
根据已进入 Asset Manager 的所有 JS 资产,js() 方法呈现由 HTML JS 链接标签组成的列表。根据管道属性,列表可以包含最小化文件和单个/组合资产。
命名资产
Grav 允许您使用名称注册 CSS 和 JS 资产集合,以便您可以使用注册的名称将资产添加到 Asset Manager。这可以在 Grav 中使用名为命名资产的功能来实现。这些自定义集合在 system.yaml 中定义;任何主题或插件都可以使用这些集合。
assets: collections: jquery: system://assets/jquery/jquery-2.1.3.min.js bootstrap: - https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css - https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css - https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js
可以使用以下代码以编程方式使用 registerCollection() 方法 −
$assets = $this->Grav['assets']; $bootstrapper_bits = [https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css, https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css, https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js]; $assets->registerCollection('bootstrap', $bootstrap_bits); $assets->add('bootstrap', 100);
分组资产
Grav 0.9.43 引入了一项名为分组资产的新功能,它允许您在添加资产时传递由可选group组成的选项数组。当您在页面的特定部分需要一些 JS 文件或内联 JS 时,此功能非常有用。
通过使用选项语法,您必须在添加资产时指定组,如下所示。
{% do assets.addJs('theme://js/example.js', {'priority':102, 'group':'bottom'}) %}
如果没有为资产设置组,则将head设置为默认组。如果您希望这些资产在底部组中呈现,则必须在主题中添加以下内容。
{{ assets.js('bottom') }}
静态资产
每当您想在不使用资产管理器的情况下引用资产时,都可以使用 url() 辅助方法。例如,当您想要从主题中引用图像时,可以使用以下语法。
<img src = "{{ url("theme://" ~ widget.image) }}" alt = "{{ widget.text|e }}" />
url() 辅助方法可选地采用第二个参数,通过使用 true 或 false 值使 URL 包含域和架构。默认情况下,该值设置为 false,仅显示相对 URL。
示例
url("theme://somepath/mycss.css", true)
Grav - 主题定制
在本章中,让我们学习主题定制。有几种方法可以定制您的主题。Grav 提供了许多特性和一些功能,可轻松定制您的主题。
自定义 CSS
您可以提供自己的 custom.css 文件来定制您的主题。Antimatter 主题通过使用 Asset Manager 引用 css/custom.css 文件。如果未找到对 CSS 文件的引用,则 Asset Manager 将不会添加对 HTML 的引用。在 Antimatter 的 css/ 文件夹中创建 CSS 文件将覆盖默认 CSS。例如 −
custom.css
body a { color: #FFFF00; }
默认链接颜色被覆盖并设置为黄色。
自定义 SCSS/LESS
提供自定义 CSS 文件的另一种方法是使用 custom.scss 文件。SCSS(Syntactically Awesome Style Sheets) 是一个 CSS 预处理器,它允许您通过使用运算符、变量、嵌套结构、导入、部分和混合来高效地构建 CSS。Antimatter 是使用 SCSS 编写的。
为了使用 SCSS,您需要 SCSS 编译器。您可以使用命令行工具和 GUI 应用程序在任何平台上安装 SCSS 编译器。Antimatter 使用 scss/ 文件夹来放置您的所有 .scss 文件。编译后的文件存储在 css-compiled/ 文件夹中。
应使用以下命令监视 SCSS 文件是否有任何更新 −
scss --watch scss:css-compiled
上述命令告诉 SCSS 编译器监视名为 scss 的目录,并且每当 css-compiled 文件夹更新时,SCSS 编译器都应对其进行编译。
您可以将自定义 SCSS 代码保存在 scss/template/_custom.scss 文件中。将代码保存在此文件中有很多好处。
SCSS 文件和其他 CSS 文件的任何更新都会编译到 css-compiled/template.css 文件中
您可以访问主题中使用的任何 SCSS,并使用所有可用的变量和混合。
为了更轻松地进行开发,您可以访问标准 SCSS 的所有特性和功能。
下面显示了 _custom.scss 文件的示例 −
body { a { color: darken($core-accent, 20%); } }
升级主题时,所有自定义 CSS 都将被覆盖。这是选择这种方式自定义主题的主要缺点。这可以通过使用主题继承来解决。
主题继承
主题继承是修改或自定义主题的最佳方式,只需几个设置即可完成。基本思想是将主题定义为您要继承的基本主题,只有一些部分可以修改,其余部分由基本主题处理。使用主题继承的优点是,每当更新基本主题时,自定义的继承主题不会受到直接影响。要实现这一点,您需要遵循以下步骤。
要存储新主题,请在 /user/themes/ 文件夹中创建名为 mytheme/ 的新文件夹。
接下来,您需要在新建的 /user/themes/mytheme/ 文件夹下创建一个名为 mytheme.yaml 的新主题 YAML 文件,其中包含以下内容。
streams: schemes: theme: type: ReadOnlyStream prefixes: '': - user/themes/mytheme - user/themes/antimatter
在 /user/themes/mytheme/ 文件夹下创建一个名为 blueprints.yaml 的 YAML 文件,内容如下。
name: MyTheme version: 1.0.0 description: "Extending Antimatter" icon: crosshairs author: name: Team Grav email: devs@getgrav.org url: http://getgrav.org
现在我们将了解如何定义由基本元素组成的主题 blueprints.yaml。可以为表单定义提供更多详细信息,以控制您的表单功能。可以查看 blueprints.yaml 文件以了解更多详细信息。
在您的 user/config/system.yaml 文件中编辑 pages: theme: 选项,将您的默认主题更改为新主题,如下所示。
pages: theme: mytheme
现在新主题已创建,Antimatter 将成为此新 mytheme 主题的基础主题。如果您想要修改特定的 SCSS,我们需要配置 SCSS 编译器,以便它首先查找您的 mytheme 主题,其次查找 Antimatter 主题。
它使用以下设置 −
首先复制位于 antimatter/scss/ 文件夹中的 template.scss 文件,并将其粘贴到 mytheme/scss/ 文件夹中。此文件将包含对各种文件(如 template/_custom.scss 和子文件)的所有 @import 调用。
load-path 指向包含大量 SCSS 文件的 antimatter/scss/ 文件夹。要运行 SCSS 编译器,您需要提供 load-path ,如下所示。
scss --load-path ../antimatter/scss --watch scss:css-compiled
现在,在 mytheme/scss/template/ 下创建一个名为 _custom.scss 的文件。此文件将包含您的所有修改。
当自定义 SCSS 文件发生更改时,所有 SCSS 文件将自动重新编译到 template.css 中,该文件位于 mytheme/css-compiled/ 文件夹下,然后 Grav 准确引用此文件。
Grav - 插件基础
在本章中,我们将了解插件如何作为 Grav 中的附加功能工作。插件是一种提供附加功能的软件,该功能最初并非由 Grav 的核心功能完成。
可以上传 Grav 插件来扩展网站的功能。插件用于使您的工作更轻松。依赖注入容器有助于访问 Grav 中的关键对象。在整个生命周期中,借助Grav 的事件钩子,我们可以根据需要操纵 Grav,还可以访问 Grav 知道的任何内容。我们将在Grav - 事件钩子一章中详细研究 Grav 事件钩子。
依赖注入是一种软件设计模式,其中组件被赋予其依赖关系,而不是在组件内对其进行硬编码。
Grav 有许多免费插件可用于显示博客存档、站点地图、搜索引擎、表单、灯光滑块等。您可以从此处下载插件。在插件文件夹中,您可以用唯一的名称存储插件;名称应与插件的功能相关,并且不应包含任何大写字母、下划线或空格。我们将在Grav - 插件教程一章中学习如何使用插件。
功能强大
插件易于编写、灵活且功能强大。共有 46 个插件,其功能包括显示站点地图、提供面包屑、显示博客档案等。
基本功能
当 Grav 安装在您的系统上时,您可以看到 <your_folder_name>/user/plugins 文件夹中有两个插件。
错误插件
问题插件
错误插件 −它用于显示 HTTP 错误,即当给定 URI 没有可用的请求页面时,404 页面未找到。
问题插件 − 它用于检测有关权限、托管设置和丢失文件夹的问题。当您安装新的 Grav 来识别此类问题时,它很有用。
Grav - 插件教程
在本章中,我们将深入研究如何设置和配置插件。此外,我们还将了解插件的结构以及如何显示随机页面。插件是一种提供额外功能的软件,该功能最初并非由 Grav 的核心功能完成。
在本文中,我们将使用随机插件显示随机页面。在使用此插件之前,我们将了解随机插件的一些要点。
您可以使用此插件通过使用 URI 作为 /random 来显示随机页面。
创建过滤器以利用页面中指定的分类法。您可以创建为 category : blog。
您可以使用过滤器选项显示随机页面;这会通知 Grav 使用与随机页面中显示的相同内容。
设置插件
在使用实际插件之前,请按照以下步骤创建插件的基本设置。
在 user/plugins 文件夹下创建名为 random 的文件夹。
在 user/plugins/random 文件夹下,创建两个文件,即 −
random.php 用于插件代码
random.yaml 用于配置
插件配置
要使用随机插件,我们需要有一些配置选项。我们将在 random.yaml 文件下写入以下几行。
enabled:true route:/random filters: category:blog
Random 创建您定义的路线。根据分类过滤器,它会选择一个随机项目。过滤器的默认值为 'category: blog',用于随机选择。
插件结构
以下代码可用于插件结构。
<?php namespace Grav\Plugin; use Grav\Common\Page\Collection; use Grav\Common\Plugin; use Grav\Common\Uri; use Grav\Common\Taxonomy; class RandomPlugin extends Plugin { } ?>
我们在插件中使用了一系列类,使用 use 语句,这使其更具可读性,也节省了空间。命名空间 Grav\Plugin 必须写在 PHP 文件的顶部。插件名称应以 titlecase 形式书写,并使用 Plugin 进行扩展。
您可以将函数 getSubscribedEvents() 订阅到 onPluginsInitialized 事件;这决定了插件订阅了哪些事件。这样,您可以使用该事件订阅其他事件。
public static function getSubscribedEvents() { return [ 'onPluginsInitialized' => ['onPluginsInitialized', 0], ]; }
现在让我们使用 random.yaml 文件中配置的用于路由页面的 RandomPlugin 类下的 onPluginInitialized 事件。
方法 onPluginInitialized() 包含以下代码 −
public function onPluginsInitialized() { $uri = $this->grav['uri']; $route = $this->config->get('plugins.random.route'); if ($route && $route == $uri->path()) { $this->enable([ 'onPageInitialized' => ['onPageInitialized', 0] ]); } }
Uri 对象包含当前 uri、路由信息。config 对象指定路由随机插件的配置值并将其存储在路由对象中。
现在我们将配置的路由与当前 URI 路径进行比较,以通知插件监听 onPageInitialized 事件。
显示随机页面
您可以使用以下方法使用代码显示随机页面 −
public function onPageInitialized() { $taxonomy_map = $this->grav['taxonomy']; $filters = (array) $this->config->get('plugins.random.filters'); $operator = $this->config->get('plugins.random.filter_combinator', 'and'); if (count($filters)) { $collection = new Collection(); $collection->append($taxonomy_map->findTaxonomy($filters, $operator)->toArray()); if (count($collection)) { unset($this->grav['page']); $this->grav['page'] = $collection->random()->current(); } } }
如代码所示,
将分类对象分配给变量 $taxonomy_map。
使用 config 对象从插件配置中获取使用已配置分类法的过滤器数组。我们使用的项目为 category : blog。
我们使用 collection 将随机页面存储在 $collection 中。将与过滤器匹配的页面附加到 $collection 变量。
取消设置当前页面对象,并将当前页面设置为在集合中显示为随机页面。
最后,我们将看到插件显示随机页面的完整代码,如下所示 −
<?php namespace Grav\Plugin; use Grav\Common\Page\Collection; use Grav\Common\Plugin; use Grav\Common\Uri; use Grav\Common\Taxonomy; class RandomPlugin extends Plugin { public static function getSubscribedEvents() { return [ 'onPluginsInitialized' => ['onPluginsInitialized', 0], ]; } public function onPluginsInitialized() { $uri = $this->grav['uri']; $route = $this->config->get('plugins.random.route'); if ($route && $route == $uri->path()) { $this->enable([ 'onPageInitialized' => ['onPageInitialized', 0] ]); } } public function onPageInitialized() { $taxonomy_map = $this->grav['taxonomy']; $filters = (array) $this->config->get('plugins.random.filters'); $operator = $this->config->get('plugins.random.filter_combinator', 'and'); if (count($filters)) { $collection = new Collection(); $collection->append($taxonomy_map->findTaxonomy($filters, $operator)->toArray()); if (count($collection)) { unset($this->grav['page']); $this->grav['page'] = $collection->random()->current(); } } } }
打开浏览器并输入 localhost/folder_name/random 以查看随机页面,如以下屏幕截图所示 −
Grav - 事件钩子
在本章中,我们将研究 Grav 中的 事件钩子。在 插件 一章中,您将看到,插件的逻辑包含在两种方法中。这些方法是 onPluginsInitialized 和 onPageInitialized;这些方法类似于事件钩子。要了解更多信息并控制 Grav 插件的功能,您需要检查事件钩子的可用性。事件钩子从始至终与 Grav 有着直接的关系。您必须了解调用钩子的顺序以及调用这些钩子时可用的内容。
下表列出了在页面处理期间激活的核心 Grav 事件钩子。
Sr.No. | 事件和说明 |
---|---|
1 | onFatalException 如果 PHP 出现致命异常,您可以随时触发此事件。 Problem插件使用它来管理显示完整解释列表,以解释为什么 Grav 会出现致命错误。 |
2 | onPluginsInitialized 这是 Grav 中可用的第一个插件事件。引入了以下对象,如下所示 −
|
3 | onAssetsInitialized 这指定 assets 管理器已加载并可供使用和管理。 |
4 | onPageNotFound 如果您发现了意外页面,则可以忽略此事件。目前,错误插件用于指定 404 错误 页面。 |
5 | onPageInitialized 这通过加载到 Page 对象中的 URL 指定请求的页面。 |
6 | onOutputGenerated 这通过 Twig 模板 引擎指定输出过程。目前,它只是一个 HTML 字符串。 |
7 | onOutputRendered 这是一个输出过程,发送到显示器。 |
8 | onShutdown 这是一个新的非常强大的事件,允许您执行操作。这是在 Grav 完成处理并关闭与客户端的连接后完成的。此单个操作不需要与用户进行任何交互,因此会影响性能。它包括用户跟踪和作业处理。 |
9 | onBeforeDownload 这是一个新事件,它传递到包含文件的事件对象中。它允许用户执行日志记录、授予和忽略下载所述文件的权限。 |
Twig 事件钩子
Twig 有自己的事件钩子集合可供使用,如下所述。
Sr.No. | 事件和描述 |
---|---|
1 | onTwigTemplatePaths 模板路径的基本位置设置在 Twig 对象 上。此事件用于添加 Twig 将搜索模板路径的其他位置。 |
2 | onTwiglnitialized 它初始化 Twig 模板引擎。 |
3 | onTwigExtensions 它指定核心 twig 扩展已准备好使用。此事件钩子允许您添加自己的 Twig 扩展。 |
4 | onTwigPageVariables 此 Twig 进程允许您直接访问页面,即您可以在 YAML 标头页面中找到 process:twig:tru。在这里,您可以向 Twig 添加任何变量,并且在此进程中应该可供 Twig 访问。 |
5 | onTwigSiteVariables 在此进程中,您将按 Twig 方法按顺序看到完整的站点模板。此外,您可以在此过程中向 Twig 添加任何变量。 |
集合事件挂钩
下表列出了集合事件挂钩。
Sr.No. | 事件 &描述 |
---|---|
1 | onCollectionProcessed 在此部分中,一旦完成该过程,您就可以控制一个集合。 |
页面事件挂钩
下表列出了页面事件挂钩的集合。
Sr.No. | 事件 &描述 |
---|---|
1 | onBuildPagesInitialized 此事件对于插件控制内容和缓存结果很有用。一旦激活此事件,页面将被回收。当缓存已过期或需要刷新时,就会发生这种情况。 |
2 | onBlueprintCreated 此事件有助于处理和管理表单。 |
3 | onPageContentRaw 在此过程中,当找到页面时,标题是固定的,但内容不会固定。您将看到 Grav 系统中触发每个页面。如果您已清除缓存或正在清除缓存,则会发生此事件。 |
4 | onPageProcessed 一旦页面经过测试并修复,Grav 系统中的每个页面都会被关闭。在这种情况下,性能并不重要,因为它不会在缓存的页面上播放。 |
5 | onPageContentProcessed 一旦页面的 content() 技术修复了页面内容,您就可以看到此事件被关闭。如果您想要对后修复内容执行操作,但要确保结果已缓存,则此事件非常有用。 |
6 | onFolderProcessed 一旦测试并修复了文件夹,Grav 系统中的每个文件夹都会被关闭。在这种情况下,性能并不重要,因为它不会在缓存的页面上播放。 |
Grav - 管理员简介
Grav 管理面板插件是 Grav 的 Web 图形用户界面 (GUI)。它可以轻松创建和修改页面。它是一个可选插件,Grav 的有效工作并不完全依赖于此。管理员提供有限的视图以方便使用 Grav。
功能
以下是管理面板的功能 −
启用或禁用插件管理器列表中的插件。
您可以轻松创建、编辑、复制和删除页面。
最新页面更新列表显示在仪表板上。
只需单击一下即可轻松查看最新可用更新。
使用搜索框从列表中查找特定页面。
它包含忘记密码的功能。
可以通过拖放方法上传媒体文件。
允许通过 yaml 或普通和专家格式进行编辑模式。
仪表板包括站点活动、最新页面更新和维护状态。
它包括 Ajax 支持的备份和清除缓存功能。
它包括站点和系统配置管理。
由 GPM 支持的新插件和主题安装。
用户登录时提供自动密码加密功能。
它提供代码编辑器,通过即时 Grav 支持的预览突出显示强大的语法。
可以使用主题管理器完成已安装主题的列表和配置。
它还管理登录的用户。
安装
要访问管理插件,我们需要运行最新的 Grav。您可以在 CLI(命令行界面)中运行以下命令。
$ bin/gpm selfupgrade -f
selfupgrade 用于将 Grav 更新到可用的最新版本。-f 用于刷新 GPM(Grav 包管理器)索引。
我们需要安装 admin、form、email 和 login 插件以使您的管理插件正常运行。由于所有插件都有依赖关系,因此当安装管理插件时提示您安装其他插件时,您需要同意;这些插件可通过 GPM(Grav 包管理器)获得。我们将在Grav - GPM一章中进一步研究 GPM。
以下命令用于使用命令提示符安装管理插件。
$ bin/gpm install admin
手动安装
我们可以通过单独下载以下插件来手动安装管理面板 −
下载所有插件后,解压所有 zip 文件并存储在 <your_folder_name>/user/plugins 文件夹中。在 Plugin 文件夹中,您可以存储具有唯一名称的插件;名称应与插件的功能相关。该文件夹可以重命名为 admin/、email/、form/ 和 login/。有必要将所有四个插件一起存储在 Plugin 文件夹中;否则管理面板将无法正常工作。
创建用户
我们可以使用命令行界面创建用户帐户。使用以下命令创建用户帐户。
$bin/grav newuser
否则,您也可以通过编写以下代码行手动创建用户帐户 −
email: admin@tutorials.com access: admin: login: true super: true site: login: true fullname: 'Tutorials Point' title: tp password: 'Password'
将上述行保存在 <your_folder_name>/user/account/admin.yaml 文件中。您用于保存上述代码的名称将是您登录的 用户名,即 admin。您可以根据需要编辑 电子邮件、全名、标题 和 密码。
使用
您可以通过将浏览器指向 localhost/<your_folder_name>/admin 来访问管理面板,您将看到如下所示的屏幕。您可以在 yaml 文件中设置 用户名 和 密码,如 创建用户 部分中所述。
Grav - 管理仪表板
在本章中,我们将研究 Grav 中的 管理面板仪表板。仪表板是 Grav 管理面板插件的信息神经中枢。您可以检查 流量统计、创建新备份、Grav 更新、维护信息、查看最新页面更新,并可以借助此单个页面清除 Grav 的缓存。
步骤 1 −您可以根据需要为用户指定权限并更改仪表板的内容。仪表板的屏幕将类似于以下屏幕截图。
步骤 2 −现在,您将在仪表板中看到缓存和更新检查的功能。
您将在仪表板菜单顶部看到两个选项卡。
- 清除缓存
- 检查更新
清除缓存
它指定删除所有缓存内容,包括图像和资产的缓存。
您可以在下拉菜单中看到更多功能,如下所示。
所有缓存 − 它指定删除所有缓存
仅资产 −它指定仅删除资产的缓存。
仅图像 − 它指定仅删除图像的缓存。
仅缓存 − 它定义为仅删除缓存。
检查更新
此选项卡指定检查您网站的更新。如果有新的更新可用,您将在仪表板上收到通知。您将收到支持的插件、主题甚至 Grav 的更新。
维护和统计
此部分可让您了解有关您网站的重要信息。
维护
此部分为您提供完全最新的 Grav 功能的百分比图。您将在维护和统计部分上方看到所需更新的通知。
更新 − 一旦有新更新可用,就会出现更新按钮。接下来,您可以单击它并更新您的插件和主题。您将在通知栏中看到立即更新 Grav按钮,该按钮可更新 Grav 的核心部分。
备份 − 在此部分,您可以看到图表,显示您有多长时间没有备份您的网站。这可以通过生成和下载 zip 文件来执行,将其保存为您网站数据的备份。
统计
它显示了过去一天、一周和一个月内您网站上的访客流量的简单快速图表。它显示了按星期几划分的条形图。
步骤 3 − 接下来,您将看到最新页面更新的详细信息,如下所示。
此部分可让您了解有关 Grav 网站中页面最新修改内容的更多信息。接下来,每次刷新页面时,它都会为您生成最近更新的列表。
您可以从列表中单击页面的标题;这会将您重定向到管理部分中的页面编辑器。
管理页面按钮将您重定向到管理面板的页面。
Grav - 配置系统
在本章中,我们将研究 Grav 管理面板中的配置系统。您可以借助配置页面直接配置站点系统的设置。此外,您还将看到有关服务器属性的简要说明,包括 PHP、服务器环境和其他几个控制站点性能的组件。
"系统"选项卡允许您修改 /user/config/system.yaml 文件中的设置。这会影响 Grav 操作的许多主要系统相关功能。设置可以分为不同的部分,向您展示 Grav 性能的不同功能。
以下是系统选项卡中显示的配置部分的详细列表 −
内容
在此部分中,您可以修复站点的内容处理的基本属性,如下所示。
主页 − 指定您想要为站点显示的主页。
默认主题 − 显示站点的主要默认主题。
进程 − 控制页面的处理方式。可以针对每个页面进行设置,而不是全局设置。
时区 − 设置服务器中的默认时区。
短日期格式 − 显示短日期格式。
长日期格式 − 显示长日期格式。
默认排序 − 页面按此顺序显示在列表中。
默认排序方向 − 指定列表中页面的方向。
默认页数 − 定义列表中的最大默认页数。
基于日期的发布 −它会自动按照日期发布帖子。
事件 − 它指定启用或禁用事件。禁用将导致插件损坏。
重定向默认路由 − 它定义默认路由并自动重定向到页面。
语言
您可以在此区域设置多语言功能,如下所示。
支持 −它指定用逗号分隔的两个字母语言代码列表,即 en、fr、de。
翻译已启用 − 启用 Grav、插件和扩展中的翻译。
翻译后备 − 如果不存在活动语言,它指定替代支持的翻译。
部分中的活动语言 − 您可以将活动语言存储在该区域中。
主页重定向包含语言 − 根据需求在主页重定向 (/en) 中包含语言。
主页重定向包含路由 − 它指定重定向管理员主页根目录。
从浏览器设置语言 −它指定浏览器的语言。
覆盖语言环境 − 它指定覆盖语言环境。
HTTP 标头
此部分用于设置 HTTP 标头 选项。此设置有助于基于浏览器的缓存和优化。
Expires − 定义到期时间并以秒为单位设置值。
Last Modified − 设置上次修改标头,有助于优化代理和浏览器缓存。
ETag − 定义 e 标签标头 以标识已修改的页面。
Vary Accept Encoding −您应该将 Vary: HTTP 标头设置为 Accept。这将有利于代理上的缓存。
Markdown
在本节中,我们将研究 Grav 如何管理 Markdown 及其功能以启用 Markdown Extra。它帮助用户并构成 Grav 页面内容的大部分。
Markdown Extra − 它指定对 Markdown Extra 的默认支持。
自动换行符 − 它指定 markdown 中的换行符。
自动 URL 链接 −它指定将 URL 转换为 HTML 超链接。
转义标记 − 它指定将标记选项卡转换为 HTML 对象。
缓存
在此部分中,您可以配置站点的主要缓存功能。 Grav 结合了缓存功能,可帮助为用户构建最快的平面文件 CMS 选项。
缓存 − 这指定全局切换ON/OFF以启用/禁用 Grav 缓存。
缓存检查方法 −这定义了文件、文件夹和无的缓存检查方法。
缓存驱动程序 − 这指定为用户选择缓存驱动程序。自动检测缓存驱动程序找到最佳缓存驱动程序。
缓存前缀 − 这指定 Grav 键的一部分的标识符。仅在需要时更改它,否则不要更改它。
生存期 − 这以秒为单位定义缓存生存期,0=无限。
Gzip 压缩 − 要提高性能,请启用 Grav 页面的 Gzip 压缩。
Twig 模板
在本节中,Grav 重点介绍了其 Twig 模板 功能。您可以在此处配置 Twig 缓存、调试和修改跟踪设置。
Twig 缓存 − 指定控制 Twig 缓存系统。启用后,性能最佳。
Twig 调试 − 定义不加载 Twig 调试器扩展的选项。
检测更改 − 在 Twig 模板中所做的任何更改,都会自动重新编译 Twig 缓存。
自动转义变量 − 所有变量均为自动转义;这可能会对您的网站造成损害。
资产
此部分用于处理资产,包括 CSS 和 JavaScript 资产,如下所示。
CSS 管道 − 将多个 CSS 资源集成到一个文件中。
CSS 最小化 − 在管道化过程中,CSS 会被最小化。
CSS 最小化 Windows 覆盖 − 默认情况下设置为 False,它为 Windows 平台定义最小化覆盖。
CSS 重写 − 在管道化过程中,CSS 相对 URL 会被重写。
JavaScript 管道 − 将多个 JavaScript 资源集成到一个文件中。
JavaScript 最小化 − 在管道化过程中,JS 会被最小化。
在资产上启用时间戳 −资产上的时间戳已启用。
集合 − 资产集合单独添加。
错误处理程序
在网站开发期间,此部分对于管理 Grav 错误报告非常有用。
显示错误 − 显示完整的回溯样式错误页面。
记录错误 −日志错误显示在 /logs 文件夹中。
调试器
这类似于错误处理,调试工具集成在 Grav 中以定位和排除错误。
调试器 − 调试器及其设置已启用。
调试 Twig − Twig 模板调试器已启用。
关闭连接 −在调用 onShutdown() 之前,您需要关闭连接。
媒体
此部分用于管理 Grav 的 媒体 内容。您可以在此处配置图像质量、文件上传大小和许多媒体处理选项。
默认图像质量 − 在缓存或重新采样图像时使用默认图像质量。
缓存所有图像 − 所有图像都通过 Grav 的缓存系统运行,即使它不包含媒体操作。
图像调试水印 −您可以指示图像的像素深度,同时在图像上显示叠加层,即使用视网膜。
文件上传限制 − 它定义最大上传大小(以字节为单位)(0 为无限大)。
在媒体上启用时间戳 − 根据上次修改日期为每个媒体项目添加时间戳。
会话
下面提到的功能可帮助您启用 会话 支持。
启用 −这指定了 Grav 中的会话支持。
超时 − 这指定了会话超时(以秒为单位)。
名称 − 这指定了会话 cookie 的名称,由标识符开发和应用。
高级
在此部分中,您将看到高级系统选项。
绝对 URL − 这指定 base_url 的绝对或相对 URL。
参数单独 −您可以在参数分隔符的帮助下更改 Windows 上的 Apache。
Grav - 配置站点
在本章中,我们将研究如何在 Grav 的管理面板中配置站点。您可以借助配置页面直接配置站点系统的设置。站点选项卡允许您修改 /user/config/system.yaml 文件中的设置。此选项卡允许您修改影响站点相关功能的选项和字段,例如站点中使用的名称、默认作者等。
以下是您可以在站点选项卡中看到的不同配置设置。
默认
在此区域中,您可以设置基本属性来管理站点的内容。在这里,您可以设置多个内容显示选项,例如主页、默认主题等。
网站标题 − 这指定了您网站的标题。
默认作者 − 这指定了主题或页面内容中使用的默认作者姓名。
默认电子邮件 − 这指定了主题或页面中的默认电子邮件。
分类法类型 −这指定了您在页面中使用的分类类型。
页面摘要
页面摘要能够向您呈现页面内容的小预览。您可以在页面中,借助分隔符在摘要内容之间定义一个"截止"点。
已启用 − 这指定是否启用页面摘要。
摘要大小 − 这定义了在页面中用作内容摘要的字符数。
格式 − Short 使用第一次出现的分隔符,Long 忽略摘要分隔符。
分隔符 − 指定摘要分隔符。默认值为默认的"==="。您可以在页面摘要中使用它,并在打开段落后发布它。
元数据
元数据在页面中起着重要作用,可以改善您的 SEO。您可以在此处设置多个元数据属性,以便您的链接可以根据需求出现在多个搜索引擎和社交供稿中。
这指定了默认元数据值,稍后您可以进行修改。
重定向和路由
这允许您设置重定向和路由到您网站的其他页面。
自定义重定向 − 这定义了指向其他页面的路由。标准正则表达式的替换是有效的。
自定义路由 −路由到其他页面的别名。标准正则表达式的替换有效。
Grav - 管理面板页面
在本章中,我们将了解管理面板页面在 Grav 中的工作原理。页面可让您轻松创建、编辑或删除网站内容。在管理面板页面中,您可以查看为您的网站创建的页面列表,还可以为您的网站创建新的模块化或非模块化页面。
添加新页面
您可以看到 pages 管理面板顶部有三个按钮,如以下屏幕截图所示。
返回 −这将返回到管理页面的仪表板。
添加页面 − 这将创建一个新的非模块化内容。
添加模块化 −这将创建新的模块化内容。
添加页面
它会为您的网站创建非模块化页面,其中包含向您的网站添加页面时的各种字段,例如标题、文件夹名称、父根目录等。
当您单击添加页面按钮时,会出现一个弹出窗口,如下所示 −
它包含以下字段 −
页面标题 − 在这里输入页面的标题。
文件夹名称 −这是输入页面的文件夹名称,或者输入标题后会自动生成名称。
父页面 − 这将设置新创建页面的父页面。
页面文件 − 这将在页面中显示所选主题模板。
可见 − 通过将页面设置为自动、是或否,可使页面在导航栏中可见。
在字段中填写完所有信息后,单击继续按钮。它会将您重定向到页面编辑器。
添加模块化页面
模块化页面允许从其子页面创建单个页面。它能够从模块化内容页面构建复杂的单页布局。
当您单击添加模块按钮时,会出现一个弹出窗口,如下所示 −
窗口包含以下字段 −
页面标题 − 在这里我们输入模块化页面的标题。
文件夹名称 − 这是输入页面的文件夹名称,或者输入标题后会自动生成名称。
页面 − 这将为您新创建的模块化子页面设置父页面。
模块化模板 − 这将选择要为您的模块化页面显示的特定模板。
在字段中填写所有信息后,单击继续按钮。它会将您重定向到页面编辑器。
页面列表
这将显示为网站创建的页面列表。
在这里您可以轻松访问您创建的页面并进行编辑。
单击页面的任何标题,它会将您重定向到页面编辑器进行编辑。
页面右侧的 X 图标用于删除页面。
过滤器框用于查找您正在搜索的页面。它根据类型过滤页面,以便列表中仅显示模块化、可见和/或可路由等页面。
当您知道页面的确切名称时,搜索框用于查找页面。
当您直接将鼠标悬停在页面左侧的图标上时,它将显示当前状态,即页面。可路由。可见。已发布,这意味着该页面可通过 URL 看到,并将显示在导航菜单中。
单击列表中显示的页面时,您将看到以下屏幕。
在上面的屏幕中,您可以选择编辑页面、添加内容或向页面添加图像。选项选项卡包含发布、分类法和站点地图选项,我们将在页面编辑器选项一章中研究这些选项。 高级选项卡包含页面的高级选项,如设置、排序和覆盖,这些选项将在页面编辑器高级一章中介绍。
Grav - 页面编辑器选项
在本章中,我们将研究 Grav 管理面板中的 页面编辑器选项。这是一个动态文本编辑器,允许您创建页面内容。此外,您还可以在页面中添加媒体文件。您可以看到 选项 选项卡的功能,如下所示。
选项 选项卡包含两个部分 −
- 发布
- 分类法
发布
此部分用于设置发布和取消发布页面的日期和时间。您将完全控制要发布或取消发布的内容,并且可以为特定页面创建元数据值。
发布部分包含以下字段 −
已发布 − 默认情况下,页面设置为是,即已发布。通过选择否,您可以取消发布页面。
日期 − 设置页面的日期和时间。
发布日期 −设置自动发布页面的日期和时间。
未发布日期 − 设置自动取消发布页面的日期和时间。
元数据 − 设置将显示在所有页面上的元数据值。
分类法
在此部分中,您可以在页面上显示类别并配置页面及其结构属性。
分类法部分包含以下字段。
类别 − 它设置页面的类别。它有助于对内容进行排序和过滤。
标签 − 它提供有关您的页面内容的信息。它有助于组织和过滤内容。
Grav - 页面编辑器高级版
页面编辑器是一个文本编辑器,也可以管理页面;这允许您创建内容,包括媒体文件、发布和分类选项、设置和主题特定选项。以下屏幕截图显示了编辑器页面的"高级"选项卡。
"高级"选项卡包含三个部分 −
设置
排序
覆盖
设置
设置部分处理页面的各种选项。您可以在此处设置页面的模板,设置页面的父级,更改放置页面的文件夹名称。
设置部分中有以下字段 −
文件夹数字前缀 − 设置数字以提供手动排序。
文件夹名称 − 输入页面所在的文件夹名称。
父级 − 为您的页面设置根目录,否则一些页面将作为子页面出现。
页面文件 −将主题模板设置为要显示的页面。
Body Classes −输入应用于页面主体的类名。
排序
此部分用于按特定顺序设置非编号文件夹。
按住四叉箭头并将其移动到按特定顺序重新排列页面的位置。
覆盖
覆盖选项为页面提供额外的功能,例如缓存、导航可见性、将 slug 设置为基于文件夹名称设置的默认值以外的其他值。
以下字段位于 Overrides 部分。
Menu − 设置要用作菜单的名称。如果未设置任何内容,则将使用 Title。
Slug − 可以通过此 slug 变量设置页面的 URL 部分。
Page redirect − 设置页面 URL 以将其重定向到其他 URL。
Process −您希望在页面内容中提供的流程。
默认子类型 − 对于子页面,页面类型设置为默认。
可路由 − 相应地设置页面以检查它是否可以通过 URL 访问。
缓存 − 设置页面的缓存。
可见 − 指定页面在导航中是否可见。
显示模板 − 将模板设置为要显示的页面。
Grav - 蓝图
Blueprints 蓝图是有关资源(信息来源)的元数据信息。它有两个用途 −
- 首先是资源标识本身。
- 其次是关于表单。
此完整信息保存在每个插件或主题中的 blueprints.yaml 文件中。
资源标识
在 blueprints.yaml 文件中,为每个主题和插件定义标识。在蓝图未格式化和编译完美之前,不会将资源添加到 Grav 存储库中。
蓝图示例
name: plugin name version: 0.6.0 description: Adds an advanced plugin to manage your site icon: empire author: name: Team Grav email: devs@getGrav.org url: http://getGrav.org homepage: https://github.com/getGrav/Grav-plugin-assets keywords: assets, plugin, manager, panel bugs: https://github.com/getGrav/Grav-plugin-assets/issues readme: https://github.com/getGrav/Grav-plugin-assets/blob/develop/README.md license: MIT dependencies: - form - email - login form: validation: loose fields: Basics: type: section title: Basics underline: false enabled: type: hidden label: Plugin status highlight: 1 default: 0 options: 1: Enabled 0: Disabled validate: type: bool
以下几个属性是可选的,其中一些用于提供您的身份和资源。
Sr.No. | 属性和描述 |
---|---|
1 | name* 提及资源的名称。 |
2 | version* 指定资源的版本。 |
3 | description* 提供关于资源的简要描述。不得超过 200 个字符。 |
4 | icon* 指定用于开发新主题或插件的图标库。 |
5 | author.name* 指定开发者的姓名。 |
6 | author.email(可选) 指定开发人员。 |
7 | author.url(可选) 指定开发人员的 URL 主页。 |
8 | homepage(可选) 指定资源的主页分配的 URL。 |
9 | docs(可选) 指定您为资源编写的文档链接资源。 |
10 | demo (可选) 指定演示资源的链接。 |
11 | guide (可选) 指定资源的操作指南或教程的链接。 |
12 | keywords (可选) 指定与您的资源。 |
13 | bugs (可选) 指定可以报告问题或错误的网址。 |
14 | license (可选) 指定您的资源许可证,即 MIT、GPL 等。 |
15 | dependencies (可选) 指定插件或主题。 |
以下是登录插件蓝图的示例 −
name: Login version: 0.3.3 description: Enables user authentication and login screen. icon: sign-in author: name: Team Grav email: devs@getGrav.org url: http://getGrav.org keywords: admin, plugin, login homepage: https://github.com/getGrav/Grav-plugin-login keywords: login, authentication, admin, security bugs: https://github.com/Getgrav/Grav-plugin-login/issues license: MIT
表单
如果您希望主题或插件具有可从管理界面直接配置的选项,则可以使用表单填充 blueprints.yaml 文件。此资源的一部分可以通过 管理插件 进行配置,该插件由 表单 元数据定义。
以下是 Archives 插件 archives.yaml 文件的示例。
enabled: true built_in_css: true date_display_format: 'F Y' show_count: true limit: 12 order: by: date dir: desc filter_combinator: and filters: category: blog
这些是插件的默认设置。若要在不使用管理插件的情况下配置它们,用户必须将此文件复制到 /user/config/plugins/archives.yaml 文件夹中并进行更改。您可以正确提供 archives.yaml 文件;您可以选择在用户的管理界面中更改设置。
保存更改后,它将自动写入 <your_folder_name>/user/config/plugins/archives.yaml。
Archives 插件的 blueprint.yaml 文件包含如下所示的结构 −
name: Archives version: 1.3.0 description: The **Archives** plugin creates links for pages grouped by month/year icon: university author: name: Team Grav email: devs@getGrav.org url: http://getGrav.org homepage: https://github.com/getGrav/Grav-plugin-archives demo: http://demo.getGrav.org/blog-skeleton keywords: archives, plugin, blog, month, year, date, navigation, history bugs: https://github.com/getGrav/Grav-plugin-archives/issues license: MIT form: validation: strict fields: enabled: type: toggle label: Plugin status highlight: 1 default: 1 options: 1: Enabled 0: Disabled validate: type: bool date_display_format: type: select size: medium classes: fancy label: Date Format default: 'jS M Y' options: 'F jS Y': "January 1st 2014" 'l jS of F': "Monday 1st of January" 'D, m M Y': "Mon, 01 Jan 2014" 'd-m-y': "01-01-14" 'jS M Y': "10th Feb 2014" limit: type: text size: x-small label: Count Limit validate: type: number min: 1 order.dir: type: toggle label: Order Direction highlight: asc default: desc options: asc: Ascending desc: Descending
以下是 archive.yaml 中的表单元素。
Toggle
enabled: type: toggle label: Plugin status highlight: 1 default: 1 options: 1: Enabled 0: Disabled validate: type: bool
Select
date_display_format: type: select size: medium classes: fancy label: Date Format default: 'jS M Y' options: 'F jS Y': "January 1st 2014" 'l jS of F': "Monday 1st of January" 'D, m M Y': "Mon, 01 Jan 2014" 'd-m-y': "01-01-14" 'jS M Y': "10th Feb 2014"
Text
limit: type: text size: x-small label: Count Limit validate: type: number min: 1
根元素 Enabled、date_display_format 和 limit 是选项。此根元素中存在的字段决定类型、大小、标签、默认值和选项。根据字段类型,其他字段可能会发生变化;例如,select 字段需要选项列表。
订单方向
order.dir: type: toggle label: Order Direction highlight: asc default: desc options: asc: Ascending desc: Descending
此字段由嵌套选项组成。plugins/admin/themes/Grav/templates/forms/fields 中可以使用许多字段类型。正如我们在 archive.yaml 文件中看到的,表单验证设置为严格。当验证设置为严格时,对于所有选项,您都必须添加蓝图表单,否则在保存时会弹出错误。当您只想将两个字段自定义到管理界面时,可以将 form.validation 设置为宽松。
下表简要说明了与上述表单元素相关的字段。
Sr.No. | 字段 &描述 |
---|---|
1 | Type 表示字段类型。 |
2 | Size 指定字段的大小。 |
3 | Label 指定字段的标签。 |
4 | Validate 验证字段的类型和字段中输入的最小长度。 |
5 | Default 设置默认字段。 |
6 | Options 指定选项列表。 |
7 | Classes 指定字段的类。 |
管理中可用的表单字段
有许多内置表单字段可供插件和主题使用,也可以创建自己的表单字段。下表列出了可用的表单字段 −
常见表单字段
Sr.No. | 字段和说明 |
---|---|
1 | Checkbox 显示单个复选框。 |
2 | Checkboxes 显示复选框列表。 |
3 | Date 包含日期字段。 |
4 | Datetime 包含日期和时间字段。 |
5 | 包含带验证的电子邮件地址字段。 |
6 | Password 包含以点格式显示的密码字段。 |
7 | Hidden 包含隐藏的输入字段。 |
8 | Radio 允许从列表中仅选择一个选项。 |
9 | Select 此字段包含几个选项。 |
10 | Spacer 向表单添加标题、文本或水平线。 |
11 | Text 包含普通文本字段。 |
12 | Textarea 包含多行文本输入。 |
特殊表单字段
Sr.No. | 字段和说明 |
---|---|
1 | Array 添加多个键值行。 |
2 | Ignore 未使用的字段将被删除。 |
3 | Columns 将表单分成多个列。 |
4 | Column 显示单个列。 |
5 | Dateformat 设置日期和时间格式。 |
6 | Display 显示文本值,不带任何输入值。 |
7 | Frontmatter 页面以原始格式显示。 |
8 | List 显示没有键的项目列表。 |
9 | Markdown 显示 markdown 编辑器。 |
10 | Pages 显示页面列表。 |
11 | Section 设置页面分为多个部分,每个部分都有一个标题。 |
12 | Selectize 用于选择框。 |
13 | Tabs 设置分为标签列表。 |
14 | Tab tabs 字段用于提供选项卡。 |
15 | Taxonomy 它是一个预先配置的选择,用于选择分类法。 |
16 | Toggle 它表示指定输入类型开启或关闭的切换效果。 |
Grav - 性能和缓存
在本章中,我们将了解 Grav 中的性能和缓存概念。
性能
术语"性能"是指系统性能,即它是否可以处理系统上的更高负载并修改系统以处理更高的负载。
考虑以下与 Grav 性能相关的要点 −
为了获得更好的 Grav 性能,您可以使用 PHP opcache 和 usercache。opcache 与 PHP 5.4 配合良好,usercache 与 PHP 5.5、PHP 5.6 和 Zend opcache 配合使用速度更快。
使用闪存且没有移动部件的 SSD(固态硬盘)。有时缓存会存储在用户缓存中或存储为文件。因此,SSD 驱动器可以提供更好的性能。
虚拟机是云计算技术下托管提供商的最佳方式。您可以指定资源而无需与物理设备交互。本机托管比虚拟机更快。Grav 在虚拟机上运行得更好,但为了获得最佳性能,您可以使用本机托管选项。
Grav 具有更快的内存,其缓存使用大量内存,可为您的服务器提供更好的性能。与其他平台相比,它使用的内存更少。
Grav 在共享服务器上使用共享托管来共享内容。共享托管成本低廉,有时可能会导致服务器上的内容变慢。
多核处理器用于更快地处理多个任务。高级处理器比这些处理器更好,可以帮助用户完成任务。
缓存
一般来说,缓存是存储在缓存内存中的数据。缓存机制使 Grav 速度更快,浏览器可以从缓存而不是原始服务器获取文件,从而节省时间和额外的网络流量。
Grav 使用 Doctrine Cache 库,该库支持以下 −
自动(默认) − 它自动使用默认选项。
文件 −它指定 cache/ 文件夹中的缓存文件。
APC
XCache
Memcache
Redis
WinCache
默认情况下,Grav 使用自动设置。它会尝试 APC,然后是 WinCache、XCache,最后使用 File。
缓存类型
有 5 种类型的缓存 −
YAML 配置缓存到 PHP。
页面对象的核心 Grav 缓存。
模板文件作为 PHP 类的 Twig 缓存。
媒体资源的图像缓存。
使用流水线对 CSS 和 jQuery 进行资产缓存。
YAML 配置的缓存存储在 /cache 文件夹中。图像缓存将其图像存储在 /images 文件夹中。核心 Grav 缓存的配置选项存储在 user/config/system.yml 文件中,如下所示 −
cache: enabled: true check: method: file driver: auto prefix: 'g'
enabled 选项设置为 true 即可启用缓存。
method 选项检查文件或文件夹等页面中的更新。
driver 选项指定不同类型的缓存选项,例如 Auto、File、APC、XCache、Memcache、Redis 或 WinCache。
prefix 选项定义缓存前缀字符串。
Memcache 选项
如果您使用的是 memcached 服务器,则需要使用 user/config/system.yml 文件中的 memcache 驱动程序添加一些额外的配置选项。这些选项可以在 cache: 组下定义。
cache: ... ... memcache: server:localhost port: 8080
Redis 选项
如果您使用的是 redis,则需要在 user/config/system.yml 文件 中使用 redis 驱动程序添加一些额外的配置选项。这些选项可以在 cache: 组下定义。
cache: ... ... redis: server:localhost port: 8080
Twig 模板通过在 user/config/system.yml 文件中使用 twig 驱动程序来使用其自己的缓存机制。
twig: cache: true debug: true auto_reload: true autoescape: false
它有一些选项,例如 −
cache 选项通过将其设置为 true 来启用 twig 缓存。
debug 选项启用 twig 调试。
auto_reload 选项用于通过将其设置为 true 来重新加载更改。
autoescape 选项用于自动转义 twig 变量。
缓存和事件
启用缓存时可以使用事件。除 OnPageContentRaw、OnPageProcessed、OnPageContentProcessed、OnTwigPageVariables 和 OnFolderProcessed 事件外,所有事件均可启用此功能。这些事件可用于所有页面和文件夹,并且只能在事件处理时运行。页面缓存后无法运行这些事件。
Grav - 调试和日志记录
在开发主题和插件时,调试和日志记录信息非常必要。Grav 通过使用下面描述的某些功能来使用调试信息。
PHP 调试栏
Grav 附带一个名为 调试栏 的工具来显示调试信息。默认情况下,此功能处于禁用状态。您可以全局启用它,也可以将 system.yaml 用于您的开发环境。
debugger: enabled: true twig: true shutdown: close_connection: true
将调试器设置为true后,您可以查看以下调试栏,如下所示。单击角落左侧的 G 符号。
在调试栏中,您可以在右侧角落查看总体内存使用情况和处理所用时间。它还包含几个提供详细信息的选项卡。
在"消息"选项卡中,您可以查看有助于您调试 Grav 开发过程的消息,并且信息将通过 $Grav['debugger']→addMessage($my_var) 从代码发布到此选项卡。
在"时间轴"选项卡中,您可以查看 Grav 时间的细分。
错误显示
它显示运行时有关块或页面的错误消息。在 Grav 中,您可以轻松识别错误并快速解决错误。以下是将显示在您的屏幕上的错误消息,如以下屏幕截图所示。
在 user/config/system.yaml 文件中,您可以通过将其设置为 false 来禁用错误页面。
errors: display: false log: true
日志记录
日志记录用于报告库和应用程序的错误和状态信息。在 Grav 中,有几个重要的日志记录功能,如下所示。
$Grav['log']->info('My informational message'); $Grav['log']->notice('My notice message'); $Grav['log']->debug('My debug message'); $Grav['log']->warning('My warning message'); $Grav['log']->error('My error message'); $Grav['log']->critical('My critical message'); $Grav['log']->alert('My alert message'); $Grav['log']->emergency('Emergency, emergency, there is an emergency here!');
所有日志信息将显示在 Grav.log 文件中,该文件位于文件夹 <your_folder_name>/logs/Grav.log 下
Grav - CLI
在本章中,我们将了解 CLI 在 Grav 中的工作原理。CLI 代表存储在 bin/Grav 中的命令行界面。它执行一些任务,例如 清除缓存、创建 备份 副本等。
在不同平台上访问 CLI 的方式不同。在 Windows 上,您可以通过 cmd 访问,在 Mac 上,您可以通过 Terminal 访问,在 Linux 上,您可以使用 shell。在 Windows 中,您不能使用 UNIX 样式的命令。要使用这些,只需安装 msysgit 包,该包提供 GIT 和 GIT BASH,并在 Windows 上提供 UNIX 样式的命令。
您可以使用以下命令列出 Grav 中可用的命令 −
$ bin/Grav list
您可以看到可用的命令,如以下屏幕截图所示 −
新项目创建
使用 Grav 创建新项目非常简单。您可以使用 Grav 实例创建新项目。
打开您的终端或控制台并导航到您的 Grav 文件夹。
$ cd ../ProjectFolder/grav
您的 Grav 将安装在您的 Web 服务器的根目录中。如果您想在 Grav 的根文件夹中创建名为 contact 的文件夹,请使用 −
$ bin/Grav project-name ../webroot/ contact
它将下载所有必需的依赖项并创建一个新的 Grav 实例。
安装 Grav 依赖项
在安装依赖项时,Grav 会自动安装插件,即 error 插件、problems 插件和 antimatter 主题。您可以在终端或控制台中使用以下命令安装这些插件 −
$ cd ../webroot/myproject $ bin/Grav install
您现在将在各自的文件夹中看到下载的插件,如 −
../webroot/ myproject/user/plugins/error
../webroot/ myproject/user/plugins/problems
../webroot/ myproject/user/themes/antimatter
清除 Grav 缓存
您可以删除存储在 cache/ 文件夹中的文件和文件夹以清除缓存。要清除缓存,您可以使用以下命令 −
$ cd ../webroot/myproject $ bin/Grav clear-cache
创建备份
在 Grav 中,您可以备份存储在根文件夹下的项目。由于它不使用数据库,因此备份并不困难。如果您想要创建名为 myproject (../webroot/myproject) 的项目备份,请使用以下命令 −
$ cd ../webroot/myproject $ bin/Grav backup
您将看到在 backup/ 文件夹下创建的备份的 zip 文件。
更新 Composer
您可以更新通过 Github 安装并使用基于 Composer 的供应商包手动安装的 Grav Composer。命令是 −
$ bin/Grav composer
Grav - GPM
GPM 代表 Grav 软件包管理器,用于安装、更新、卸载和列出 Grav 存储库中的可用插件。GPM 使用命令行界面(如终端或 cmd)执行命令。
您可以非常轻松地访问 CLI。在 Windows 上,您可以通过 cmd 访问,在 Mac 上,您可以通过 Terminal 访问,在 Linux 上,您可以使用 shell。在 Windows 上,您不能使用 UNIX 样式的命令。要使用这些,只需安装 msysgit 包,该包提供 GIT 和 GIT BASH,并在 Windows 上提供 UNIX 样式的命令。
要列出 Grav 存储库中的可用命令,请将命令键入为 −
$ bin/gpm list
您将收到以下 −
您可以通过在行中添加帮助来帮助命令,如下所示 −
$ bin/gpm help install
您可以使用以下命令在命令行界面上找到 PHP 的版本−
$ php -v
它是如何工作的?
当您在命令行界面上运行命令时,GPM 会自动从 GetGrav.org 站点下载所需的数据。它包括可用软件包的所有详细信息,还确定需要安装的软件包以及需要更新的软件包。
当您从存储库下载软件包时,Grav 存储库会在本地缓存,并且在生成缓存后,任何请求都无法联系 GetGrav.org 服务器。
某些命令带有 --force (-f) 选项,可强制重新获取存储库。使用此选项,无需等待 24 小时循环即可清除缓存。
命令
您可以使用一些命令从 Grav 存储库下载可用的软件包。要使用该命令,请打开终端并导航到 Grav 文件夹的根目录,然后输入 bin/gpm <command>。
索引
索引命令用于列出 Grav 存储库中的可用插件、主题。在终端中使用以下命令列出可用资源。
$ bin/gpm index
每行定义插件或主题的名称、slug、插件或主题的版本,并显示是否已安装。
信息
info 命令用于显示有关软件包的信息,例如作者、版本、上次更新的日期和时间、软件包的存储库、软件包的下载链接、许可证信息等。
安装
顾名思义,install 命令会从 Grav 安装软件包所需的资源存储库。
您可以使用以下命令安装所需的软件包。
$ bin/gpm install package_name
如果您尝试安装已安装的软件包,它会告知您下一步该做什么。
如果您输入Y,它将覆盖已安装的软件包,如果您输入N,它将中止安装过程。
更新
更新命令会告知需要更新的软件包。假设所有软件包都是最新的,那么它就不会说要更新了。
$ bin/gpm update
自行升级
自行升级命令用于将 Grav 升级到最新版本。使用以下命令升级 Grav。
$ bin/gpm self-upgrade
如果您使用的是最新版本的 Grav,则它会显示一条消息,提示"您已在运行最新版本的 Grav",以及屏幕上显示的发布日期和时间。
Grav - 开发
您可以使用不同类型的开发构建 Grav,例如Grav Core、Grav 插件、Grav Skeleton 和 Grav 主题。
Grav Core
Grav 是一个现代 CMS,其中编写内容很简单,构建页面更加友好和直观。Grav core 特别讨论了系统文件夹,它控制有关 Grav 的一切,并代表了 Grav 工作流和生命周期的质量。它主要关注可以以良好方式编写的页面。它专注于您的内容并将您的内容转变为可导航的网站。
Grav 插件
插件 是一种提供增强功能的软件,该功能最初并非由 Grav 的核心功能完成。 Grav 存储库中有许多插件可用,它们显示了站点上的功能。
考虑以下与 Grav 插件相关的要点 −
Grav 本身超级精简,它只为您的网站添加所需的插件。
无需等待添加您想要的额外功能。要实现这一点,只需创建一个插件来扩展 Grav。
插件非常灵活和强大,可以显示站点地图、博客档案、搜索引擎、提供面包屑等。
Grav Skeletons
Grav Skeleton 描述了一个示例站点,其中包含 Grav Core、插件、页面、主题。Grav 的最初想法是轻松构建站点。开发网站所需的所有内容都放在 user 文件夹中。Grav 的骨架带有各种依赖项,例如插件、主题等,并存储在可以解压的包中。
Grav 主题
Grav 支持不同类型的 主题,这些主题是 Grav 网站的组成部分。当您在系统上安装 Grav 时,它会附带 Antimatter 主题。大多数主题都带有骨架包或示例页面。您可以在 user/pages 文件夹下看到示例页面,它提供与骨架包类似的体验。
已安装的主题需要适合您的页面的 twig 模板。主题是主题和内容的组合,相当于整个网站设计。您可以根据您的设计创建自己的 twig 模板引擎。
主题/插件发布流程
您可以注意到在 Grav 存储库中添加的创建主题或插件的一些要点。
它是一个由 MIT 许可的开源。
它具有 README.md 文件,该文件指定了项目的安装过程和配置。
它包含 blueprints.yaml 文件,该文件包含有关资源的信息,可以在每个插件和主题的根目录中找到。
包含 CHANGELOG.md 文件,该文件包含主题或插件的版本,并在对文件进行更改时显示信息。
创建发布版是放置完成的主题或插件在 GitHub 上。如果没有发布,那么您将找不到您的插件或主题。
添加有关您的插件或主题的详细信息,并进行测试以确保其正常工作。
ChangeLog 格式
changelog 格式以 Markdown 语法编写,将内容和视觉显示分开。它使用简单的 CSS,以以下格式显示。
# vX.Y.Z ## 01/01/2015 1. [](#new) * New features added * Another new feature 2. [](#improved) * Improvement made * Another improvement 3. [](#bugfix) * Bugfix implemented * Another bugfix ...repeat...
GitHub 设置
GitHub 是一个最大的开放社区,它与用户共享您的项目、获得反馈并为托管在 GitHub 上的存储库做出贡献。
将外部存储库的 URL 克隆到本地系统上的单个项目文件夹中。您可以按照以下步骤将外部 Git 存储库克隆到新存储库。
打开命令行并创建名为 "my_project" 的文件夹。
$ mkdir my_project $ cd my_project $ mkdir Grav $ cd Grav $ git clone https://github.com/getGrav/Grav.git $ git clone https://github.com/Grav_project/Grav-plugin-error.git $ git clone https://github.com/ Grav_project /Grav-plugin-problems.git $ git clone https://github.com/ Grav_project /Grav-theme-antimatter.git
此处 Grav_project 是一个存储库,您将从中获得与此存储库相关的所有文件和文件夹,这些文件和文件夹将保存在 /my_project/Grav 文件夹中。Grav 包含依赖项,例如 error 插件、problems 插件和 Antimatter 主题。
您可以使用 bin/Grav new-project 命令为 Grav 设置测试站点。我们需要从 Web 根目录开发克隆的代码。因此,我们必须使用 -s 标志将相关部分符号链接到 bin/Grav new-project 命令。
在名为 .Grav/ 的新文件夹中创建一个配置文件,以使用该命令查找存储库,您需要在根目录下创建该文件。
$ cd $ mkdir .Grav $ vi .Grav/config
导航到您的 Grav 文件夹并使用 -s 标志设置符号链接的站点。
$ cd ~/Projects/Grav/Grav $ bin/Grav my-project -s ~/www/Grav
这里,www 是根文件夹,Grav 是您要去的位置创建测试站点。
Grav - 生命周期
在本章中,我们将了解 Grav 的生命周期。Grav 生命周期决定了 Grav 如何处理以便通过插件扩展 Grav。下图显示了 Grav 生命周期流程。
Grav 生命周期的以下四个步骤 −
PHP 版本
初始化 Loader 类
获取 Grav 实例
调用 Grav 进程
PHP 版本
检查 PHP 的版本,以确保我们运行的是 5.4.0 以上的 PHP 版本。
初始化 Loader 类
在第二步中,类加载器获取初始化。
获取 Grav 实例
如果不存在实例,则调用 load() 方法并添加 Grav。
它初始化调试器值并添加到调试器。
它注册日志和错误处理程序。
它添加 uri、任务、事件、缓存、会话、插件、主题、twig、分类法、语言、页面、资产和基本 url。
它注册流和配置处理程序。
调用 Grav 进程
它初始化配置、Uri 对象、错误处理程序、调试器和会话。
初始化后,它启动缓冲输出。
它初始化时区和插件并触发 onPluginsInitialized 事件。
接下来,它初始化主题并触发 onThemeInitialized 和 onTask[TASK] 事件。
它初始化资产并触发 onAssetsInitialized 事件。
它使用以下操作初始化 twig −
根据配置,它设置 twig 模板路径。
处理可用的语言模板。
接下来,它触发 onTwigTemplatePaths事件。
加载器链和 twig 配置。
触发 onTwigInitialized 事件。
它加载 twig 扩展并触发 onTwigExtensions 事件。
它设置标准 twig 变量。
接下来它初始化页面。
它调用 buildPages() 方法。
如果缓存良好,则从缓存中加载页面。如果缓存不好,则调用 recurse() 方法。
onBuildPagesInitialized 事件在 recurse() 方法中触发。
如果文件为 .md,则执行以下操作 −
要加载文件详细信息,将调用 init() 方法。
它设置文件路径、修改和 ID。
调用 header() 方法来初始化标头变量。
调用 slug() 方法来设置 URL slug。
调用 visible() 方法来设置可见状态。
根据以 _(下划线)开头的文件夹,设置 modularTwig()。
它稍后会触发 onPageProcessed 事件。
recurse() 如果文件夹是找到。
它会触发 onFolderProcessed 事件。
调用 buildRoutes() 方法。
对于所有页面,分类法 都已初始化
构建 route 表以便快速查找。
触发 onPagesInitialized 和 onPageInitialized 事件。
将调试器 CSS/JS 添加到资产中。
使用 Twig 的 processSite() 方法,我们得到输出。
事件onTwigSiteVariables 被触发。
获取页面的输出。
当页面未找到或不可路由时,将触发事件 onPageNotFound。
所有 Twig 变量均在 twig 对象上设置。
根据文件/标头/扩展名信息设置模板名称。
render() 方法被调用。
以 HTML 格式返回文件格式
它触发 onOutputGenerated 事件。
设置 HTTP 标头。
显示输出
输出缓冲区被刷新到页面。
事件 onOutputRendered 将触发。
关闭与客户端的连接。
最后,它触发 onShutDown 事件。
当在页面上调用 content() 方法时,将发生以下生命周期。
事件 onPageContentRaw 将触发。
根据 Markdown 和 Twig 设置,它处理页面。
它触发 onPageContentProcessed 事件。
Grav - YAML 语法
YAML 代表 YAML 不是标记语言,它包含人类可读的内容,通常用于配置文件、蓝图(有关资源的元数据信息)和页面设置。
功能
以下是 YAML 的功能 −
与 XML 或 JSON 相比,YAML 不太复杂,并提供相同的功能。
它提供配置设置,而无需学习复杂的代码类型,如 CSS、JavaScript 或 PHP。
YAML 描述 YAML 文件的数据和内容,可以轻松转换为多种语言类型。
YAML 的基本规则
YAML 有一些基本规则,用于减少多种语言和可编辑程序中的歧义。
您必须以 .yaml 扩展名结束 YAML 文件。
YAML 必须区分大小写。
YAML 不支持使用制表符。它使用不被普遍支持的空格来代替制表符。
YAML 的基本数据类型
YAML 支持一些可与编程语言一起使用的基本数据类型,例如 −
标量 − 字符串或数字。
序列 − 数组或列表。
映射 −哈希或字典。
标量
标量是使用页面上的字符串或数字来处理数据的基本数据类型。它可能是布尔属性(是或否)、整数值(例如 2)或字符串文本(例如单词、句子或网站标题)。
例如 −
string: "Grav" integer: 10 float: 10.5 boolean: true
有时标量带有不带引号的值,如整数、浮点数或布尔值。字符串值使用标点符号,标点符号带有单引号或双引号,使用转义来指定 ASCII 和 Unicode 字符。
序列
YAML 以数组或列表的形式表示序列。它定义每个项目,并在列表中放置一个打开的破折号 (-),如下所示。
例如 −
- Apple - Orange - Grapes
假设您想定义带有子项的嵌套序列,然后在子项中的每个破折号前放置一个空格。
例如 −
- - Apple - Orange - Grapes
如果希望在嵌套列表中嵌套序列,则添加一些级别,如下所示 −
例如 −
- - - Apple - Orange - Grapes
映射
这是一种定义键和值的方法。
例如,您可以将某个值分配给特定元素作为 −
Sports: cricket
此处的值是"cricket",它与名为"Sports"的键进行映射。您可以将此映射与序列结合使用来指定板球的项目列表;例如,我们将为值"cricket"定义一些球员姓名,将姓名作为子元素,将 Sports: cricket 作为父元素。
Sports: cricket - Sachin Tendulkar - Rahul Dravid - M S Dhoni
Grav - 表单
您可以使用此链接中提供的form插件创建表单。搜索表单插件并将其安装在您的 Grav 文件夹中。
您也可以使用命令$ bin/gpm install Form安装此插件。导航到 Grav 的根文件夹并输入此命令。它将自动下载表单插件并安装必要的依赖项。
创建简单表单
您可以创建一个简单的表单,该表单可以在页面 YAML 前言中定义。以下是表单的示例 −
--- title: Contact Form form: name: contact fields: - name: name label: Name placeholder: Enter your name autofocus: on autocomplete: on type: text validate: required: true - name: email label: Email placeholder: Enter your email address type: email validate: required: true - name: message label: Message placeholder: Enter your message type: textarea validate: required: true - name: g-recaptcha-response label: Captcha type: captcha recatpcha_site_key: 6LelOg4TAAAAALAt1CjjjVMxFLKY8rrnednYVbr8 recaptcha_not_validated: 'Captcha not valid!' validate: required: true buttons: - type: submit value: Submit - type: reset value: Reset process: - email: subject: "[Site Contact Form] {{ form.value.name|e }}" body: "{% include 'forms/data.html.twig' %}" - save: fileprefix: contact- dateformat: Ymd-His-u extension: txt body: "{% include 'forms/data.txt.twig' %}" - message: Thank you for getting in touch! - display: thankyou ---
上面的代码显示了带有姓名、电子邮件、消息和验证码字段的简单表单页面。填写表单后提交信息时,表单将通过在 YAML 前置内容中添加 process 字段进行处理,如代码所示。
process 字段使用以下信息 −
email 选项使用两个字段,例如 from 字段指定电子邮件的发件人,to 字段指定邮件的收件人。
subject 使用 [feedback][entered mail] 选项,其中电子邮件发送到输入的电子邮件。
电子邮件正文在主题文件夹中的 forms/data.html.twig 文件中指定。
表单输入数据存储在 user/data 文件夹下。模板在主题文件夹中的 forms/data.txt.twig 文件中定义。
在 thankyou/ 子文件夹下创建一个子页面,当用户提交表单时,该页面将被重定向到该页面。
您可以将一些字段与表单插件一起使用,如下表所示 −
Sr.No. | 字段 &描述 |
---|---|
1 | Captcha 这是一个反垃圾邮件字段,用于计算以确定用户是否为人类。 |
2 | Checkbox 它显示一个简单的复选框。 |
3 | Checkboxes 它显示多个复选框。 |
4 | Date 和 Datetime 两个字段分别用于显示日期和日期以及时间。 |
5 | 这是一个带有验证的电子邮件字段。 |
6 | Hidden 它指定隐藏字段。 |
7 | Password 指定密码字段。 |
8 | Radio 显示简单的单选按钮。 |
9 | Select 提供选择字段。 |
10 | Spacer 允许向表单添加标题、文本或水平线。 |
11 | Text 显示简单的文本字段。 |
12 | Textarea 显示简单的文本区域字段。 |
13 | Display 显示文本或说明字段,而不是输入字段。 |
字段参数
每个字段都接受以下参数,这些参数可用于自定义表单的外观。
Sr.No. | 参数 &描述 |
---|---|
1 | label 定义标签字段。 |
2 | validate.required 使元素成为必需元素。 |
3 | validate.pattern 指定验证模式。 |
4 | validate.message 验证失败时显示消息。 |
5 | type 定义字段类型。 |
6 | default 定义默认字段类型。 |
7 | size 显示字段大小,如大、超小、中、长、小。 |
8 | name 定义字段名称。 |
9 | classes 使用带有 css 类的字符串。 |
10 | id 定义字段id。 |
11 | style 指定字段的样式。 |
12 | title 定义字段的标题。 |
13 | disabled 它确定字段是否处于禁用状态。 |
14 | placeholder 它是在用户输入值之前显示在输入字段中的简短提示。 |
15 | autofocus 它指定输入元素在页面加载时应自动获得焦点。 |
16 | novalidate 指定提交时不应验证表单数据。 |
17 | readonly 它将字段确定为只读状态。 |
18 | 自动完成 当用户开始在字段中输入时,它会显示字段中的选项,并根据之前输入的值显示值。 |
某些字段包含特定参数,例如 −
Sr.No. | 参数 &描述 |
---|---|
1 | date 和 datetime 这些字段使用 validate.min 和 validate.max 设置最小值和最大值。 |
2 | spacer 它使用 下划线 添加 <hr> 标签,使用 text 添加文本值并使用 title 作为 <h3>标签。 |
3 | select 它使用multiple参数添加多个值。 |
4 | select 和 checkboxes 它使用options字段来设置可用的选项。 |
5 | display 它使用content参数来显示内容。它将 markdown 设置为 true 以显示内容。 |
6 | captcha 它使用 recatpcha_site_key 和 recaptcha_not_validated 参数。 |
关于 Captcha 的说明
我们在名为 g-recaptcha-response 的字段下有关于 captcha 信息的代码,如下所示 −
- name: g-recaptcha-response label: Captcha type: captcha recatpcha_site_key: 6LelOg4TAAAAALAt1CjjjVMxFLKY8rrnednYVbr8 recaptcha_not_validated: 'Captcha not valid!' validate: required: true
reCaptcha 用于保护您的网站免受垃圾邮件和滥用。它使用 recatpcha_site_key 选项并在您的网站上显示小部件。要使用 reCaptcha,只需参考 reCaptcha 文档。如果 reCaptcha 不正确,它将使用 recaptcha_not_validated 选项显示消息。
表单操作
电子邮件
您可以在 process 字段下发送带有特定选项的电子邮件,如下所示 −
- email: from: "{{ config.plugins.email.from }}" to: "{{ config.plugins.email.to }}" subject: "Contact by {{ form.value.name|e }}" body: "{% include 'forms/data.html.twig' %}"
它使用包含两个字段的电子邮件选项;from 字段指定电子邮件地址的发件人,to 字段通过使用电子邮件插件配置指定电子邮件地址的收件人。电子邮件字段还使用 subject 选项,其中电子邮件发送到输入的电子邮件,主题为 [联系人][输入的姓名],电子邮件正文在主题的 forms/data.html.twig 文件中定义。
重定向到其他页面
您可以使用 process 字段下定义的 message 和 display 选项重定向到另一个页面。
process: - message: Thank you for getting in touch! - display: thankyou
message 选项设置用户单击提交按钮时应显示的消息。当用户提交表单时,应将其重定向到另一个页面。在存储 form.md 文件的 thankyou 子文件夹下创建一个子页面。提交表单后,它将在页面上重定向并显示上述消息。
名为 thankyou/formdata.md 的子页面将包含以下内容。
--- title: Email sent cache_enable: false process: twig: true --- ## Your email has been sent!
当您提交表单时,插件将向用户发送电子邮件,数据保存在data/folder下。
保存
它用于将数据保存到保存在user/data文件夹下的文件中。
例如 −
process: - save: fileprefix: contact- dateformat: Ymd-His-u extension: txt body: "{% include 'forms/data.txt.twig' %}"
数据将以文本格式存储,扩展名为 txt。正文取自主题的 templates/forms/data.html.twig 文件。
以下屏幕显示了一个简单的表单 −
Grav - Web 托管
托管,也称为网站托管,是维护和组织网站的过程,并通过万维网提供对网站的访问。简单来说,它是一个为互联网上的网站提供服务的平台。
Grav 支持不同类型的托管服务 −
Rochen Web Hosting
WireNine
Crucial Web Hosting
Arvixe
SiteGround
Dreamhost
Rochen Web Hosting
它可以作为长期托管服务提供商用于 GetGrav.org 和 RocketTheme.com。它使用 SSD 驱动器、Litespeed 网络服务器以及 Intel XEON 处理器来增强 Grav 性能。它提供两种类型的选项;一种是共享托管,另一种是突发托管。
有关 Rochen Web Hosting 的更多信息,请单击此链接。
WireNine
WireNine 为 665 多个国家的客户提供可靠的网络托管服务。它使用 Intel Xeon E5 v3 CPU、DDR4 ECC RAM 和冗余 RAID SSD 存储来增强服务器的功能。它提供最大的可靠性和稳定性,以确保 100% 的正常运行时间。它包括优化的软件,例如 CloudLinux、Litespeed、MariaDB、PHP、Ruby、Python、Perl 等。
访问此链接以获取有关 WireNine 托管的信息。
Crucial Web Hosting
这是另一种更注重速度和支持的网络托管类型。它使用 SSD 驱动器、Litespeed 网络服务器以及 Intel XEON 处理器来增强 Grav 性能。
您可以在此链接中获得有关 Crucial Web Hosting 的更多信息。
Arvixe
Arvixe 是一种网络托管类型,它提供兼具无与伦比的可靠性、质量和可负担性的网络托管。它因在网络托管领域提供良好的功能而赢得了无数网络托管奖项。
有关 Arvixe Web Hosting 的更多信息,请单击此链接。
SiteGround
它为 Joomla、WordPress、Magento 和其他 Web 应用程序提供托管解决方案。它的标语是精心打造的 Web 托管,它精心处理 Web 托管计划并提供使您的网站运行更快的新技术。
只需访问此链接即可获取有关 SiteGround 托管的信息。
Dreamhost
它通过为您的个人或企业相关的 Web 托管需求提供更多功能来提供功能列表。它拥有超快的 SSD 和高达 64GB RAM 的新专用服务器。
有关 Dreamhost Web Hosting 的更多信息,请单击此链接。
Grav - 服务器错误
由于 Grav 配置错误,发生服务器错误。当服务器遇到内部错误或发生意外情况时,Grav 无法提供服务并恢复页面。
如果服务器在生产模式下运行,为了向用户隐藏信息,将出现服务器错误消息。所有错误消息都记录在文件夹 <your_folder_name>/logs/Grav.log 下的 Grav.log 文件中。
以下是可能导致服务器错误的一些原因 −
- 配置过期
- 文件权限不正确
- 配置文件格式无效
- Grav 不知道文件系统的更改
配置过期
您可以刷新缓存以检查配置是否是最新的。使用以下命令刷新缓存。
bin/Grav clear-cache
安装和配置问题
安装和配置问题是 −
- 配置问题
- 安装问题
- 系统要求
- 文件权限
Grav - 权限
一般来说,权限是允许在您的托管环境中执行某些操作的过程。权限包括对服务器上文件的读取或写入访问权限或编辑文件系统上的文件。Grav 是一个基于平面文件的 CMS,需要写入文件系统以创建缓存和日志文件。
Grav 有三种主要场景 −
PHP/Webserver 与编辑文件的同一用户一起运行
此场景非常适合大多数共享托管设置以及本地开发。在专用网络主机上,我们认为这种方法不够安全。
PHP/Webserver 使用不同的帐户但相同的组运行
使用用户和 PHP/Webserver 帐户之间的共享组,通过 775 和 664 权限,您可以确保两个不同的帐户对文件具有读/写访问权限。我们可以通过在具有适当权限的根上设置 umask 0002 来创建新文件。
不同的帐户,手动修复权限
这种方法将具有不同的帐户并更新文件的所有权和权限,以确保 PHP/Webserver 用户对文件具有读/写访问权限。
以下是权限修复 shell 脚本的简单代码。您可以根据适用于设置的组编辑此文件。
#!/bin/sh chown joeblow:staff . chown -R joeblow:staff * find . -type f ! -path "./bin/" | xargs chmod 664 find . -type f -path "./bin/" | xargs chmod 775 find . -type d | xargs chmod 775 find . -type d | xargs chmod +s umask 0002
chown joeblow:staff 用于将目录的组和用户更改为 joeblow 和 staff。
chown -R joeblow:staff * 行将文件和子文件夹的所有权更改为 joeblow 和 staff。
行 find . -type f ! -path "./bin/" | xargs chmod 664 将目录中所有文件的 664 权限设置为其他文件的 Read 和组和用户的 Read/Write。
行 find . -type f -path "./bin/" | xargs chmod 775 将目录中所有文件的权限设置为 775,其他文件设置为 RX,组和用户设置为 RWX。
umask 0002 用于创建具有 664 和 775 权限的新文件。