tokenpocketapp最新下载安卓|grav

作者: tokenpocketapp最新下载安卓
2024-03-07 19:02:40

Grav - A Modern Flat-File CMS | Grav CMS

Grav - A Modern Flat-File CMS | Grav CMS

Tour

Features

Blog

Downloads

About

Forum

Learn

5,772

14,242

2,996

Why Grav

Easy

Developers

Features

Pros

Community

Limitless

Built

You are cordially invited to join the Grav Community on our new Discord Chat Server

Tour

Features

Blog

Downloads

About

Forum

Learn

5,772

14,242

2,996

Build Faster Websites

Grav is a modern open source flat-file CMS

Download Grav

Stable Version 1.7.44 NEW!

updated 2 months ago

Changelog

Why Choose Grav?

Voted "Best Open Source CMS" in 2016

Voted "Best Flat File CMS" in 2017, 2019, 2020 & 2021!

Fast

Performance is not just an afterthought, we baked it in from the start

Extensible

Grav has a powerful API and sophisticated Package Manager to make it super flexible

Open Source

Grav is Open Source, and all the code is available on GitHub.com

Super Easy to Use

The Grav admin plugin provides a simple and intuitive interface to make configuration and content creation easy and enjoyable.

Get Admin Plugin

The Grav Admin dashboard provides a quick glance at your site state

Easily modify Grav's flexible configuration settings with its advanced forms

Editing content is a breeze with Grav's powerful markdown editor

Changing your administrator information is quick and easy

Grav has a built in package manager with one-click install for plugins

You can also install a wide range of modern themes with one-click

be a hero developer

Packed to the gills with amazing features and tools, coupled with heaps of detailed documentation, Grav will make you look like a hero developer!

Read the Documentation

a bevy of features

Enjoyable Content Creation

Use your favorite Markdown editor to create your content online or offline

One-Click Installs

The built-in Package Manager lets you to find, install, and easily update extensions and themes for Grav

Stellar Performance

Grav intelligently caches content to deliver great performance, regardless of hosting

Powerful Content Filtering

Create unlimited taxonomies such as tags, categories, and authors to filter and manage your content

Dynamic Content Types

The flat-file nature of Grav lets you define custom fields for any of your pages, including modular content

Multi-Language Support

A simple mechanism for presenting sites in multiple languages is built into Grav

Simple Backups and Restores

Being file based means backing up and restoring your data is super easy, and changing hosts/servers is a breeze!

Image Media Processing

Dynamic image manipulation to resize, crop, resample, and effects all with automatic caching of images

Easy Theme Customization

No need to start from scratch, use Theme Inheritance and then modify the bits you need, allowing for easier update

Discover all features

The Grav Professionals

Trilby Media is a development company you can turn to for help with your Grav site. Trilby offers a variety of professional services and is run by the same team that built Grav in the first place!

Grav consulting services

Custom Grav plugin development

Custom Grav theme development

Existing Grav plugin and theme customization

Porting to Grav from other platforms

Grav site design and development

Contact Trilby Media

Community Driven

Grav is an open source project hosted on GitHub, originated by Trilby Media but made possible by an outstanding community of dedicated developers and users. The Grav community contributes and shares their knowledge and experiences on our GitHub repository, GetGrav Forums, and our Discord chat server.

GitHub

Forums

Discord

Grav is proudly part of the Open Collective family. You can now support the community and keep development going strong by becoming a backer or a sponsor.

Sponsor / Support Grav

There are no limits!

From simple to sophisticated, Grav has the flexibility to power all sorts of websites.

Flexible content structure and powerful Twig templating allow easy realization of any design.

Blogs

Business Sites

Directory

Documentation

Landing Pages

Portfolios

Product Sites

Personal Resumes

E-Commerce

See Skeletons

Built with Grav

Grav is a highly versatile platform. Give your creativity wings and Grav will set you free!

Paul Massendari

paulmassendari.com

View more

Milk River Outfitters

milkriveroutfitters.com

View more

Sequence Break

sqncbrk.com

View more

CreMonte

www.cremonte.me

View more

Presciense

presciense.com

View more

reBuy

tech.rebuy.com

View more

Hagstrom Builder

hagstrombuilder.com

View more

Slidecraft

slidecraft.com

View more

Gantry Framework

gantry.org

View more

Drayton Partners

draytonpartners.com

View more

Wondrous Digital Agency

wearewondrous.com

View more

Timo Volz Fotodesign

timovolz.de

View more

SEE

saveourplanet.org

View more

California State University

mba.csumb.edu/

View more

Klavierduo Eckerle

http://klavierduo-eckerle.de

View more

Newtquest Games

newtquestgames.com

View more

Olaf Brickarp

yay.se

View more

What people are saying

Still need convincing? Check out what people are saying about Grav. If you have any thoughts or questions, please reach out and ask us.

David Blum

@dblO_Om

@rhuk I just read the complete @getgrav documentation. It is so well written and styled, it's a pleasure. Brilliant!

Dayle Rees

@daylerees

I've just had a play, and it's honestly VERY good. Only a few SF2 components too so it's FAST.

Casey Grzecka

@z3cka

Grav is legit! I'm ready to leave Drupal in the dust of complexity.

Harley Hicks

@harlshicks

@getgrav is bringing back my joy for web development and design. So easy to get up and running, and all the puzzle pieces fit so well.

Bryan Ollendyke

@btopro

30 seconds after installing @getgrav impression: this is a wordpress killer and we need a site factory for it in @elmsln for portfolios

Air Petr

@air_petr

@getgrav Thank you for Grav!!! Dived in for last few days. It's realy spellbinding!

John Williams

@thudfactor

The CMS from @getgrav continues to impress. "What do I need to do to implement open graph metadata? Oh… nothing."

Jozef Maxted

@jozefmaxted

Played around with @getgrav this evening and I'm impressed. Super simple page creation and theming, flexible workflow, just nice to use!

Richard Allen

@pmrourkie

Absolutely loving @getgrav. Simple, powerful and very fast!

Reach Content

@reachcontent

Getting to know @getgrav you'll want to nominate it as Best New

Bison

@bison_42

everyone should know that there is http://getgrav.org out there a flat-file CMS that does not suck it's awesome!

Stephen Foster

@s_r_foster

@getgrav Your CMS is the BEST. I was able to make my site in no time flat: http://stephenfoster.us

Vitor Costa

@vmcosta

I've just found the best flat file CMS, finally… @getgrav amazing work guys, nicely done, and yes I hate databases too ;)

Daniel Kao

@diplateevo

@getgrav Just might be one of the biggest game changers in web CMSs.

Faisal Khan

@babushka99

Grav is my new love. So uber-smooth, exceptionally fast and just the right amounts of knobs and switches! @getgrav

Yahya Zini

@YahyaZini

A shout out to the @getgrav team for creating such a great

Denis Duvauchelle

@desduvauchelle

Loving @getgrav over wordpress. If you are developer, you're probably going to fall for it. If your not, you'll probably like it as well.

Paul Orwig

@porwig

If you haven't taken a look at @getgrav, you should! Many good ideas, thoughtfully implemented. Great work, @rhuk!

Ryan Little

@ryantereu

Only just began using @getgrav as a cms, but their documentation alone is swoon-worthy: friendly, thorough, well-designed.

David Easton

@dweebvid

Was developing around Wordpress,I wanted to tone down the over-complexity for my needs. I found a flat-file cms called @getGrav and it rocks

Serge K. Keller

@citizenk

You know, @getgrav may finally be a CMS that does not weight me down for projects I love. And yes, the pun was definitely intended.

Mike Wink

@mikewink

Ohh how I love deployments in Grav (@getgrav)! Everything is a .md or .yaml file, no hassle with DBs or other content silos.

Steven Lain

@stevenjlain

just installed grav & it is such a pleasure to use. Hats off to the grav team. I look forward to using grav on many, many projects!

Noah Betzen

@nezteb

[Grav] is by far the best CMS I've ever had the privilege of using. @getgrav

Scott Edgar

@thesneakybandit

Just started learning a new CMS. Ok, learnt it. Brilliantly simple stuff from @getgrav.

Parker Agee

@parkeragee

Fell in love with the @getgrav and @snipcart combo tonight. Extremely fast set up and works like a charm.

follow @getgrav

Download Grav

Never miss a thing, sign up to the Grav mailing list

Subscribe

Grav was with by Trilby Media

Contact the Grav Team

About Grav

Grav Media Information

Grav News Feed

Crazy Fast Cloudways Managed Hosting - monitoring by Pingometer

Copyright @2024 - Grav CMS - All rights reserved - Grav is released under the MIT license

Turbo-charge your Grav site - from the creators of Grav

Learn about Premium

用 Grav 搭建博客网站 - KAIX.IN

用 Grav 搭建博客网站 - KAIX.IN

KAIX.IN

作品

日志

订阅

链接

用 Grav 搭建博客网站

dimlau2019-09-29

我已经有十多年没有写介绍博客程序的文章了。这次打算介绍一下 Grav CMS。

没打算细致讲解如何搭建如何具体制作风格模板等等,只是作为一种搭建博客挑选程序时的一种选择,介绍一下。

若要说出个原因,大概就是因为一方面还是有很多人有写博客的欲望;另一方面我觉得,日渐盛行的静态博客(至少)对刚接触博客的人来说,并不能做到「专注于写作」。

这些年间我几乎一直在用 MovableType 作为博客程序。但是因为它配置安装相对复杂,而我在某个时期频繁更换服务器,所以后来就没有继续使用。陆续试过几种不同的程序比如 Stacey、Kirby 等之后,停在了今天要介绍的 Grav。而这几款程序,无一例外都是 flat-file CMS。

Flat-file CMS 不是静态博客。

静态博客(生成器)的工作流程大体是这样:

你在自己的电脑上,把文本文件(一般采用 markdown 语法格式),保存成特定的文件名,按照一定的目录结构存放;

设置页面模板;

执行安装好的生成器程序命令;

程序会按照相应的目录结构和设定好的模板,生成一个一个的 html 页面文件存储在一个特定文件夹中;

将生成的静态页面文件夹整体部署到服务器(可以是上传到自己的主机,也可以是 git 命令部署到 github 等服务商的服务器);

访问服务器,即可浏览博客内容;

每次新发布文章,重复上述第 3~5 步。

Grav 不是静态博客,而是 flat-file CMS,大概可以翻译成文本数据驱动的内容管理系统。之所以把静态博客的工作流程也说了一遍,是因为正好可以对比着说明两者的区别。Grav 以及同类型的程序,工作流程是:

在服务器安装好 grav;

设置页面模板;

把文本文件放置在一个文件夹中,上传到 grav 程序的内容存放目录中;

已经可以访问新的文章页面了。

当然,会有一大批人要说静态博客(生成器)的好处,我并不想就此做什么争论。只不过,很明显并不是所有人都适合使用静态博客生成器来管理和发布自己的文章——尤其是你真的只关注内容的话。

Grav 的安装很简单,只要是支持 PHP 的主机,有 Apache、Nginx、IIS 等任意一种 Web Server,你需要做的就只是去官网下载程序压缩包,上传到服务器解压缩,已经可以开始写文章了。

对于初接触者,可以安装 Grav+Admin 套件,无需额外配置,访问 http(s)://域名/admin 页面,你会看到一个完整的网站管理后台:

Grav 站点配置

此处借用了官方的截图,实际上本地化做的也很不错,有中文界面可以选择。

后台还整合了一个用起来比较顺手的在线 markdown 编辑器:

Grav 文章编辑页面

更酷的是,官方收录的众多界面设计模板,都可以在这后台模板管理界面一键下载、套用:

Grav 模板风格管理

嗯?!这好像和我们刚刚说的工作流程有点不一样?

其实这只是一种更方便的在线管理方式而已。如果你习惯和文件本身打交道,可以不必登录后台,直接把每篇文章放到 Grav 程序目录的 user/pages 文件夹里即可,文件夹的结构就对应着网址的结构。

比如我把所有文章都放在了 0001 文件夹里面,所以要访问我的文章,地址就是:

https://kaix.in/0001/

又比如我在前段时间发布的《咖啡入门书》,放在了0001文件夹里的primer-of-coffee文件夹中。它所对应的网址就是:

https://kaix.in/0001/primer-of-coffee

页面里的贴图也都放在自己所属也页面的文件夹里,十分条理清晰:

kaix.in 文章目录

有意思的是,我把这本书的章节又以子目录的形式存放,所以网址也就变成了一系列有层级结构的形式。这在很多「传统」博客程序里并不是那么常见,但是在 Grav 里却属于常规操作:

https://kaix.in/0001/primer-of-coffee/preface //序言

https://kaix.in/0001/primer-of-coffee/chapter-1 //第一章

...

或许在截图里你已经注意到,有的文章我保存成了post.md而另外一些则保存成了poc.md。首先声明,这并非必须的。如果你希望保持简单,把所有文章都保存成post.md即可。

而我的做法,是稍稍利用了 Grav 的特性做了些进阶操作:在 Grav 里,只要在模板文件夹里添加一个对应文档名称的模板文件,就能让文档以特定形式展示。

《咖啡入门书》的目录页,文档名称是post.md,在模板文件夹里有一个post.html.twig文件,定义了它的页面展示形式,但是在书籍的章节页面,我希望它们有不一样的展示形式,比如在开头结尾加上返回目录的链接,等等,所以文档保存成了poc.md,并且添加了一个poc.html.twig文件来定义相应的页面展示形式。

你可以访问上述两个不同页面,看一下不同的页面展示效果。

Grav 有相当详实的文档,其中还介绍了它的一些高阶特性,比如在贴图时,程序可以自动裁剪图片大小来适应显示(或者自动匹配视网膜屏幕显示)等等。如果想要发挥 Grav 的极致效用,当然要去好好研究一番。但是如果只是想写文章、发布、展示,你要做的只是输入文字,保存成文本即可。

至于效率,我曾在 Grav 的交流社区里看到(抱歉找不到原文),在本地测试的情况下导入 30,000 篇文章,完全不会感到程序有速度上的变化。想一下,如果你以每周两篇博客文章的频率活到 90 岁,写一辈子大概可以写 7,000 篇,离三万还有好远哦。

话说回来,其实 Grav CMS 并非专为博客而生,它简单灵活的模板设计和内容管理功能,其实很适合用来作为企业或者项目站点。甚至在官方的用例展示当中,还有用它来作为网上商店的用例。只不过,如果用它来作为博客程序使用,也完全可以胜任罢了。

可以不谦虚得说,我十分喜欢读文档,对十分常用的程序、软件,我一般会把文档读透。所以 Grav 文档中提到的有关设定、模板变量等内容,如果有任何疑问都可以和我交流——很多地方可以找到我。

赞助

前篇婚姻、爱情、以及性

后篇臭的城

延伸阅读

博客程序换成了 HUGO

2020-06-11

大牛们的玩具:PureEdit

2008-12-18

Movable Type 和 WordPress 后台对比

2008-12-17

本站架设在 RamNode VPS

Grav -> Hugo

Email

© 2004 - 2024

Downloads | Grav CMS

Downloads | Grav CMS

Tour

Features

Blog

Downloads

About

Forum

Learn

5,772

14,242

2,996

You are cordially invited to join the Grav Community on our new Discord Chat Server

Tour

Features

Blog

Downloads

About

Forum

Learn

5,772

14,242

2,996

Grav

Skeletons

49

Themes

119

Plugins

413

Download Grav

Grav Core is the base package with core functionality and a few essential starting pages, and Grav Core + Admin also includes the Administration Panel plugin. Both are easy to get started with, just check out our Basic Tutorial and Guide to the Administration Panel.

Grav Core

Grav Core + Admin plugin

Current Version: 1.7.44

updated 2 months ago

Demo

GitHub Repo

Changelog

Quick installation

Download either the Grav core or Grav core + Admin plugin installation package

Extract the zip file into your webroot

Point your browser at your local webserver: http://yoursite.com

How to Install the Admin plugin

If you have not already installed the admin plugin, you can do so easily with GPM:

$ bin/gpm install admin

This will automatically install the admin plugin plus its dependency plugins (login, email, form)

After this simply point your browser to your Grav installation and you will be prompted to create a new admin user.

How to Update

Please update Grav first!, and then the other plugins...

If you are using the admin plugin, you can simply Update Grav itself from the notice. You can click the Update button to update plugins and themes. If you don't see any updates, you can clear the GPM cache by click the Check for Updates button in the top-right.

Updating is now a simple affair. Simply navigate to the root of the Grav install in your terminal and type:

$ bin/gpm selfupgrade -f

This will upgrade the Grav core to the latest version. Additionally, you should update all your plugins and themes to the latest version (including the admin plugin if you have that installed).

You can do this using the command below:

$ bin/gpm update -f

Read the Documentation

Download Grav

Never miss a thing, sign up to the Grav mailing list

Subscribe

Grav was with by Trilby Media

Contact the Grav Team

About Grav

Grav Media Information

Grav News Feed

Crazy Fast Cloudways Managed Hosting - monitoring by Pingometer

Copyright @2024 - Grav CMS - All rights reserved - Grav is released under the MIT license

Turbo-charge your Grav site - from the creators of Grav

Learn about Premium

Grav - 快速指南_学习Grav|WIKI教程

Grav - 快速指南_学习Grav|WIKI教程

WIKI教程

首页

WIKI工具

学习敏捷数据科学

学习Apex

学习Arduino

学习汇编

学习Awk

C标准库

学习Clojure

学习COBOL

学习计算机编程

学习C ++

C ++标准库

学习C

学习C#

学习dart_programming

学习D.

目录

目录

Grav - 教程

Grav - 概述

Grav - 安装

Grav - Pages

Grav - Markdown 语法

Grav - 页面链接( Page Linking)

Grav - 图像链接( Image Linking)

Grav - Media

Grav - 模块化页面( Modular Pages)

Grav - 多语言( Multi Language)

Grav - 主题基础知识( Themes Basics)

Grav - Theme 教程

Grav - Twig过滤器和功能( Twig Filters & Functions)

Grav - Theme 变量

Grav - 资产经理( Asset Manager)

Grav - 主题定制( Theme Customization)

Grav - 插件基础知识( Plugin Basics)

Grav - 插件基础知识( Plugin Basics)

Grav - 插件基础知识( Plugin Basics)

Grav - Admin 介绍

Grav - 管理员仪表板( Admin Dashboard)

Grav - 配置系统( Configuration System)

Grav - 配置站点( Configuration Site)

Grav - 管理面板页面( Administration Panel Pages)

Grav - 页面编辑器选项( Page Editor Options)

Grav - 页面编辑器高级( Page Editor Advanced)

格拉夫 - 蓝图( Blueprints)

Grav - 性能和缓存( Performance & Caching)

Grav - 调试和记录( Debugging & Logging)

Grav - CLI

Grav - GPM

Grav - 发展( Development)

Grav - 生命周期( Lifecycle)

Grav - YAML 语法

Grav - Forms

Grav - 网页寄存( Web Hostings)

Grav - 服务器错误( Server Error)

格拉夫 - 许可( Permission)

Grav - 面试问题( Interview Questions)

Grav - 快速指南

Grav - 有用的资源

Grav - 讨论

关闭

WIKI教程

学习Grav

Grav - 快速指南

Grav - 快速指南

Grav - Overview Grav是一个基于平面文件的内容管理系统。 此系统不使用数据库来存储内容,而是使用文本(.txt)文件或markdown(.md)文件来存储内容。 平面文件部分指的是可读文本,它以简单的方式处理内容,这对开发人员来说很简单。 Grav由Rocket Theme团队开发。 它运行在PHP上,是一个开源的CMS,如Joomla,Wordpress或Drupal。 为什么格拉夫? Grav现在是最快的平面文件内容管理系统。 使用Grav发布和管理内容更容易。 它允许开发人员通过将内容存储在文件(例如文本或降价文件)而不是数据库中来非常容易地处理内容。 Grav可以帮助您构建一个简单,易于管理和快速的站点。 它的成本低于数据库驱动的CMS,当您没有足够的资源时,它可用于文件处理的I/O. Grav的特点 它是一个快速,简单和强大的平面文件Web平台。 它用于构建没有额外工具或HTML知识的网站。 它使用文本文件或markdown文件来存储内容。 它不使用数据库,因此这减轻了瓶颈的实例。 它使用由Twig提供的基于PHP的模板,该模板直接解析为PHP,使其快速。 优势 (Advantages) 它不是基于数据库CMS,因此它非常易于安装,并且可以在将文件上载到服务器时使用。 它使用Markdown文本文件使事情变得简单。 使用此功能,内容将动态转换为HTML并显示在浏览器中。 在安全性方面,Grav没有管理区域和数据库。 因此,没有机会将黑客入侵或在数据库中访问重要数据。 您可以轻松备份所有文件以保留网站的备份副本,因为没有要备份的数据库。 它是一个不需要更多时间学习的软件。 缺点 (Disadvantages) 您可能遇到未经授权的用户可能直接从文件访问您的内容的实例,因为没有文件的数据库。 使用Grav CMS构建复杂的网站很困难。 Grav - Installation 在本章中,我们将了解Grav的安装。 我们将讨论Grav的软件需求以及如何下载它。 Grav的软件要求 现在让我们了解Grav的软件需求。 Web Server WAMP(Windows) LAMP(Linux) XAMP(多平台) MAMP(Macintosh) Nginx Microsoft IIS Operating System - 跨平台 Browser Support - IE(Internet Explorer 8+),Firefox,谷歌浏览器,Safari,Opera PHP Compatibility - PHP 5.4或更高版本 Text Editors Sublime Text(Mac/Windows/Linux) Atom(Mac/Windows) Notepad ++(Windows) 蓝鱼(Mac/Windows/Linux) 下载Grav 单击此链接https://getgrav.org/downloads并按照下面给出的屏幕截图所示的步骤下载Grav。 将下载的Grav文件解压缩到您的Web服务器中。 安装向导 Grav的安装是一个非常简单的过程。 按照下面给出的Grav设置步骤。 下载zip文件并将其解压缩到Web服务器或本地主机。 从要用于引用站点的当前名称重命名该文件夹。 打开浏览器并导航到localhost/《your_folder_name》 ,您将被重定向到一个屏幕,显示you have installed Grav successfully如下面的屏幕截图所示。 Grav附带了一个示例页面,可帮助您入门。 在上面的屏幕截图中,您可以看到显示示例页面的主页链接。 Grav - Pages 在本章中,让我们研究一下Grav Pages 。 页面可以定义为站点的构建块。 页面结合了内容和导航; 这使得即使是没有经验的用户也能轻松完成工作。 首先,让我们知道如何创建一个简单的页面。 所有用户内容都将存储在user/pages/文件夹下。 将只有一个名为01.home文件夹。 文件夹的数字部分是可选的; 它表示页面的顺序(例如,01将在02之前出现),并明确告知Grav该页面应该在菜单中可见。 现在让我们看看如何创建一个新页面。 Step 1 - 在/user/pages/;下创建一个文件夹/user/pages/; 例如, 02.about 。关于以下屏幕截图所示。 Step 2 - 在新创建的02.about文件夹中创建一个名为default.md的文件,其中包含以下内容。 ---

title: About Us

---

# About Us Page!

This is the body of **about us page**.

上面的代码使用了下面简要介绍的一些Markdown语法。 您可以在Markdown章节中详细了解Markdown 。 ---指标之间的内容是Page Headers 。 Markdown #或hashes语法表示将在HTML中转换为《h1》标题的标题。 **标记表示粗体文本或HTML中的《b》 。 Step 3 - 重新加载浏览器,您可以在菜单中看到新页面,如以下屏幕截图所示。 页面类型 Grav Pages支持3种类型的页面 - 标准页面。 清单页面。 模块化页面。 标准页面 标准页面是最基本的页面类型,例如博客文章,联系表单,错误页面等。默认情况下,页面被视为标准页面。 下载并安装Base Grav软件包后,您将受到标准页面的欢迎。 安装Base Grav包时,您将看到以下页面。 清单页面 列表页面是标准页面的扩展,它具有对页面集合的引用。 设置列表页面的最简单方法是在列表页面下创建子页面。 博客列表页面就是一个很好的例子。 可以在Grav Downloads中找到包含列表页面的博客框架示例。 下面的屏幕截图显示了一个示例。 模块化页面 模块化页面是列表页面的一种形式,它从其子页面构建单个页面。 这允许我们从较小的模块化内容页面构建非常复杂的单页面布局。 这可以通过从页面主文件夹中的多个模块文件夹构建模块化页面来实现。 使用模块化页面的单页骨架样本可以在Grav Downloads中找到。 下面的屏幕截图显示了一个示例。 Folders /user/pages文件夹将包含各自页面的内容。 /user/pages文件夹中的文件夹被Grav自动视为菜单,用于排序。 例如, 01.home文件夹将被视为主页。 订购也要保持,即01.home将在02.about之前。 您应该提供一个入口点,以便在您将浏览器指向站点的根目录时指定浏览器的去向。 例如,如果您在浏览器中输入http: home.alias默认需要别名为home/ ,但您可以通过更改home.alias配置文件中的home.alias选项来覆盖主位置。 文件夹名称前的下划线(_)被标识为Modular folders ,这是一种特殊的文件夹类型,仅用于模块化内容。 例如,对于诸如pages/02.about类的文件夹,slug将默认为about ,URL将为http://mysite.com/about。 如果文件夹名称没有数字前缀,则该页面被视为不可见,并且不会显示在导航中。 例如,if user/pages/ has /contact文件夹将不会显示在导航中。 通过将visible设置为true,可以在标题部分内的页面本身中覆盖它,如下所示,使其在导航中可见。 ---

title: contact

visible: true

---

默认情况下,如果周围文件夹具有数字前缀,则导航中将显示页面。设置可见性的有效值为true或false 。 Ordering 有很多方法可以控制文件夹的排序,其中一个重要的方法是设置页面配置设置的content.order.by 。 选项如下所示。 default - 文件系统可用于排序,即02.out之前的01.home。 title - 标题可用于在每页中定义的排序。 date - 订购可以基于每页定义的日期。 folder - 将删除由任何数字前缀(例如01.)组成的folder夹名称。 basename - Ordering基于没有数字顺序的字母文件夹。 modified - 也可以使用页面的修改时间戳。 header.x - 任何页眉字段都可用于排序。 manual - 可以使用order_manual变量排序。 random - 也可以random化您的订单。 通过提供content.order.custom配置设置的选项列表来明确定义手动订单。 您可以设置pages.order.dir和pages.order.by选项以覆盖pages.order.by系统配置文件中的默认行为。 页面文件 页面文件夹内的页面应创建为.md文件,即Markdown格式文件; 这与YAML前面的事情有关。 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设置组成。 在上面的示例中,我们将标题和分类设置为博客页面。 这对---标记之后的部分是我们在网站上看到的实际内容。 摘要大小和分隔符 可以在page.summary()使用的page.summary()设置摘要的默认大小。 这对于只需要摘要信息而不是整页内容的博客非常有用。 您可以使用manual summary separator也称为summary delimiter :===并确保将其放在内容中,其上方和下方有空行,如下所示。 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.summary()引用时,将使用完整内容。 寻找其他页面 Grav具有名为find()功能,可以在该页面上查找另一个页面并执行操作。 例如,如果要列出特定页面上的所有公司位置,请使用以下降价规则 - # Locations

    {% for loc in page.find('/locations').children if loc != page %}

  • {{ loc.title }}
  • {% endfor %}

Grav - Markdown Syntax Markdown语法定义为以易于阅读和易于编写的格式编写纯文本,后来将其转换为HTML代码。 标记语法中使用(*)或(`)等符号。 这些符号用于加粗,创建标题和组织您的内容。 要使用Markdown语法,必须在user/pages/02.mypage文件夹中创建.md文件。 在\user\config\system.yaml配置文件中启用Markdown语法。 使用Markdown语法有很多好处,其中一些如下。 它易于学习,并且具有最少的字符。 使用markdown时,出现错误的可能性很小。 有效的XHTML输出。 您的内容和视觉显示是分开的,因此不会影响您网站的外观。 您可以使用任何文本编辑器或降价应用程序。 在以下部分中,我们将讨论在markdown中使用的HTML的主要元素。 Headings 对于每个标题,每个标题标签用#创建,即,从h1到h6,#的数量增加,如图所示。 #my new Heading

##my new Heading

###my new Heading

####my new Heading

#####my new Heading

######my new Heading

在浏览器中以localhost/Grav/mypage;打开.md文件localhost/Grav/mypage; 您将收到以下结果 - 注释 (Comments) 您可以使用以下格式编写注释。

This is my new comment

-->

在浏览器中以localhost/Grav/mypage;打开.md文件localhost/Grav/mypage; 您将收到以下结果 - 横向规则 水平规则用于在段落之间创建主题中断。 您可以使用以下任何方法在段落之间创建中断。 ___ - 三个下划线 --- - 三个破折号 *** - 三个星号 在浏览器中以localhost/Grav/mypage;打开md文件localhost/Grav/mypage; 您将收到以下结果 - 正文复印件 正文Body copy可以定义为在标记语法中以正常格式编写文本,使用no (p)标记 例子 (Example)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文件localhost/Grav/mypage; 您将收到以下结果 - Emphasis Emphasis是markdown语法中的书写格式,用于粗体,斜体或删除部分文本。 我们在下面讨论它们 - Bold 可以使用两侧的两个(**)标志使一部分文本变为粗体。 Example The newest articles from **Advance Online Publication (AOP)** and the current issue.

在这个例子中,我们必须将'Advance Online Publication (AOP)'这个词显示为粗体。 在浏览器中打开.md文件作为localhost/Grav/mypage ,您将收到以下结果 - Italics 在单词的任一侧使用“_” (下划线)标记以使文本为斜体。 Example The newest articles from _Advance Online Publication_ (AOP) and the current issues.

在这个例子中,我们必须用斜体“Advance Online Publication” (AOP)这个词。 在浏览器中以localhost/Grav/mypage打开.md文件。 这将给你以下结果 - 删除线(Strikethrough) 在单词的两边使用两个"~~" (波浪形)来删除单词。 Example The newest articles from ~~Advance Online Publication~~ (AOP) and the current issues.

在这个例子中,我们必须打击“高级在线出版物”(AOP)这个词。 在浏览器中以localhost/Grav/mypage打开.md文件。 这将给你以下结果 - Blockquote (Blockquote) 要创建块引用,您必须在句子或单词之前添加>符号> 。 Example >The newest articles from Advance Online Publication (AOP) and the current issues.

在这个例子中,我们在句子前面使用了一个>符号。 在浏览器中以localhost/Grav/mypage;打开.md文件localhost/Grav/mypage; 您将收到以下结果 - 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文件localhost/Grav/mypage; 您将收到以下结果 - Notices 通知可用于通知或通知重要事项。 通知有四种类型 - 黄色,红色,蓝色和绿色。 Yellow 您必须在描述!Info或信息的黄色通知类型之前使用》》》符号。 Example >>>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.

Red 在红色通知之前使用四个》》》》符号表示警告。 Example >>>>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.

Blue 对于蓝色通知类型使用五个》》》》》符号,这描述了一个注释。 Example >>>>>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.

Green 在绿色通知类型之前使用六个》》》》》》符号,这描述了一个提示。 Example >>>>>>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文件localhost/Grav/mypage; 您将收到以下结果 - Lists 在本节中,我们将了解无序和有序列表如何在Grav中工作。 无序(Unordered) 在无序列表中,使用项目符号。 使用*, - , + 。 子弹的符号。 在任何文本之前使用带空格的符号,将显示项目符号。 Example + Bullet

+ Bullet

+ Bullet

-Bullet

-Bullet

-Bullet

*Bullet

在浏览器中以localhost/Grav/mypage;打开.md文件localhost/Grav/mypage; 您将收到以下结果 - Ordered 在列出内容之前添加数字。 Example 1. Coffee

2. Tea

3. Green Tea

在浏览器中以localhost/Grav/mypage打开.md文件。 这将给你以下结果 - Code 在本节中,我们将了解内联和块代码“围栏”如何在Grav中工作。 内联代码 使用(`)内联代码以在markdown中使用代码。 Example In the given example, '

' must be converted into code.

在浏览器中打开.md文件作为localhost/Grav/mypage您将收到以下结果 - 区号“围栏” 如果要阻止多行代码,请使用(```) 。 Example ```

You’re Text Here

```

在浏览器中以localhost/Grav/mypage;打开.md文件localhost/Grav/mypage; 您将收到以下结果 - Tables 在Grav中,通过在标题部分下使用管道和短划线创建表。 管道不得垂直对齐。 例子 (Example)| Number | Points |

| ------ | ----------- |

| 1 | Eve Jackson 94 |

| 2 | John Doe 80 |

| 3 | Adam Johnson 67 |

在浏览器中以localhost/Grav/mypage;打开.md文件localhost/Grav/mypage; 您将收到以下结果 - 右对齐文本 要获取右侧的表格内容,您必须在标题下方的破折号右侧添加冒号。 | Number | Points |

| ------:| -----------: |

| 1 | Eve Jackson 94 |

| 2 | John Doe 80 |

| 3 | Adam Johnson 67 |

在浏览器中以localhost/Grav/mypage;打开.md文件localhost/Grav/mypage; 您将收到以下结果 - Links 在本节中,我们将了解链接在Grav中的工作原理。 基本链接 链接是在([])方括号和(())括号的帮助下完成的。 在[]括号中,您必须编写内容并在()写入域名。 Example [Follow the Given link](http://www.google.com)

在浏览器中以localhost/Grav/mypage;打开.md文件localhost/Grav/mypage; 您将收到以下结果 - 添加标题 在本节中,我们将了解如何在.md文件中添加标题。 Example [Google](https://www.gogle.com/google/ "Visit Google!")

在浏览器中以localhost/Grav/mypage;打开.md文件localhost/Grav/mypage; 您将收到以下结果 - Images 图像类似于链接,但在语法的开头有一个感叹号。 Example ![Nature] (/Grav/images/Grav-images.jpg)

在浏览器中打开.md文件作为localhost/Grav/mypage您将收到以下结果 - Grav - Page Linking 在本章中,我们将了解如何在Grav中链接页面。 您可以通过简单的方式将一个页面链接到另一个页面,甚至可以将页面链接链接到远程页面。 Grav有许多响应式链接选项。 如果您以前使用HTML链接文件,那么在Grav中理解页面链接非常容易。 下面给出了Grav站点的Pages目录的基本示例。 我们将使用以下目录作为示例,如图所示。 下面给出了Grav链接的一些常见组件。 [Linked Content](../path/slug/page)

[] - 指定写入链接的文本或备用内容。 在HTML中,我们使用“a href =”“”和“/ a”来放置内容。 () - URL放在此括号中,该括号直接放在方括号后面。 ../ - 表示向上移动一个目录。 内容中使用了4种类型的链接,如下所示 - Slug Relative Directory Relative Absolute Remote Slug Relative 内部链接不限于文件/目录结构中的某些名称。 Slugs可以从头部和后备目录名称中提取,后来可以帮助您轻松创建链接,因为不需要记住任何特定的文件名但可以记住相关的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标题中的black slug。 目录相对 目标设置相对用于链接当前页面,该页面可以是图像文件或任何其他文件。 文件的位置与目标的位置一样重要。 如果在更改路径时移动文件,则链接可能会中断。 只要文件保持一致,您就可以在本地开发服务器和具有不同域名的实时服务器之间轻松切换。 链接应该没有任何问题。 您将直接通过名称指向文件的链接,而不是其目录或slug。 您可以创建从pages/01.home/01.dog/item.md to pages/02.black/01.fish/item.md使用如下所示的命令。 [link](../../02.black/01.fish/item.md)

上面的代码给出了以下结果 - 两个文件夹都向上移动,如../../ ,然后在底部两个文件夹,直接指向item.md文件。 绝对链接 它类似于相对链接,基于Grav中的/user/pages/目录。 此外,这可以通过两种方法完成。 Slug Relative style Directory Relative style Slug相对风格 你可以像slug相对类型那样做。 它使用路径中的目录名称。 它通过断开链接消除了订单错误和更改。 它会在开头导致链接断开时更改文件夹名称的编号。 下面给出了绝对链接的示例,链接打开/。 它指定在Slug样式的pages/01.home/01.dog/item.md中pages/01.home/01.dog/item.md绝对链接。 [link](/home/nature)

上面的代码给出了以下结果 - 与GitHub等服务一起使用时, Directory relative style更加一致。 他们没有Grav灵活性的好处。 下面您可以看到使用目录相对样式对pages/01.home/01.dog/item.md进行绝对链接的示例。 [link](/01.home/01.dog)

Remote 远程链接允许您通过其URL直接链接到任何文件或文档。 您无需包含自己网站的内容。 以下示例显示如何链接到IoWiki页面。 [link](http://www.iowiki.com)

上面的代码给出了以下结果 - 您可以直接链接到任何URL,包括安全的HTTPS链接。 Grav - Image Linking 在本章中,我们将了解Grav中的图像链接。 Grav允许您将图像从一个页面链接到另一个页面,甚至链接到远程页面。 如果您使用HTML链接文件,那么在Grav中很容易理解图像链接。 使用此结构,我们将了解如何使用不同类型的链接在页面中显示媒体文件。 此结构下的每个文件夹都包含图像,并且/02.green/img01下有一个特殊目录,它充当页面但仅包含媒体文件。 让我们看一下基于Grav markdown的图像标记的一些常见元素。 ![Alt Text](../path/image.ext)

! - 当您将其放在降价链接标记的开头时,它表示图像标记。 [] - 它为图像指定可选的alt文本。 () - 它直接放在包含文件路径的方括号之后。 ../ - 表示向上移动目录。 Grav使用以下列出的五种图像链接 - Slug Relative Directory Relative Absolute Remote Media Actions on Images Slug Relative 它将相对图像链接设置为当前页面,并链接同一目录中的另一个文件。 使用相对链接时,源文件的位置与目标的位置一样重要。 如果在移动时更改文件中的路径,则链接可能会中断。 使用此图像链接结构的优点是,只要文件结构保持不变,您就可以在本地开发服务器和具有不同域名的实时服务器之间切换。 例子 (Example)![link](../water/img01/img.jpg)

这里../表示你的链接向上移动一个文件夹,然后向下移动一个文件夹,img.jpg是目的地。 使用上述路径时,您将收到以下输出 - Grav支持页面主要降价文件标题中的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 Relative或Absolute URL。 目录相对 在此类链接中,您可以将目录相对图像链接设置为当前页面。 您可以在目录相对图像链接中通过完整路径引用其文件夹名称,而不是使用URL slugs。 例子 (Example)![My image](../../blue/img01/img.jpg)

当您使用上述路径时,它将显示如下所示的输出 - Absolute 绝对链接与相对链接相同,但唯一的区别是它们相对于站点的根目录并出现在/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中创建内容时,您可以显示一些媒体文件,如图像,视频和其他文件。 例子 (Example) 您可以使用下面给出的格式加载图像 - ![Styling Example](../img01/img.jpg?cropResize = 400, 200)

当您使用上述路径时,您将收到如下所示的输出 - Grav - Media 媒体文件包含不同类型的显示内容,例如图像,视频和许多其他文件。 Grav自动查找并处理这些文件以供任何页面使用。 通过使用页面的内置功能,您可以访问元数据并动态修改媒体。 Grav使用Smart-caching ,在必要时创建缓存生成的媒体。 这样,所有人都可以使用缓存版本而不是一次又一次地生成媒体。 支持的媒体文件 以下是Grav支持的媒体文件类型 - Image - jpg,jpeg,png Animated Image - gif vectorized Image - svg Video - mp4,mov,m4v,swf Data/information - txt,doc,pdf,html,zip,gz 显示模式 以下是Grav中的几种显示模式 - Source - 它是图像,视频或文件的可视化显示。 text - 媒体文件的文本显示。 thumbnail - 媒体文件的缩略图图像。 找到缩略图 您可以使用三个位置找到缩略图 - In the same folder where your media files exists - [media-name].[media-extension].thumb.[thumb-extension]; 这里,媒体名称和媒体扩展名是实际媒体文件的名称和扩展名,拇指扩展名是图像媒体类型支持的扩展名。 User Folder − user/images/media/thumb-[media-extension].png; 这里,media-extension是实际媒体文件的扩展。 System folder - system/images/media/thumb-[media-extension].png; 这里,media-extension是实际媒体文件的扩展。 灯箱和链接 Grav给出了一个锚标记的输出,其中包含了一些要读取的lightbox插件的元素。 如果要使用插件中未包含的灯箱库,则可以使用以下属性创建自己的插件。 rel - 表示灯箱链接。 值是灯箱。 href - 它是媒体对象的URL。 data-width - 设置用户选择的灯箱宽度。 data-height - 设置用户选择的灯箱高度。 data-srcset - srcset字符串用于图像媒体。 Actions Grav中的Builder模式用于处理媒体,以执行多个操作。 所有媒体都支持某些类型的操作,而有些操作仅适用于特定媒体。 General 有六种类型的常规操作可用于媒体类型。 每个动作都在下面解释。 Sr.No. 行动和描述 1 url() url()返回媒体的raw url path 。 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) value -255到+255 ,亮度滤镜将添加到图像中。 9 contrast(value) -100到+100之间的值用于将对比度滤镜应用于图像。 10 grayscale() 他用灰度滤镜处理图像。 11 emboss() 压花过滤器也用于处理图像。 12 smooth(value) 通过将值设置为-10到+10,将平滑滤镜应用于图像。 13 sharp() 锐化滤镜添加到图像上。 14 edge() 边缘搜索过滤器添加在图像上。 15 colorize(red, green, blue) 通过调整红色,绿色和蓝色来着色图像。 16 sepia() 添加了棕褐色滤镜,带来复古外观。 动画和矢量化图像和视频 动画和矢量化动作在图像和视频上完成。 以下是对图像和视频进行的操作。 Sr.No. 行动和描述 1 resize(width, height) 调整大小操作将设置width, height, data-width和data-height属性。 组合(Combinations) Grav具有图像处理功能,可以轻松处理图像。 ![My New Image](/images/maxresdefault.jpg?negate&cropZoom = 500, 500&lightbox & cropZoom = 600,

200&contrast = -100&sharp&sepia)

上面的代码将生成如下所示的输出 - 响应式图像 下表列出了几种类型的响应图像。 Sr.No. 行动和描述 1 密度更高的显示器 在文件名中添加后缀,您可以向页面添加更高密度的图像。 2 媒体查询的大小 在文件名中添加后缀,您可以向页面添加更高密度的图像。 图元文件(Metafiles) image1.jpg, archive.zip或任何其他引用都能够设置变量或者可以被元文件覆盖。 然后这些文件采用《filename》.meta.yaml的格式。 例如,如果您有一个image2.jpg图像,那么您的图元文件可以创建为image2.jpg.meta.yaml 。 内容必须采用yaml语法。 您可以使用此方法添加任何您喜欢的文件或元数据。 Grav - Modular Pages 模块化页面一开始很难理解,但一旦你了解它,它就会很容易使用。 它可以从其子页面创建单个页面。 它能够从模块化内容页面构建复杂的单页面布局。 模块化页面设置为不可路由,因为无法通过URL直接访问它们。 它们在文件夹名称之前由_(下划线)标识。 它是一组页面,每个页面都显示一个以获得单个页面。 例如, user/pages/home/_header. 。 文件夹结构 如果是单页骨架,您可以在01.home文件夹中找到此页面。 在这里,您将获得一个模块化的.md文件,该文件指出必须包含哪些页面以及要显示的页面顺序。 modular.html.twig可以在您当前的主题文件夹中找到。 在下图中,您可以看到为模块化页面创建的文件夹结构。 每个子文件夹都必须包含描述markdown文件的.md文件。 首先,您必须在/users/pages/01.home文件夹中创建子文件夹。 接下来,每个文件夹必须包含.md文件和modular.md文件。 创建子文件夹时,图像和文件都必须位于同一文件夹中。 如何创建模块化页面 要创建模块化页面,您必须遵循给定的步骤。 Step 1 - 在/user/pages/01.home/创建几个页面。 夹。 在下图中,您可以看到我们创建了两个文件夹以及modular.md文件。 Step 2 - 要创建模块化页面,您必须在每个文件夹中创建一个文件并将其命名为text.md Step 3 - 接下来,在text.md文件中添加代码,保存并运行相同的代码。 Example 将所有四个页面保存为.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个页面,将它们添加到\templates\modular文件夹,如下所示。 接下来,转到主页并刷新,您可以看到更改。 在新的导航栏中,您可以看到四个文件链接。 Grav - Multi Language 多语言定义为在您的网站中使用不同的语言。 我们将学习不同的程序,以帮助您在Grav站点中使用多语言。 多语言基础知识 基本上Grav需要一个.md文件来表示任何页面。 启用多语言支持时,它将查找default.en.md或default.fr.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文件。 Example 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激活语言 如果您想使用语言代码更新网站的网址,请按以下步骤操作 - Example 如果您希望自己的网站使用英文,请在浏览器中输入以下内容 - http://www.mysite.com/en

如果您希望自己的网站使用法语,请在浏览器中输入以下内容 - http://www.mysite.com/fr

通过浏览器激活语言 Grav能够获取http_accept_language值并将它们与当前支持的语言进行比较。 如果您希望此功能正常运行,请在语言部分启用您的user/system.yaml文件 - language :

http_accept_language : true

Language-Based Homepage 要拥有基于语言的主页,您必须在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

基于语言的树枝模板 如果您的文件是default.en.md ,那么Grav将查找twig文件default.html.twig 。 当您需要特定于语言的twig文件时,必须在语言文件夹的根级别上载它。 如果您当前的主题位于templates/default.html.twig ,则必须创建templates/en/文件夹,并将特定于英语的文件夹放在其中: templates/en/default.html.twig 语言切换器 Grav Package Manager(GPM)提供语言切换器插件。 通过Twig翻译 使用twig filter和t()函数。 两者功能相似。 如果你有另一个twig文件,那么它允许你从一个数组转换。 插件和主题语言翻译 通过在主题或插件的根目录(/user/plugins/error/languages.yaml)中创建languages.yaml文件,提供插件和主题的翻译,并且必须包含所有支持的语言。 翻译覆盖 如果要覆盖转换,则必须将值对放在user/languages/文件夹中的语言文件中。 Advanced Environment – Based Language Handling 可以根据URL将用户路由到您站点的正确版本。 如果您的站点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

然后只需添加您想要的语言即新网址。 /en/blog/custom/my-page

翻译支持 Grav提供了简单的机制,通过PHP在Twig中提供翻译,用于主题和插件。 它默认启用,如果没有定义特定语言,则使用en语言。 要启用或禁用,请转至system.yaml文件并进行更改。 languages:

translations: true

您可以通过多种方式和不同的地方提供翻译。 首先是系统/语言文件夹。 必须以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

Session Based Active Language 您可以激活活动语言的基于会话的存储。 要启用,您必须在system.yaml中具有session : enables : true enable session : enables : true并启用语言设置。 languages:

session_store_active: true

Language Switcher 从GPM安装语言切换插件。 Setup with language specific domains 使用基于环境的语言处理配置来分配默认语言。 将此选项添加到system.yaml; 它必须设置为true。 pages.redirect_default_route: true

将以下内容添加到.htaccess文件中,并根据您的要求选择语言slugs和域名。 # 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]

Grav - Themes Basics 主题控制Grav网站的外观。 Grav中的主题是使用强大的Twig Templating引擎构建的。 内容页面和树枝模板 您创建的页面,按名称引用特定模板文件或通过设置页面的模板头变量。 建议使用页面名称以便进行更简单的维护。 安装Grav Base软件包后,您将在user/pages/01.home文件夹中找到defauld.md文件。 该文件的名称,即default告诉Grav,应该使用置于themes/《mytheme》/templates文件夹中的themes/《mytheme》/templates模板default.html.twig来呈现此页面。 例如,如果您有一个名为contact.md的文件,它将使用themes/《mytheme》/templates/contact.html.twig模板作为themes/《mytheme》/templates/contact.html.twig 。 主题组织 在以下部分中,我们将讨论主题组织,即其定义,配置等。 定义和配置 有关主题的信息将在user/themes/antimatter/blueprints.yaml文件中定义,并且可选择提供要在“管理”面板中使用的表单定义。 您将在user/themes/antimatter/blueprints.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的文件中提供默认设置。 Example enable: true

主题和插件事件 主题通过插件架构与Grav交互的能力是Grav的另一个强大功能。 要实现此目的,只需创建user/themes/《mytheme》/《mytheme》.php (例如, antimatter.php为默认的Antimatter主题)文件并使用以下格式。

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');

}

}

模板 (Templates) Grav主题的结构没有设置规则,除了每个页面类型内容的模板/文件夹中必须有关联的twig模板。 由于页面内容和树枝模板之间的这种紧密耦合,最好根据下载页面中提供的Skeleton包创建一般主题。 假设您要在主题中支持模块化模板,您必须创建modular/文件夹并在其中存储twig模板文件。 如果要支持表单,则应创建form/文件夹并在其中存储表单模板。 蓝图(Blueprints) 要为每个模板文件定义选项和配置的表单,请使用blueprints/文件夹。 这些将无法通过Administrator Panel进行编辑,并且可以选择使用。 主题功能齐全,没有blueprints文件夹。 SCSS/LESS/CSS 如果你想用SASS或LESS开发网站,那么你必须在user/themes/《mytheme》/scss/创建子文件夹,或者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》/文件夹中为主题中使用的任何图像,字体和JavaScript文件创建单独的images/, fonts/和js/文件夹。 主题示例 我们到目前为止讨论的Antimatter主题的整体文件夹结构如下所示。 Grav - Theme Tutorial 在本章中,让我们创建一个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 user/themes/bootstrap文件,并在其中粘贴以下内容。

namespace Grav\Theme;

use Grav\Common\Theme;

class Bootstrap extends Theme {}

现在,在themes/bootstrap文件夹中创建一个主题配置文件bootstrap.yaml ,并在其中写入以下内容。 enable: true

我们将跳过blueprints文件夹,因为我们没有配置选项,本章将使用常规CSS。 第2步:添加Bootstrap 要创建引导主题,必须在主题中包含Bootstrap。 因此,您需要通过单击此link下载最新的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文件。

{% block head %}

{% if header.description %}

{% else %}

{% endif %}

{% if header.robots %}

{% endif %}

{% if header.title %}{{ header.title }} | {% endif %}{{ site.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 %}

{# include the header + navigation #}

{% include 'partials/header.html.twig' %}

{% block content %}{% endblock %}

{% block bottom %}{% endblock %}

第4步:打破它 让我们看看代码如何在base.html.twig文件中工作,如下所示。 {% block head %}{% endblock head %}语法用于定义基本Twig模板中的区域。 {% endblock head %}内的{% endblock 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') %}

or, {% 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模板文件,其中包含以下内容。

上述代码创建一个导航栏,并在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并告诉基本模板对content块使用{{ page.content }} 。 第7步:主题CSS 在partials/base.html.twig文件中,我们使用assets.add('theme://css/bootstrap-custom.css',100)引用自定义主题css,它存储您站点中使用的任何自定义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 Filters and Functions 在本章中,我们将研究Twig Filters and Functions 。 过滤器也用于根据需要使用所需的输出格式化数据。 函数用于生成内容。 Twig模板是包含由值替换的表达式和变量的文本文件。 Twig使用三种类型的标签。 Output tags - 以下语法用于在此处显示已计算的表达式结果。 {{ Place Your Output Here }}

Action Tags - 以下语法用于在此处执行语句。 {% executable statements are placed here %}

Comment tags - 以下语法用于在Twig模板文件中编写注释。 {# write your comment here #}

树枝过滤器 Twig Filters使用| 将过滤器应用于Twig变量后跟过滤器名称的字符。 类似于Twig函数,参数可以在括号中传递。 下表显示了Grav中使用的Twig过滤器 - Sr.No. 过滤和说明 例 1 Absolute URL 它采用相对路径并将其转换为绝对URL。 '' |absolute_url

转换为 -

2 Camelize 它将字符串转换为CamelCase格式。 'contact_us'| camelize

转换为 - ContactUs

3 Contains 如果找到字符串。 'This is some string' | 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过滤器确定字符串是否以给定字符串结尾。 'this is an example for ends-with filter' | ends_with('filter')

它显示为 - True

6 FieldName 它通过将点更改为数组表示法来过滤字段名称。 'field.name'|fieldName

它显示为 - field[name]

7 Humanize 它用于将字符串转换为人类可读格式。 'some_text_to_read'|humanize

它显示为 - Some text to read

8 Ksort 它使用键对数组映射进行排序。 {% 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 with markdown'|markdown

它显示为 -

some text with 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过滤器,可以将标准(如第1, 第 2,第3)赋予整数。 '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 它与left trim非常相似,只是它从字符串的右侧删除了空格和匹配的字符。 '/strip/leading/slash/'|rtrim('/')

它显示为 - /strip/leading/slash

18 Singularize 可以使用奇异滤波器将字符串转换为英文单数形式。 '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过滤器确定字符串是否以给定字符串开头。 'this is an example for starts-with filter' |starts_with('this')

输出是 - true

22 Translate 了解更多详细信息。 MY_LANGUAGE_KEY_STRING

它显示 - 'Some text in English'

23 Translate Admin 它将字符串转换为当前语言,该语言在user.yaml文件中设置。 24 Titleize 使用Titleize将字符串转换为Title Case格式。 'welcome page'|titleize

它显示为 - Welcome Page

25 UnderScoreize 使用UnderScoreize过滤器格式化。 'ContactUs'|underscorize

它被转换为 - contact_us

26 Truncate a string 您可以使用Truncate截断字符串或​​缩短字符串,您必须指定字符数。 'one sentence. two sentences'|truncate(5)

它截断为 - one s...

如果您不希望在给定的字符数后将字符串截断为最接近的句末,则可以使用true作为参数。 'one sentence. two sentences'|truncate(5, true)

它截断为 - one sentence

您也可以删除HTML文本,但在truncate过滤器之前应使用striptags过滤器。 '

one sentence. two sentences

'|striptags|truncate(5)

它显示为 - one 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) will repeat Grav 10 times.

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 使用Translate过滤器,字符串被转换为|t过滤器。 t('SITE_NAME')

被翻译成 - Site Name

Grav - Theme Variables 在本章中,让我们了解Grav中的Theme Variables 。 在设计主题时,可以从树枝模板访问对象和变量,这些对象和变量由Twig模板框架读取和操作。 核心对象 Twig模板有许多core objects; 每个对象都有一组variables和functions 。 下表显示了带有简要说明的变量。 Sr.No. 变量和描述 1 {{ base_dir }} 我们可以使用此变量获取Grav安装基本文件目录。 2 {{ base_url }} 可以使用此变量访问Grav站点的基本URL。 3 {{ base_url_relative }} 它返回基本URL到Grav站点的相对路径。 4 {{ base_url_absolute }} 它将基本URL的绝对路径返回到Grav站点。 5 {{ theme_dir }} 它用于返回当前主题的文件目录文件夹。 6 {{ theme_url }} 它用于返回当前主题的相对URL。 配置对象 在configuration.yaml文件中,config对象设置为访问任何Grav配置设置。 {{ config.pages.theme }}

它将返回当前配置的主题。 网站对象 为config.site对象提供别名,表示site.yaml文件中设置的配置。 样式表对象 这些对象提供了一个用于存储CSS样式表资产的数组,可以循环将CSS添加到模板中。 脚本对象 这些对象提供了一个由JavaScript资产组成的数组,该数据循环并将JavaScripts添加到模板中。 页面对象 由于Grav的结构在pages/文件夹中定义,因此page object负责表示每个页面。 page object包含有关您当前正在处理的页面的所有信息。 下表显示了页面对象的方法。 Sr.No. 方法和描述 例 1 summary([size]) 它给出了页面内容的要点,其中指定的大小作为参数提供。 如果未指定size,则从system/config/site.yaml文件中的summary.size变量获取该值。 您还可以在内容中分隔=== 。 分隔符前的内容将用于摘要。 {{ page.summary }}

OR {{ 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() 通过使用此功能,我们可以确定页面是否routable或not routable这意味着您是否可以在将浏览器指向页面时接收内容。 不可路由的页面可以用在插件,模板等中,并且不能直接访问这些页面。 这是在页眉中设置的。 title: My Page

routable: true

9 slug() 通过使用此变量,我们可以获得页面URL中显示的直接名称。 my-page

10 url([include_host = false]) 它用于返回页面的URL {{ page.url }} { # could return /myfolder/mypage #}

OR {{ 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; 或者,简单来说就是当前网址中此网页的网址。 当您处理导航并且想要知道页面是否在同一父页面上进行迭代时,这非常有用。 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(descending) 。 通常,这些值在页眉中配置。 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对象表示为页面对象的嵌套树。 在创建navigations, sitemap或finding a particular page navigations, sitemap此嵌套树非常有用。 儿童方法 这将返回由子页面组成的页面对象数组。 具有树状结构的页面对象可以在文件夹中的每个页面上迭代。 要获取菜单的顶级页面,请使用以下代码。

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) 这将返回参数的值。 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() 通过此方法返回页面的引用者信息。 标题对象 它是原始页面的page.header()的替代。 循环浏览子页面时,更适合使用原始页眉。 内容对象 它是原始页面的page.content()的替代。 分类对象 站点的所有分类信息都包含在全局分类对象中。 浏览器对象 Grav通过使用内置支持以编程方式确定用户的平台,浏览器和版本。 {{ browser.platform}} # windows

{{ browser.browser}} # chrome

{{ browser.version}} # 24

添加自定义变量 自定义变量以多种方式添加。 如果您使用的是站点范围的变量,则将其放在user/config/site.yaml文件中,然后您可以访问它,如下所示。 {{ site.my_variable }}

如果变量仅适用于特定页面,则可以在YAML前端添加它,并使用page.header对象访问它。 For example - title: My Page

author: John

作者姓名可以访问为 - The author of this page is: {{ page.header.author }}

添加自定义对象 通过使用插件,您可以将自定义对象添加到Twig对象。 这是一个高级主题,我们将在插件章节中看到更多信息。 Grav - Asset Manager 在本章中,我们将研究Asset Manager 。 在Grav 0.9.0中引入了Asset Manager来统一用于添加和管理JavaScript和CSS等资产的界面。 从主题和插件添加这些资源将提供诸如ordering和Asset Pipeline等高级功能。 Asset Pipeline用于缩小和压缩资产,以减少浏览器的需求并减少资产的大小。 Asset Manager是一个类,可以通过插件事件挂钩在Grav中使用。 您还可以使用Twig调用直接在主题中使用Asset Manager类。 配置 (Configuration) Asset Manager由一组配置选项组成。 system.yaml文件包含默认值; 您可以在user/config/system.yaml文件中覆盖这些值。 assets: # Configuration for Assets Manager (JS, CSS)

css_pipeline: false # The CSS pipeline is the unification of multiple CSS resources into one file

css_minify: true # Minify the CSS during pipelining

css_rewrite: true # Rewrite any CSS relative URLs during pipelining

js_pipeline: false # The JS pipeline is the unification of multiple JS resources into one file

js_minify: true # Minify the JS during pipelining

主题资产 安装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()方法使用它。 如果您使用多个主题或插件,则此方法非常有用。 选项 (Options) 有许多选项可以传递资产数组,如下所示 - 对于CSS priority - 它采用整数值,默认值为100。 pipeline - 当资产未包含在管道中时,它将设置为false值。 并且默认值设置为true 。 For JS priority - 取整数值,默认值为100。 pipeline - 当资产未包含在管道中时,设置为false 。 并且默认值设置为true 。 loading - 此选项支持3个值,例如empty , async和defer 。 group - 它由一个字符串组成,该字符串指定组的唯一名称。 并且默认值设置为true 。 Example {% 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() 基于已经到资产管理器的所有JS资产, js()方法呈现由HTML JS链接标记组成的列表。 根据管道属性,列表可以包含缩小文件和个人/组合资产。 命名资产 Grav允许您使用名称注册CSS和JS资产的集合,以便您可以使用注册名称add资产add到Asset Manager。 这可以通过使用named assets的功能在Grav中完成。 这些自定义集合在system.yaml;中定义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引入了一个名为Grouped Assets的新功能,它允许您在添加Assets时传递由可选group组成的选项数组。 当您在页面的特定部分需要一些JS文件或内联JS时,此功能非常有用。 通过使用选项语法,您必须在添加资产时指定组,如下所示。 {% do assets.addJs('theme://js/example.js', {'priority':102, 'group':'bottom'}) %}

如果没有为资产设置组,则将head设置为默认组。 如果要在底部组中呈现这些资源,则必须在主题中添加以下内容。 {{ assets.js('bottom') }}

静态资产 无论何时想要在不使用Asset Manager的情况下引用资产,都可以使用url()辅助方法。 例如,如果要从主题中引用图像,则可以使用以下语法。 {{ widget.text|e }}

url()帮助器方法可选地使用第二个参数来使URL能够使用true或false值来包含域和模式。 默认情况下,该值设置为false ,仅显示相对URL。 Example url("theme://somepath/mycss.css", true)

Grav - Theme Customization 在本章中,让我们研究一下Theme Customization 。 有几种方法可以自定义主题。 Grav提供了许多功能和一些功能,可以轻松自定义您的主题。 自定义CSS 您可以提供自己的custom.css文件来自定义主题。 Antimatter主题通过使用Asset Manager引用css/custom.css文件。 如果未找到对CSS文件的引用,则Asset Manager将不会添加对HTML的引用。 在Antimatter的css/文件夹中创建CSS文件将覆盖默认的CSS。 例如 - custom.css body a {

color: #FFFF00;

}

默认链接颜色被覆盖并设置为黄色。 Custom SCSS/LESS 提供自定义CSS文件的另一种方法是使用custom.scss文件。 SCSS(Syntactically Awesome Style Sheets)是一个CSS预处理器,它允许您通过使用运算符,变量,嵌套结构,导入,部分和混合来有效地构建CSS。 反物质是使用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。 这是选择这种方式来定制主题的主要缺点。 这可以通过使用主题继承来解决。 主题继承 Theme Inheritance是修改或自定义主题的最佳方式,可以通过一些设置来完成。 基本思想是将主题定义为您继承的基本主题,并且只能修改一些位,其余部分由基本主题处理。 使用主题继承的优点是,只要更新基本主题,定制的继承主题就不会直接受到影响。 为此,您需要按照以下步骤操作。 要存储新主题,请创建名为mytheme/ inside /user/themes/ folder的新文件夹。 接下来,您需要在新创建的/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

现在创建了新的主题,反物质将成为这个新的mytheme主题的基本主题。 如果你想修改特定的SCSS,我们需要配置SCSS编译器,使它首先看你的mytheme主题,其次是反物质主题。 它使用以下设置 - 首先复制放在antimatter/scss/文件夹中的template.scss文件,然后将其粘贴到mytheme/scss/文件夹中。 此文件将包含各种文件的所有@import调用,如template/_custom.scss和子文件。 load-path指向包含大量SCSS文件的antimatter/scss/文件夹。 要运行SCSS编译器,需要为其提供load-path to it as shown below. scss --load-path ../antimatter/scss --watch scss:css-compiled

现在,在mytheme/scss/template/下创建一个名为_custom.scss的文件。 此文件将包含您的所有修改。 更改自定义SCSS文件后,所有SCSS文件将自动再次编译到template.css ,该文件位于mytheme/css-compiled/文件夹下,然后Grav会准确地引用它。 Grav - Plugin Basics 在本章中,我们将了解插件如何作为Grav中的附加功能。 插件是一款软件,提供了Grav核心功能最初未完成的附加功能。 可以上载Grav插件以扩展站点的功能。 插件用于简化您的工作。 Dependency Injection Container有助于访问Grav中的关键对象。 在Grav's event hooks的帮助下,在整个生命周期中,我们可以根据需要操纵Grav,也可以访问Grav知道的任何内容。 我们将在章节Grav - Event Hooks中详细研究Grav事件挂钩 。 Dependency Injection是一种软件设计模式,其中组件被赋予其依赖性,而不是在组件内对它们进行硬编码。 Grav有许多免费插件可用于显示博客存档,站点地图,搜索引擎,表单,灯光滑块等等。 您可以从here下载插件。 在Plugin文件夹中,您可以使用唯一名称存储插件; 该名称应与插件的功能相关,并且不应包含任何大写字母,下划线或空格。 我们将在章节Grav - 插件教程中研究如何使用插件。 Powerful 插件易于编写,灵活且功能强大。 有46个插件,具有包括displaying a sitemap , provides breadcrumbs , display blog archives等功能。 要点(Essentials) 在系统上安装Grav时,您可以看到《your_folder_name》/user/plugins文件夹中有两个插件。 错误插件 问题插件 Error Plugin - 用于显示HTTP错误,即当没有可用于给定URI的请求页面时, 404 Page Not Found 。 Problem Plugin - 用于检测有关权限,主机设置和丢失文件夹的问题。 当您安装新的Grav以识别此类问题时,它非常有用。 Grav - Plugin Tutorials 在本章中,我们将深入研究如何设置和配置插件。 此外,我们还将了解插件的结构以及如何显示随机页面。 插件是一款软件,提供了Grav核心功能最初未完成的附加功能。 在本文中,我们将使用random插件显示随机页面。 在使用这个插件之前,我们将看到随机插件的一些重要点。 您可以使用此插件通过使用URI作为/random来显示随机页面。 创建过滤器以使用页面中指定的分类法。 您可以创建category : blog 。 您可以使用过滤器选项显示随机页面; 这通知Grav使用随机页面中显示的相同内容。 安装插件 在使用实际插件之前,请按照以下步骤为插件创建基本设置。 在user/plugins文件夹下创建名为random的文件夹。 在user/plugins/random文件夹下,创建两个文件,即 - random.php用于插件代码 random.yaml用于配置 插件配置 要使用随机插件,我们需要一些配置选项。 我们将在random.yaml文件下写下以下行。 enabled:true

route:/random

filters:

category:blog

随机创建您定义的路线。 基于分类过滤器,它选择一个随机项。 过滤器的默认值是'category: blog' ,用于随机选择。 插件结构 可以在插件结构中使用以下代码。

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语句在插件中使用了一堆类,这使得它更具可读性并节省空间。 namespace Grav\Plugin必须写在PHP文件的顶部。 插件名称应该用titlecase编写,并且应该使用Plugin进行扩展。 您可以将函数getSubscribedEvents()订阅到onPluginsInitialized事件; 这决定了插件订阅的事件。 像这样,您可以使用该事件订阅其他事件。 public static function getSubscribedEvents() {

return [

'onPluginsInitialized' => ['onPluginsInitialized', 0],

];

}

现在让我们使用RandomPlugin类下的onPluginInitialized事件,该类用于路由在random.yaml文件中配置的页面。 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变量。 取消设置当前页面对象并将当前页面设置为在集合中显示为随机页面。 最后,我们将看到完整的插件代码,以显示如下所示的随机页面 -

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 - Event Hooks 在本章中,我们将研究Grav中的Event Hooks 。 在Plugins章节中,您将看到,插件的逻辑包含在两个方法中。 方法是onPluginsInitialized和onPageInitialized ; 这些方法类似于事件挂钩。 要了解更多信息并控制Grav插件的功能,您需要检查事件挂钩的可用性。 事件挂钩从头到尾与Grav有直接关系。 您必须知道调用挂钩的顺序以及这些调用时可用的内容。 下表列出了在处理页面期间激活的核心Grav event hooks 。 Sr.No. 活动和描述 1 onFatalException 如果PHP给出致命异常,您可以随时触发此事件。 Problem插件使用它来管理显示完整解释的列表,以解决Grav传递致命错误的原因。 2 onPluginsInitialized 这是第一个可在Grav中使用的插件事件。 如下所述介绍了以下对象 - UriConfigDebuggerCachePlugins3 onAssetsInitialized 这指定assets管理器已加载并可供使用和管理。 4 onPageNotFound 如果您找到了意外的页面,则可以关闭此事件。 目前,错误插件用于指定404 error页面。 5 onPageInitialized 这通过加载到Page对象的URL指定所请求的页面。 6 onOutputGenerated 这指定了Twig templating引擎的输出过程。 目前,它只是一串HTML 。 7 onOutputRendered 这是一个输出过程,发送到显示器。 8 onShutdown 这是一个新的非常强大的事件,允许您执行操作。 这是在Grav completed processing并关闭与客户端的连接之后completed processing 。 此单独操作不需要与用户进行任何交互,结果会影响性能。 它包括用户跟踪和作业处理。 9 onBeforeDownload 这是一个新事件,它passes到包含文件的事件对象。 它允许用户执行记录,授予和忽略下载所述文件的权限。 Twig Event Hooks Twig有自己的事件挂钩集合,如下所述。 Sr.No. 活动和描述 1 onTwigTemplatePaths 模板路径的基本位置在Twig object上设置。 此事件用于添加Twig将搜索模板路径的其他位置。 2 onTwiglnitialized 它initialize Twig模板引擎。 3 onTwigExtensions 它指定核心树枝扩展即可使用。 此事件挂钩允许您添加自己的Twig扩展。 4 onTwigPageVariables 这个Twig过程允许你直接页面,即你可以在YAML标题的页面中找到process:twig:tru 。 在这里,您可以向Twig添加任何变量,并且在此过程中可以访问twig。 5 onTwigSiteVariables 在此过程中,您将通过Twig方法按order wise查看完整的网站模板。 此外,您可以在此过程中向Twig添加任何变量。 收集事件挂钩 下表列出了一个集合事件挂钩。 Sr.No. 活动和描述 1 onCollectionProcessed 在本节中,一旦完成该过程,您就可以control集合。 页面事件挂钩 下表列出了页面事件挂钩的集合。 Sr.No. 活动和描述 1 onBuildPagesInitialized 此事件对于插件控制内容和缓存结果非常有用。 激活此事件后,页面将被回收。 当缓存已expired或需要refreshing时,会发生这种情况。 2 onBlueprintCreated 此事件有助于处理和管理表单。 3 onPageContentRaw 在此过程中,当找到页面时, headers是固定的,但content将不会被修复。 您将在Grav系统中看到每个页面都被触发。 如果已清除缓存或清除缓存,则会发生此事件。 4 onPageProcessed 一旦页面被tested并修复,每个页面都会在Grav系统中被解除。 在这种情况下,性能无关紧要,因为它不会在缓存页面上播放。 5 onPageContentProcessed 一旦页面的content()技术修复了页面内容,您就可以看到此事件被解除。 如果您希望对修复后的内容执行操作但确保cached结果,则此事件非常有用。 6 onFolderProcessed 测试并修复文件夹后,Grav系统中的每个文件夹都将被解除。 在这种情况下,性能无关紧要,因为它不会在缓存页面上播放。 Grav - Admin Introduction Grav Administration Panel插件是Grav Administration Panel的Web图形用户界面(GUI)。 它可以轻松创建和修改页面。 它是一个可选的插件,有效地工作Grav并不完全依赖于此。 管理员提供有限的视图以便于使用Grav。 特点 (Features) 以下是行政小组的特点 - 启用或禁用插件管理器列表中的插件。 您可以轻松地创建,编辑,复制和删除页面。 最新页面更新列表显示在仪表板上。 只需点击一下,即可轻松查看最新的可用更新。 使用搜索框从列表中查找特定页面。 它由忘记密码的功能组成。 可以通过拖放方法上传媒体文件。 允许在正常模式和专家模式下通过yaml或表单进行编辑。 仪表板包括站点活动,最新页面更新和维护状态。 它由Ajax驱动的备份和清除缓存功能组成。 它由站点和系统配置管理组成。 由GPM提供支持的新插件和主题安装。 用户登录时提供自动密码加密功能。 它提供了代码编辑器,通过即时Grav驱动的预览突出强大的语法。 可以使用主题管理器完成已安装的主题列表和配置。 它还管理登录用户。 安装 (Installation) 要访问管理插件,我们需要运行latest Grav 。 您可以在CLI(命令行界面)中运行以下命令。 $ bin/gpm selfupgrade -f

selfupgrade用于将selfupgrade更新为可用的最新版本。 -f用于刷新GPM(Grav包管理器)索引。 我们需要安装admin , form , email和login插件,以使您的管理插件正常运行。 由于所有插件都有依赖关系,因此在安装admin插件时提示您安装其他插件时需要同意; 这些插件可通过GPM(Grav Package Manager)获得。 我们将在Grav-GPM一章中更多地了解GPM 。 以下命令用于使用命令提示符安装管理插件。 $ bin/gpm install admin

手动安装 我们可以通过单独下载以下插件手动安装管理面板 - admin form login email 下载完所有插件后,解压缩所有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: 'IOWIKI'

title: tp

password: 'Password'

将以上行保存在《your_folder_name》/user/account/admin.yaml文件中。 您用于保存上述代码的username将是您登录的username ,即admin。 您可以根据您的要求编辑email , fullname , title和password 。 用法 (Usage) 您可以通过将浏览器指向localhost/《your_folder_name》/admin来访问管理面板,您将看到如下所示的屏幕。 您可以在creating user部分中指定的yaml文件中设置username和password 。 Grav - Admin Dashboard 在本章中,我们将研究Grav中的Administrative Panel Dashboard 。 仪表板充当Grav管理面板插件的信息神经中枢。 您可以检查traffic statistics , create new backups , Grav updates , maintenance information ,查看最新页面更新,还可以借助此单页清除Grav缓存。 Step 1 - 您可以指定用户的权限,并根据需求更改Dashboard的内容。 仪表板的屏幕有点像下面的屏幕截图。 Step 2 - 您现在将在仪表板中看到Cache and Updates Checking的功能。 您将在“仪表板”菜单顶部看到两个选项卡。 清除缓存 检查更新 清除缓存 它指定删除所有缓存内容,包括图像缓存和资产。 您可以在下拉菜单中看到更多功能,如下所述。 All cache - 它指定删除所有缓存 Assets only - 它指定仅删除资产的缓存。 Images only - 它指定仅删除图像的缓存。 Cache only - 它定义为仅删除缓存。 检查更新 此选项卡指定检查站点的更新。 如果有新的更新,您将在仪表板上收到通知。 您将收到支持的插件,主题甚至Grav的更新。 维护和统计 此部分可让您了解有关您网站的重要信息。 维护(Maintenance) 本节为您提供完全最新的Grav功能的百分比图表。 您将在维护和统计部分上方看到所需更新的通知。 Update - 只要有新的更新,就会出现“更新”按钮。 接下来,您可以单击它并更新插件和主题。 您将在通知栏中看到“ Update Grav Now按钮,该按钮会更新Grav的核心部分。 Backup - 在此部分中,您可以看到显示您未备份站点多长时间的图表。 这可以通过生成和下载zip文件来执行,将其另存为站点数据的备份。 统计(Statistics) 它会显示您网站上访问者流量的简单快速图表,该图表是在过去一天,一周和一个月内收到的。 它显示的条形图分为一周中的几天。 Step 3 - 接下来,您将看到最新页面更新的详细信息,如下所示。 本部分允许您了解有关Grav站点中页面的最新修改内容的更多信息。 接下来,每次刷新页面时,它都会为您生成最近更新的列表。 您可以从列表中单击页面的title ; 这会将您重定向到管理部分中的页面编辑器。 “ Manage Pages按钮会将您重定向到管理面板的页面。 Grav - Configuration System 在本章中,我们将研究Grav管理面板中的Configuration System 。 您可以在“配置”页面的帮助下直接配置站点系统的设置。 此外,您将看到服务器属性的简要说明,包括PHP,服务器环境以及其他一些管理站点性能的组件。 “系统”选项卡允许您修改/user/config/system.yaml文件中的设置。 这会影响Grav操作的许多主要系统相关功能。 这些设置可以分为不同的部分,向您展示Grav性能的不同特征。 以下是系统选项卡中显示的configuration sections的详细列表 - Content 在本部分中,您可以修复站点Content处理的基本属性,如下所示。 Home Page - 指定要为站点显示的主页。 Default Theme - 显示您网站的主要默认主题。 Process - 控制页面的处理方式。 可以按页面而不是全局设置。 TimeZone - 设置服务器中的默认时区。 Short Date Format - 显示短日期格式。 Long Date Format - 显示长日期格式。 Default Ordering - 页面使用此顺序显示在列表中。 Default Order Direction - 指定列表中页面的方向。 Default Page Count - 定义列表中的最大默认页面计数。 Date Based Publishing - 它Date Based Publishing自动发布帖子。 Events - 它指定启用或禁用事件。 禁用将导致插件损坏。 Redirect Default Route - 它定义默认路由并自动重定向到页面。 Languages 您可以在此区域中设置Multi language features ,如下所示。 Supported - 它指定用逗号分隔的两个字母语言代码的列表,即en,fr,de。 Translations Enabled - 启用Grav,插件和扩展中的翻译。 Translations Fallback - 如果不存在活动语言,则指定替代支持的翻译。 Active Language in Section - 您可以将活动语言存储在该区域中。 Home Redirect Include Language - 它根据需求包含主重定向(/ en)中的语言。 Home redirect Include Route - 它指定重定向管理主目录。 Set language from browser - 它Set language from browser指定语言。 Override locale - 它指定覆盖区域设置。 HTTP标头 此部分用于设置HTTP Headers选项。 此设置有助于基于浏览器的缓存和优化。 Expires - 定义到期时间并以秒为单位设置值。 Last Modified - 设置上次修改的标头有助于优化代理和浏览器缓存。 ETag - 定义e tag header以标识已修改的页面。 Vary Accept Encoding - 您应该将Vary:HTTP标头排列为Accept。 这将有利于代理上的缓存。 Markdown 在本节中,我们将研究Grav如何管理Markdown及其功能以启用Markdown Extra。 它可以帮助用户并构成Grav页面内容的大部分内容。 Markdown Extra - 它指定Markdown Extra的默认支持。 Auto Line Breaks换行 - 它指定降价时的换行符。 Auto URL Links - 它指定将URL转换为HTML超链接。 Escape Markup - 它将标记选项卡指定为HTML对象。 缓存 (Caching) 在本节中,您可以配置站点的主要Caching功能。 Grav结合了缓存功能,有助于为用户构建最快的平面文件CMS选项。 Caching - 指定全局切换ON/OFF以enable/disable Grav缓存。 Cache Check Method - 这定义了文件,文件夹和无的高速缓存检查方法。 Cache Driver - 指定为用户选择缓存驱动程序。 Auto Detect缓存驱动程序发现最佳。 Cache Prefix - 这指定了部分Grav密钥的标识符。 仅在需要时更改它,否则不要更改它。 Lifetime - 以秒为单位定义缓存生存期, 0=infinite 。 Gzip Compression - 要提高性能,请启用Grav页面的Gzip压缩。 树枝模板 在本节中,Grav强调了它的Twig templating功能。 您可以在此处配置Twig缓存,调试和修改跟踪设置。 Twig Caching - 指定控制Twig缓存系统。 启用时,它可以提供最佳性能。 Twig Debug - 这定义了不加载Twig Debugger扩展的选项。 Detect Changes - 在Twig模板中完成的任何更改,这将自动重新编译Twig缓存。 Autoescape Variables - 所有变量都是autoescapes ; 这可能会对您的网站造成损害。 Assets 此部分用于处理资产,包括CSS和JavaScript资产,如下所示。 CSS Pipeline - 将多个CSS资源集成到单个文件中。 CSS Minify - 在流水线操作期间,CSS缩小。 CSS Minify Windows Override - 默认设置为False,它为Windows平台定义Minify Override。 CSS Rewrite - 在流水线操作期间CSS Rewrite CSS相对URL。 JavaScript Pipeline - 将多个JavaScript资源集成到一个文件中。 JavaScript Minify - 在流水线操作期间,JS正在缩小。 Enable Timestamps on Assets上Enable Timestamps on Assets - Enable Timestamps on Assets时间戳。 Collections - 资产集合是单独添加的。 错误处理程序 在站点开发期间,此部分对于管理Grav错误报告非常有用。 Display Error - Display Error完整的回溯样式错误页面。 Log Errors - 日志错误显示在/logs文件夹中。 Debugger 这类似于错误处理,调试工具集成在Grav中以定位和排除错误。 Debugger - 启用调试器及其设置。 Debug Twig - 启用Twig模板调试器。 Shutdown Close Connection - 在调用onShutdown()之前,您需要关闭连接。 Media 此部分用于管理Grav的media内容。 您可以在此处配置图像质量,文件上载大小和许多媒体处理选项。 Default Image Quality - 在缓存或重新采样图像时使用默认图像质量。 Cache all Images - 所有图像都通过Grav的缓存系统运行,即使它不包含媒体操作。 Image Debug Watermark - 您可以指示图像的像素深度,同时在图像上显示叠加,即使用视网膜。 File Upload Limit - 它定义最大上载大小(以字节为单位)(0为无限)。 Enable Timestamps on Media - 根据上次修改日期为每个媒体项添加时间戳。 Session 下面提到的功能可帮助您启用session支持。 Enable - 这指定Grav中的会话支持。 Timeout - 指定会话超时(以秒为单位)。 Name - 指定由标识符开发和应用的会话cookie的名称。 Advanced 在本节中,您将看到advanced系统选项。 Absolute URLs - 指定base_url绝对或相对URL。 Parameter Separate - 您可以在参数分隔符的帮助下在Windows上更改Apache。 Grav - Configuration Site 在本章中,我们将研究如何在Grav的管理面板中Configure Site 。 您可以在“配置”页面的帮助下直接配置站点系统的设置。 “ Site选项卡允许您修改/user/config/system.yaml文件中的设置。 此选项卡允许您修改影响站点相关功能的选项和字段,例如站点中使用的名称,默认作者等。 以下是您可以在“ Site选项卡中看到的不同配置设置。 Default 在此区域中,您可以设置基本属性以管理站点的内容。 在这里,您可以设置多个内容显示选项,例如主页,默认主题和许多其他选项。 Site Title - 指定您网站的标题。 Default Author - 指定在主题或页面内容中使用的默认作者姓名。 Default Email - 这指定主题或页面中的默认电子邮件。 Taxonomy Types - 指定在页面中使用的分类法类型。 页面摘要 页面摘要可以向您显示页面内容的小预览。 您可以在页面中,在分隔符的帮助下在摘要内容之间定义“截断”点。 Enabled - 指定是否启用页面摘要。 Summary Size - 定义页面中用作内容摘要的字符数。 Format - Short使用第一次出现的分隔符, Long忽略汇总分隔符。 Delimiter - 指定汇总分隔符。 默认值为默认值'==='。 您可以在页面摘要中使用它,并在打开段落后发布。 Metadata 元数据在页面中起着重要作用,并提高您的SEO。 您可以在此处设置多个元数据属性,以便您的链接可以根据需求显示在多个搜索引擎和社交Feed中。 这指定了默认元数据值,稍后您可以进行修改。 重定向和路由 这允许您设置重定向和路由到您网站的其他页面。 Custom Redirects - 定义指向其他页面的路由。 替换标准正则表达式是有效的。 Custom Routes - 路由到其他页面的别名。 替换标准正则表达式是有效的。 Grav - Administration Panel Pages 在本章中,我们将了解管理面板页面如何在Grav中工作。 通过页面可以轻松访问您的网站创建,编辑或删除内容。 在管理面板页面中,您可以查看为您的站点创建的页面列表,还可以为您的站点创建新的模块化页面或非模块化页面。 添加新页面 您可以看到pages管理面板顶部有三个按钮,如下面的屏幕截图所示。 Back - 这将返回到管理页面的仪表板。 Add Page - 这将创建一个新的非模块化内容。 Add Modular - 这将创建新的模块化内容。 添加页面 它为您的网站创建非模块化页面,其中包含各种字段,同时向您的网站添加页面,例如Title, Folder Name, Parent root等。 单击“ Add Page按钮时,会出现一个弹出窗口,如下所示 - 它包含以下字段 - Page Title - 在此输入页面标题。 Folder Name - 这是输入页面的文件夹名称,或者输入标题后将自动生成名称。 Parent Page - 设置新创建页面的父页面。 Page File - 这将向页面显示所选主题模板。 Visible - 通过将页面设置为auto, yes或no auto, yes可以在导航栏中显示该页面。 填写字段中的所有信息后,单击“ Continue按钮。 它会将您重定向到页面编辑器。 添加模块化页面 模块化页面允许从其子页面创建单个页面。 它能够从模块化内容页面构建复杂的单页面布局。 单击“ Add Modular按钮时,会出现一个弹出窗口,如下所示 - 该窗口包含以下字段 - Page Title - 这里我们输入模块化页面的标题。 Folder Name - 这是输入页面的文件夹名称,或者在您输入标题后自动生成名称。 Page - 设置新创建的模块子页面的父页面。 Modular Template - 选择要为模块化页面显示的特定模板。 填写字段中的所有信息后,单击“ Continue按钮。 它会将您重定向到页面编辑器。 页面列表 这将显示为站点创建的页面列表。 在这里,您可以轻松访问创建的页面并进行编辑。 单击页面的任何标题,它将重定向到页面编辑器以进行编辑。 页面右侧的X图标用于删除页面。 “过滤器”框用于查找要搜索的页面。 它根据类型过滤页面,以便只在列表中显示modular , visible和/或routable等页面。 当您知道该页面的确切名称时,搜索框用于查找页面。 当您直接悬停在页面左侧的图标上时,它会显示当前状态,即Page . Routable . Visible . Published Page . Routable . Visible . Published Page . Routable . Visible . Published ,表示该页面通过URL可见,并将显示在导航菜单中。 单击列表中显示的页面时,您将看到以下屏幕。 在上面的屏幕中,您可以选择编辑页面,添加内容或向页面添加图像。 “ Options ” Options卡包含我们在“ 页面编辑器选项”一章中学习的发布,分类和站点地图选项。 “ Advanced选项卡包含页面的高级选项,如设置,排序和覆盖,将在“ 页面编辑器高级”一章中介绍。 Grav - Page Editor Options 在本章中,我们将研究Grav管理面板中的Page Editor options 。 这是一个动态文本编辑器,允许您创建页面内容。 此外,您还可以在页面中添加媒体文件。 您可以看到options卡的功能,如下所示。 Options卡包含两个部分 - PublishingTaxonomies 出版(Publishing) 此部分用于设置发布和取消发布页面的日期和时间。 您可以完全控制要发布或取消发布的内容,并且可以为特定页面创建元数据值。 以下字段出现在出版部分 - Published - 默认情况下,页面设置为“ Yes ,即已发布。 选择No您可以取消发布该页面。 Date - 设置页面的日期和时间。 Published Date - 设置自动发布页面的日期和时间。 Unpublished Date - 设置自动Unpublished Date发布页面的日期和时间。 Metadata - 设置将在所有页面上显示的元数据值。 分类法(Taxonomies) 在本节中,您可以在页面上显示类别并配置页面及其结构属性。 以下字段存在于分类法部分中。 Category - 它设置页面的类别。 它有助于对内容进行排序和过滤。 Tag - 它提供有关您的网页的信息。 它有助于组织和过滤内容。 Grav - Page Editor Advanced 页面编辑器是一个文本编辑器,也管理页面; 这允许您创建内容,包括媒体文件,发布和分类选项,设置和主题特定选项。 以下屏幕截图显示了编辑器页面的“高级”选项卡。 “高级”选项卡包含三个部分 - Settings Ordering Overrides Settings “ Settings部分处理页面的各种选项。 在这里,您可以设置页面的模板,设置页面的父级,更改页面所在的文件夹名称。 以下字段显示在设置部分中 - Folder Numeric Prefix - 数字设置为提供手动排序。 Folder Name - 输入页面所在的文件夹名称。 Parent - 为您的页面设置root或少数页面显示为子页面。 Page File - 将主题模板设置为要显示的页面。 正文Body Classes - 输入应用于页面正文的类名。 Ordering 此部分用于按特定顺序设置非编号文件夹。 按住四叉箭头并将其移动到某个位置以按特定顺序重新排列页面。 覆盖 (Overrides) Overrides选项为页面提供了额外的功能,例如缓存,导航可见性,将slug设置为基于文件夹名称设置的默认值以外的其他功能。 以下字段显示在“覆盖”部分中。 Menu - 设置要用作菜单的名称。 如果没有设置,则将使用Title 。 Slug - 可以通过此slug变量设置URL的Page部分。 Page redirect - 设置页面URL以将其重定向到其他URL。 Process - 您希望在页面内容中提供的流程。 Default Child Type - 对于子页面,页面类型设置为默认值。 Routable - 相应地设置页面以检查URL是否可以访问。 Caching - 设置页面的缓存。 Visible - 指定页面在导航中是否可见。 Display Template - 将模板设置为要显示的页面。 Grav - Blueprints 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 (optional) 指定开发人员的电子邮件地址。 7 author.url (optional) 指定开发人员的URL主页。 8 homepage (optional) 为您的资源指定分配的主页首页。 9 docs (optional) 指定您为资源编写的文档链接。 10 demo (optional) 指定演示资源的链接。 11 guide (optional) 指定如何指导资源的指南或教程的链接。 12 keywords (optional) 指定与资源相关的关键字列表。 13 bugs (optional) 指定可以报告问题或错误的Url。 14 license (optional) 指定您的资源许可证,即MIT,GPL等。 15 dependencies (optional) 指定插件或主题所需的依赖项的名称。 以下是登录插件蓝图的示例 - 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

Forms 如果您希望主题或插件可以从管理界面直接配置选项,则可以使用表单填写blueprints.yaml文件。 可以通过Admin Plugin配置此资源的一部分, Admin Plugin由Forms元数据定义。 以下是Archives Plugin 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

这些是插件的默认设置。 要在不使用Admin插件的情况下配置它们,用户必须将此文件复制到/user/config/plugins/archives.yaml文件夹中并进行更改。 您可以正确提供archives.yaml文件; 您可以选择从用户更改管理界面中的设置。 保存更改后,它将自动写入《your_folder_name》/user/config/plugins/archives.yaml 。 Archives Plugin的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是选项。 此根元素中存在的字段确定类型,大小,标签,默认值和选项。 根据字段类型,其他字段可以更改; 例如,选择字段需要选项列表。 Order direction 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文件中看到的那样,表单验证设置为strict。 当验证设置为严格时,则对于所有选项,您必须添加蓝图表单,否则在保存时会弹出错误。 当您只想将两个字段自定义为管理界面时,可以将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 Email 包含带验证的电子邮件地址字段。 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 显示降价编辑器。 10 Pages 显示页面列表。 11 Section 设置页面分为几个部分,每个部分都有一个标题。 12 Selectize 它用于选择框。 13 Tabs 设置分为选项卡列表。 14 Tab 标签字段用于提供标签。 15 Taxonomy 这是一个预先配置的选择,用于选择分类。 16 Toggle 它表示指定打开或关闭输入类型的切换效果。 Grav - Performance & Caching 在本章中,我们将了解Grav中的性能和缓存概念。 表现(Performance) 术语“性能”指的是系统性能,使其能够处理更高的系统负载并修改系统以处理更高的负载。 考虑以下与Grav表现有关的要点 - 要获得更好的opcache性能,可以使用PHP opcache和usercache 。 opcache适用于PHP 5.4,使用PHP 5.5,PHP 5.6和Zend opcache可以更快地运行usercache。 SSD (固态硬盘)使用闪存并且没有移动部件。 有时缓存将存储在用户缓存中或存储为文件。 因此SSD驱动器可以提供更好的性能。 虚拟机是在云计算技术下托管提供商的最佳方式。 您可以指定资源而无需与物理设备交互。 Native hosting比虚拟机更快。 Grav在虚拟机上运行得更好,但为了获得最佳性能,您可以使用本机托管选项。 Grav具有faster memory ,其缓存使用大量内存,可在服务器上提供更好的性能。 与其他平台相比,它使用更少的内存。 Grav使用shared hosting服务器上的共享主机来共享内容。 共享托管以低成本提供,有时可能会导致服务器上的内容变慢。 多核处理器用于更快地处理多个任务。 高级处理器比这些处理器更好,这有助于用户完成任务。 缓存 (Caching) 通常,高速缓存是高速缓存存储器中的存储数据。 缓存机制使Grav更快,浏览器可以从缓存而不是原始服务器获取文件,从而节省时间和额外的网络流量。 Grav使用Doctrine Cache库,它支持以下内容 - 自动(默认) - 它自动使用默认选项。 文件 - 它指定cache/文件夹中存在的cache/文件。 APCXCacheMemcacheRedisWinCache 默认情况下,Grav使用自动设置。 它将尝试APC,然后是WinCache,XCache,最后它使用File。 缓存类型 有5种类型的缓存 - YAML配置缓存到PHP中。 页面对象的核心Grav缓存。 Twig将模板文件缓存为PHP类。 媒体资源的图像缓存。 使用流水线技术对CSS和jQuery进行资产缓存。 存储在/cache文件夹中的YAML配置的/cache 。 图像缓存将其图像存储在/images文件夹中。 核心Grav缓存的配置选项存储在user/config/system.yml文件中,如下所示 - cache:

enabled: true

check:

method: file

driver: auto

prefix: 'g'

enabled选项通过将其设置为true来enabled缓存。 method选项检查页面中的更新,例如文件或文件夹。 driver选项指定不同类型的缓存选项,如Auto,File,APC,XCache,Memcache,Redis或WinCache。 prefix选项定义缓存前缀字符串。 Memcache选项 如果您使用的是memcached server ,则需要使用user/config/system.yml file的memcache驱动程序添加一些额外的配置选项。 可以在cache: group下定义这些选项。 cache:

...

...

memcache:

server:localhost

port: 8080

Redis选项 如果您使用的是redis ,则需要在user/config/system.yml file使用redis驱动程序添加一些额外的配置选项。 可以在cache: group下定义这些选项。 cache:

...

...

redis:

server:localhost

port: 8080

Twig模板使用自己的缓存机制,在user/config/system.yml文件中使用user/config/system.yml驱动程序。 twig:

cache: true

debug: true

auto_reload: true

autoescape: false

它有一些选项,如 - cache选项通过将twig缓存设置为true来启用它。 debug选项启用twig调试。 auto_reload选项用于通过将更改设置为true来重新加载更改。 autoescape选项用于自动转义树枝变量。 缓存和事件 启用缓存时可以使用事件。 除OnPageContentRaw , OnPageProcessed , OnPageContentProcessed , OnTwigPageVariables和OnFolderProcessed事件外,可以为所有事件启用此功能。 这些事件可以在所有页面和文件夹上使用,并且只能在事件处理时运行。 页面缓存后无法运行这些事件。 Grav - Debugging & Logging 在开发主题和插件时,调试和记录信息是非常必要的。 Grav使用如下所述的一些功能来使用调试信息。 PHP调试栏 Grav附带了一个名为Debug Bar的工具来显示调试信息。 默认情况下,此功能已禁用。 您可以全局system.yaml它,也可以将system.yaml用于您的开发环境。 debugger:

enabled: true

twig: true

shutdown:

close_connection: true

启用调试器后,您可以查看以下调试栏,如下所示。 单击角落左侧的G符号。 在debug栏中,您可以查看右侧角落的整体内存使用情况和处理时间。 它还包含几个提供详细信息的选项卡。 在“消息”选项卡中,您可以查看有助于调试Grav开发过程的消息,并且信息将通过$Grav['debugger']→addMessage($my_var)从代码发布到此选项卡。 在“时间轴”选项卡中,您可以查看Grav计时的细分。 错误显示 它在运行时显示有关块或页面的错误消息。 在Grav中,您可以轻松识别错误并快速解决错误。 以下是将显示在屏幕上的错误消息,如以下屏幕截图所示。 在user/config/system.yaml文件中,您可以通过将其设置为false来禁用错误页面。 errors:

display: false

log: true

日志记录 (Logging) 日志记录用于报告库和应用程序中的错误和状态信息。 在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命令行界面。 它执行一些任务,例如clearing cache ,创建backup副本等。 在不同平台上访问CLI是不同的。 在Windows上,您可以通过cmd访问,在Mac上可以通过Terminal访问,在Linux上可以使用shell。 在Windows中,您不能使用UNIX样式命令。 要使用它们,只需安装提供GIT和GIT BASH的msysgit包,并在Windows上提供UNIX样式命令。 您可以使用以下命令列出Grav中的可用命令 - $ bin/Grav list

您可以看到可用的命令,如以下屏幕截图所示 - 新项目创建 使用Grav创建新项目非常简单。 您可以使用Grav实例创建新项目。 打开terminal或console ,然后导航到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/文件夹中存储的cache/ 。 要清除缓存,可以使用以下命令 - $ cd ../webroot/myproject

$ bin/Grav clear-cache

创建备份 在Grav中,您可以备份存储在根文件夹下的项目。 因为它不会使用数据库所以备份没有困难。 如果要创建名为myproject( ../webroot/myproject myproject)的项目备份,请使用以下命令 - $ cd ../webroot/myproject

$ bin/Grav backup

您将看到在backup/文件夹下创建的backup/的zip文件。 更新Composer 您可以更新通过Github安装并使用基于作曲家的供应商包手动安装的Grav编辑器。 命令是 - $ bin/Grav composer

Grav - GPM GPM代表Grav Package Manager,用于安装,更新,卸载和列出Grav存储库上的可用插件。 GPM使用命令行界面(如终端或cmd)执行命令。 您可以非常轻松地访问CLI。 在Windows上,您可以通过cmd访问,在Mac上可以通过Terminal访问,在Linux上可以使用shell 。 在Windows中,您不能使用UNIX样式命令。 要使用它们,只需安装提供GIT和GIT BASH的msysgit包,并在Windows上提供UNIX样式命令。 要列出Grav存储库上的可用命令,请将命令键入 - $ bin/gpm list

您将收到以下信息 - 您可以通过向该行添加帮助来帮助命令,如下所示 - $ bin/gpm help install

您可以使用以下命令在命令行界面上找到PHP的版本 - $ php -v

它是如何工作的? 在命令行界面上运行命令时,GPM会自动从GetGrav.org站点下载所需的数据。 它包括可用软件包的所有详细信息,还确定了需要安装的软件包以及需要更新的软件包。 当您从存储库下载软件包时,Grav存储库将在本地缓存,并且在生成缓存后,任何请求都无法联系GetGrav.org服务器。 某些命令带有--force (-f)选项,强制重新获取存储库。 使用此选项,在清除缓存之前无需等待24小时循环。 Commands 您可以使用某些命令从Grav存储库下载可用的包。 要使用该命令,请打开终端并导航到Grav文件夹的根目录并键入bin/gpm 《command》 。 Index index命令用于列出Grav存储库中的可用插件和主题。 在终端中使用以下命令列出可用资源。 $ bin/gpm index

每行定义插件或主题的名称,slug,插件或主题的版本,并显示它是否已安装。 Info info命令用于显示有关包的信息,如作者,版本,上次更新的日期和时间,包的存储库,包的下载链接,许可证信息等。 Install 顾名思义,install命令从Grav存储库安装包所需的资源。 您可以使用以下命令安装所需的程序包。 $ bin/gpm install package_name

如果您尝试安装已安装的软件包,则会通知下一步该做什么。 如果键入Y ,它将覆盖已安装的软件包,如果键入N ,则将中止安装过程。 更新 (Update) update命令通知有关需要更新的包。 假设所有软件包都是最新的,那么它将不会更新任何内容。 $ bin/gpm update

Self-upgrade 自升级命令用于将Grav升级到最新版本。 使用以下命令升级Grav。 $ bin/gpm self-upgrade

如果您使用的是最新版本的Grav,那么它将显示一条消息“您已经在运行最新版本的Grav”以及发布日期和屏幕中显示的时间。 Grav - Development 您可以使用不同类型的Development来构建Grav,例如Grav Core , Grav Plugins , Grav Skeleton和Grav Themes 。 Grav核心 Grav是一个现代化的CMS,其中写作内容简单,构建页面更友好和直观。 Grav core专门讨论了控制Grav一切的系统文件夹,并代表了Grav工作流程和生命周期的质量。 它主要关注可以良好编写的页面。 它专注于您的内容并将您的内容转换为可导航的网站。 Grav插件 Plugin是一款提供增强功能的软件,最初并未由Grav的核心功能完成。 Grav存储库上有许多插件可以显示网站上的功能。 考虑以下与Grav插件相关的要点 - Grav本身就是super-lean ,只为您的网站添加了所需的插件。 无需等待添加所需的额外功能。 要实现这一点,只需创建一个插件来扩展Grav。 插件非常灵活和强大,可以显示站点地图,博客档案,搜索引擎,提供面包屑等。 格拉夫骷髅 Grav skeleton描述了一个示例站点,其中包含Grav Core,插件,页面,主题。 Grav背后的最初想法是非常容易地建立网站。 开发站点所需的全部内容都放在user文件夹中。 Grav的骨架带有各种依赖项,如插件,主题等,并存储在一个可以解压缩的包中。 格拉夫主题 Grav支持不同类型的themes它们构成了Grav网站不可或缺的一部分。 当您在系统上安装Grav时,它会附带Antimatter主题。 大多数主题都带有骨架包或样本页面。 您可以在user/pages文件夹下看到示例页面,它提供与骨架包类似的体验。 已安装的主题需要适合您网页的twig templates 。 主题是主题和内容的组合,等于整个网站设计。 您可以根据自己的设计创建自己的树枝模板引擎。 主题/插件发布流程 您可以注意到在Grav存储库中添加的已创建主题或插件的一些要点。 它是一个由MIT许可的开源软件。 它具有README.md文件,该文件指定项目的安装过程和配置。 它包含blueprints.yaml文件,其中包含有关资源的信息,可以在每个插件和主题的根目录中找到。 包含CHANGELOG.md文件,其中包含主题或插件的版本,并在对文件进行更改时显示信息。 创建发行版是将完成的主题或插件放在GitHub上的更好方法。 如果没有发布,那么您将找不到您的插件或主题。 添加有关插件或主题的详细信息,并进行测试以确保其工作功能。 ChangeLog格式 changelog format使用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 - Lifecycle 在本章中,我们将了解Grav的生命周期。 Grav Lifecycle确定Grav如何处理以通过插件扩展Grav。 下图显示了Grav生命周期过程的流程。 Grav生命周期的以下四个步骤 - PHP Version Loader class is initialized Obtain Grav Instance Call Grav Process PHP版本 它检查PHP的版本以确保我们运行的是5.4.0以上的PHP版本。 Loader类已初始化 在第二步中,类加载器被初始化。 获取Grav实例 如果不存在实例,则调用load()方法并添加Grav。 它初始化调试器值并添加到调试器。 它注册日志和错误处理程序。 它添加了uri,任务,事件,缓存,会话,插件,主题,树枝,分类,语言,页面,资产和基本URL。 它注册流和配置处理程序。 调用Grav Process 它初始化配置,Uri对象,错误处理程序,调试器和会话。 初始化后,它开始缓冲输出。 它初始化时区和插件并触发onPluginsInitialized事件。 接下来,它初始化主题并触发onThemeInitialized和onTask[TASK]事件。 它初始化资产并触发onAssetsInitialized事件。 它通过以下操作初始化树枝 - 根据配置,它设置树枝模板路径。 处理可用的语言模板。 接下来,它将触发onTwigTemplatePaths事件。 装载链和树枝配置已加载。 触发onTwigInitialized事件。 它加载onTwigExtensions扩展并触发onTwigExtensions事件。 它设置标准树枝变量。 接下来它初始化页面。 它调用buildPages()方法。 如果缓存很好,那么它从缓存加载页面。 如果缓存不好,则调用recurse()方法。 onBuildPagesInitialized事件在recurse()方法中触发。 如果找到文件为.md ,则执行以下操作 - 要加载文件详细信息,请调用init()方法。 它设置filePath,modified和id。 调用header()方法来初始化头变量。 调用slug()方法来设置URL slug。 调用visible()方法来设置可见状态。 基于以_(下划线)开头的文件夹,设置modularTwig() 。 它稍后会触发onPageProcessed事件。 如果找到文件夹,则recurse()子项。 它会触发onFolderProcessed事件。 调用buildRoutes()方法。 对于所有页面,初始化taxonomy route表是为快速查找而构建的。 onPagesInitialized和onPageInitialized事件被触发。 调试器CSS/JS被添加到资产中。 使用Twig的processSite()方法,我们得到输出。 onTwigSiteVariables事件被触发。 获取页面的输出。 如果找不到页面或无法路由, onPageNotFound触发事件onPageNotFound 。 所有Twig变量都在twig对象上设置。 根据文件/标题/扩展名信息设置模板名称。 调用render()方法。 以HTML格式返回文件格式 它会触发onOutputGenerated事件。 设置HTTP标头。 显示输出 输出缓冲区刷新到页面。 onOutputRendered事件将会触发。 关闭与客户端的连接。 最后,它会触发onShutDown事件。 在页面上调用content()方法时,将发生以下生命周期。 onPageContentRaw事件将起火。 根据Markdown和Twig设置,它处理页面。 它会触发onPageContentProcessed事件。 Grav - YAML Syntax YAML代表YAML Ain't Markup Language ,它包括人类可读的内容,常用于配置文件,蓝图(有关资源的元数据信息)和页面设置。 特点 (Features) 以下是YAML的特点 - 与XML或JSON相比,YAML不那么复杂并且提供相同的功能。 它提供配置设置,无需学习复杂的代码类型,如CSS,JavaScript或PHP。 YAML描述了YAML文件的数据和内容,可以轻松地将其转换为多种语言类型。 YAML的基本规则 YAML有一些基本规则,用于减少多种语言和可编辑程序的歧义。 您必须以.yaml扩展名结束YAML文件。 YAML必须区分大小写。 YAML不支持使用制表符。 它不使用制表符,而是使用通用不支持的空格。 YAML的基本数据类型 YAML支持一些可用于编程语言的基本数据类型,例如 - Scalars - 字符串或数字。 Sequences - 数组或列表。 Mappings - 哈希或词典。 标量 (Scalars) 标量是在页面上使用字符串或数字来处理数据的基本数据类型。 它可以是boolean property (是或否), integer value (如2)或文本string (如单词或句子或网站标题)。 例如 - string: "Grav"

integer: 10

float: 10.5

boolean: true

有时标量会带有不带引号的值,如整数,浮点数或布尔值。 字符串值使用标点符号,该标点符号带有单引号或双引号,它使用转义来指定ASCII和Unicode字符。 序列(Sequences) YAML以数组或列表的形式表示序列。 它定义了每个项目,并在列表中放置了开头短划线( - ),如下所示。 例如 - - Apple

- Orange

- Grapes

假设您要使用子项定义嵌套序列,然后在子项中的每个短划线之前放置一个空格。 例如 - -

- Apple

- Orange

- Grapes

如果你想在嵌套列表中嵌套序列,那么添加一些级别,如下所示 - 例如 - -

-

- Apple

- Orange

- Grapes

Mappings 这是一种定义键和值的方法。 例如,您可以为特定元素指定一些值 - Sports: cricket

这里的值是“板球”,用称为“体育”的键映射。 您可以将此映射与序列一起使用,以指定板球项目列表; 例如,我们将为值“cricket”定义一些玩家名称,使名称为child, Sports: cricket为parent。 Sports: cricket

- Sachin Tendulkar

- Rahul Dravid

- M S Dhoni

Grav - Forms 您可以使用此link提供的form插件创建表单。 搜索表单插件并将其安装在Grav文件夹中。 您也可以使用命令$ bin/gpm install Form安装此插件。 导航到Grav的根文件夹并键入此命令。 它将自动下载表单插件并安装必要的依赖项。 创建一个简单的表单 您可以创建一个可以在页面YAML frontmatter中定义的简单表单。 以下是表格的一个例子 - ---

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

---

上面的代码显示了包含名称,电子邮件,消息和Captcha字段的简单表单页面。 填写表单后提交信息时,表单将通过向YAML前端添加process字段来处理,如代码所示。 process字段使用以下信息 - email选项使用两个字段,例如from字段指定电子邮件的发件人和字段指定邮件的接收者。 subject使用[feedback][entered mail]选项,其中电子邮件将发送到输入的电子邮件。 电子邮件的正文在forms/data.html.twig文件中指定,该文件存在于主题文件夹中。 表单输入数据存储在user/data文件夹下。 模板在forms/data.txt.twig文件中定义,该文件存在于主题文件夹中。 在thankyou/ sub文件夹下创建一个子页面,当用户提交表单时,该子页面将被重定向到该页面。 您可以将一些字段与表单插件一起使用,如下表所示 - Sr.No. 领域和描述 1 Captcha 它是一个反垃圾邮件字段,用于计算以确定用户是否是人。 2 Checkbox 它显示一个简单的复选框。 3 Checkboxes 它显示多个复选框。 4 Date and Datetime 这两个字段分别用于显示日期和日期以及时间。 5 Email 这是一个带验证的电子邮件字段。 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 它显示字段大小,如大,x小,中,长,小。 8 name 它定义了字段名称。 9 classes 它使用带有css类的字符串。 10 id 它定义了字段id。 11 style 它指定了该字段的样式。 12 title 它定义了字段的标题。 13 disabled 它确定该字段是否处于禁用状态。 14 placeholder 这是一个简短的提示,在用户输入值之前显示在输入字段中。 15 autofocus 它指定输入元素应在页面加载时自动获得焦点。 16 novalidate 它指定在提交时不应验证表单数据。 17 readonly 它将字段确定为只读状态。 18 autocomplete 当用户开始在字段中键入时,它会在字段中显示选项,并根据先前键入的值显示值。 某些字段包含特定参数,例如 - Sr.No. 参数和描述 1 date and datetime 这些字段使用validate.min和validate.max来设置最小值和最大值。 2 spacer 它使用underline添加《hr》标记,使用text添加文本值并使用title作为“h3”标记。 3 select 它使用multiple参数来添加多个值。 4 select and checkboxes 它使用options字段来设置可用选项。 5 display 它使用content参数来显示内容。 它将markdown设置为true以显示内容。 6 captcha 它使用recatpcha_site_key和recaptcha_not_validated参数。 关于验证码的说明 我们在名为g-recaptcha-response字段下有验证码信息的代码,如下所示 - - 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选项显示消息。 表格行动 Email 您可以在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选项设置一条消息,当用户单击提交按钮时应显示该message 。 当用户提交表单时,应将其重定向到另一个页面。 在存储form.md文件的thankyou子文件夹下创建一个子form.md 。 提交表单后,它将被重定向到页面上并显示上述消息。 名为thankyou/formdata.md的子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 Hosting 托管(也称为网站托管)是维护和组织网站并通过万维网提供对网站的访问的过程。 简而言之,您可以说,它是一种为互联网上的网站提供服务的平台。 Grav支持不同类型的托管服务 - Rochen Web Hosting WireNine Crucial Web Hosting Arvixe SiteGround Dreamhost Rochen网页寄存 它可以用作GetGrav.org和RocketTheme.com作为长期托管服务提供商。 它使用SSD驱动器,Litespeed Web服务器和Intel XEON处理器来增强Grav性能。 它提供两种类型的选择; 一个是Shared主机,另一个是Burst主机。 有关Rochen Web Hosting的更多信息,请单击此link 。 WireNine WireNine为超过665个国家/地区的客户提供可靠的网络托管服务。 它使用Intel Xeon E5 v3 CPU,DDR4 ECC ram和冗余RAID SSD存储来增强服务器的功能。 它提供最大的可靠性和稳定性,确保100%的正常运行时间。 它包括优化的软件,如CloudLinux,Litespeed,MariaDB,PHP,Ruby,Python,Perl等。 有关WireNine托管的信息,请访问此link 。 Crucial虚拟主机 它是另一种Web托管类型,它更侧重于速度和支持。 它使用SSD驱动器,Litespeed Web服务器和Intel XEON处理器来增强Grav性能。 您可以在此link获得有关Crucial Web Hosting的更多信息。 Arvixe Arvixe是一种网络托管类型,它提供无与伦比的可靠性,质量和可负担性的Web托管。 它在网络托管领域提供了良好的功能,赢得了众多的网络托管奖项。 有关Arvixe Web Hosting的更多信息,请单击此link 。 SiteGround (SiteGround) 它为Joomla,WordPress,Magento和其他Web应用程序提供托管解决方案。 它的标语为Web Hosting Crafted With Care ,它可以仔细处理Web托管计划,并提供使您的网站运行更快的新技术。 只需访问此link以获取有关SiteGround托管的信息。 Dreamhost (Dreamhost) 它通过为您的个人或业务相关的Web托管需求提供更多功能来提供功能列表。 它拥有超高速SSD和新的专用服务器,最高可达64GB RAM。 有关Dreamhost虚拟主机的更多信息,请单击此link 。 Grav - Server Error 由于Grav配置错误导致服务器错误。 当服务器遇到内部错误或意外发生的事情时,Grav无法提供并恢复页面。 如果服务器在生产模式下运行,要隐藏用户的信息,则会出现服务器错误消息。 所有错误消息都记录在文件《your_folder_name》/logs/Grav.log下的Grav.log文件中。 以下是可能导致服务器错误的一些原因 - 过时的配置 文件权限不正确 格式化的配置文件无效 Grav不知道文件系统的变化 Out-of-date configuration 您可以刷新缓存以检查配置是否是最新的。 使用以下命令刷新缓存。 bin/Grav clear-cache

安装和配置问题 安装和配置的问题是 - 配置问题 安装问题 系统要求 文件权限 Grav - Permission 通常, permission是允许在托管环境中执行某些操作的过程。 该权限包括对服务器上文件的读写访问权限或编辑文件系统上的文件。 Grav是一个基于平面文件的CMS,需要写入文件系统以创建缓存和日志文件。 Grav有三种主要情景 - PHP/Webserver与编辑文件的用户一起运行 此方案适用于大多数共享主机设置以及本地开发。 在专用的Web主机上,我们不能认为这种方法足够安全。 PHP/Webserver使用不同的帐户运行,但同一组 使用用户和PHP/Webserver帐户之间使用共享组的775和664权限,您可以确保两个不同的帐户具有对文件的Read/Write访问权限。 我们可以通过在root上使用适当的权限设置umask 0002来创建新文件。 不同的帐户,手动修复权限 此方法将具有不同的帐户并更新文件的所有权和权限,以确保PHP/Webserver用户将对文件具有Read/Write访问权限。 以下是permissions-fixing 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 * line将文件和子文件夹的所有权更改为joeblow和staff。 该线find . -type f ! -path "./bin/" | xargs chmod 664 find . -type f ! -path "./bin/" | xargs chmod 664 find . -type f ! -path "./bin/" | xargs chmod 664为目录中的所有文件设置664权限,为其他文件设置Read ,为组和用户设置Read/Write 。 该线find . -type f -path "./bin/" | xargs chmod 775 find . -type f -path "./bin/" | xargs chmod 775 find . -type f -path "./bin/" | xargs chmod 775为目录中的所有文件设置775个权限,为其他文件设置RX ,为组和用户设置RWX 。 umask 0002用于创建具有664和775权限的新文件。

<上一篇.Grav - 面试问题( Interview Questions)

Grav - 有用的资源.下一篇>

编程技术

JAVA技术

PYTHON编程

WEB开发

脚本语言

↑回到顶部↑

WIKI教程 @2018

GitHub - getgrav/grav: Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig, and Symfony

GitHub - getgrav/grav: Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig, and Symfony

Skip to content

Toggle navigation

Sign in

Product

Actions

Automate any workflow

Packages

Host and manage packages

Security

Find and fix vulnerabilities

Codespaces

Instant dev environments

Copilot

Write better code with AI

Code review

Manage code changes

Issues

Plan and track work

Discussions

Collaborate outside of code

Explore

All features

Documentation

GitHub Skills

Blog

Solutions

For

Enterprise

Teams

Startups

Education

By Solution

CI/CD & Automation

DevOps

DevSecOps

Resources

Learning Pathways

White papers, Ebooks, Webinars

Customer Stories

Partners

Open Source

GitHub Sponsors

Fund open source developers

The ReadME Project

GitHub community articles

Repositories

Topics

Trending

Collections

Pricing

Search or jump to...

Search code, repositories, users, issues, pull requests...

Search

Clear

Search syntax tips

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Cancel

Submit feedback

Saved searches

Use saved searches to filter your results more quickly

Name

Query

To see all available qualifiers, see our documentation.

Cancel

Create saved search

Sign in

Sign up

You signed in with another tab or window. Reload to refresh your session.

You signed out in another tab or window. Reload to refresh your session.

You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

getgrav

/

grav

Public

Notifications

Fork

1.4k

Star

14.2k

Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig, and Symfony

getgrav.org

License

MIT license

14.2k

stars

1.4k

forks

Branches

Tags

Activity

Star

Notifications

Code

Issues

398

Pull requests

23

Discussions

Actions

Projects

0

Security

Insights

Additional navigation options

Code

Issues

Pull requests

Discussions

Actions

Projects

Security

Insights

getgrav/grav

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

 developBranchesTagsGo to fileCodeFolders and filesNameNameLast commit messageLast commit dateLatest commit History7,612 Commits.github.github  .phan.phan  assetsassets  backupbackup  binbin  cachecache  imagesimages  logslogs  systemsystem  teststests  tmptmp  useruser  webserver-configswebserver-configs  .dependencies.dependencies  .editorconfig.editorconfig  .gitignore.gitignore  .htaccess.htaccess  .travis.yml.travis.yml  CHANGELOG.mdCHANGELOG.md  CODE_OF_CONDUCT.mdCODE_OF_CONDUCT.md  CONTRIBUTING.mdCONTRIBUTING.md  LICENSE.txtLICENSE.txt  README.mdREADME.md  SECURITY.mdSECURITY.md  codeception.ymlcodeception.yml  composer.jsoncomposer.json  composer.lockcomposer.lock  index.phpindex.php  now.jsonnow.json  robots.txtrobots.txt  View all filesRepository files navigationREADMECode of conductMIT licenseSecurity Grav

Grav is a Fast, Simple, and Flexible, file-based Web-platform. There is Zero installation required. Just extract the ZIP archive, and you are already up and running. It follows similar principles to other flat-file CMS platforms, but has a different design philosophy than most. Grav comes with a powerful Package Management System to allow for simple installation and upgrading of plugins and themes, as well as simple updating of Grav itself.

The underlying architecture of Grav is designed to use well-established and best-in-class technologies to ensure that Grav is simple to use and easy to extend. Some of these key technologies include:

Twig Templating: for powerful control of the user interface

Markdown: for easy content creation

YAML: for simple configuration

Parsedown: for fast Markdown and Markdown Extra support

Doctrine Cache: layer for performance

Pimple Dependency Injection Container: for extensibility and maintainability

Symfony Event Dispatcher: for plugin event handling

Symfony Console: for CLI interface

Gregwar Image Library: for dynamic image manipulation

Requirements

PHP 7.3.6 or higher. Check the required modules list

Check the Apache or IIS requirements

Documentation

The full documentation can be found from learn.getgrav.org.

QuickStart

These are the options to get Grav:

Downloading a Grav Package

You can download a ready-built package from the Downloads page on https://getgrav.org

With Composer

You can create a new project with the latest stable Grav release with the following command:

$ composer create-project getgrav/grav ~/webroot/grav

From GitHub

Clone the Grav repository from https://github.com/getgrav/grav to a folder in the webroot of your server, e.g. ~/webroot/grav. Launch a terminal or console and navigate to the webroot folder:

$ cd ~/webroot

$ git clone https://github.com/getgrav/grav.git

Install the plugin and theme dependencies by using the Grav CLI application bin/grav:

$ cd ~/webroot/grav

$ bin/grav install

Check out the install procedures for more information.

Adding Functionality

You can download plugins or themes manually from the appropriate tab on the Downloads page on https://getgrav.org, but the preferred solution is to use the Grav Package Manager or GPM:

$ bin/gpm index

This will display all the available plugins and then you can install one or more with:

$ bin/gpm install

Updating

To update Grav you should use the Grav Package Manager or GPM:

$ bin/gpm selfupgrade

To update plugins and themes:

$ bin/gpm update

Upgrading from older version

Upgrading to Grav 1.7

Upgrading to Grav 1.6

Upgrading from Grav <1.6

Contributing

We appreciate any contribution to Grav, whether it is related to bugs, grammar, or simply a suggestion or improvement! Please refer to the Contributing guide for more guidance on this topic.

Security issues

If you discover a possible security issue related to Grav or one of its plugins, please email the core team at contact@getgrav.org and we'll address it as soon as possible.

Getting Started

What is Grav?

Install Grav in few seconds

Understand the Configuration

Take a peek at our available free Skeletons

If you have questions, jump on our Discord Chat Server!

Have fun!

Exploring More

Have a look at our Basic Tutorial

Dive into more advanced functions

Learn about the Grav CLI

Review examples in the Grav Cookbook

More Awesome Grav Stuff

Backers

Support Grav with a monthly donation to help us continue development. [Become a backer]

Supporters

Support Grav with a monthly donation to help us continue development. [Become a supporter]

Sponsors

Support Grav with a yearly donation to help us continue development. [Become a sponsor]

License

See LICENSE

Running Tests

First install the dev dependencies by running composer install from the Grav root.

Then composer test will run the Unit Tests, which should be always executed successfully on any site.

Windows users should use the composer test-windows command.

You can also run a single unit test file, e.g. composer test tests/unit/Grav/Common/AssetsTest.php

To run phpstan tests, you should run:

composer phpstan for global tests

composer phpstan-framework for more strict tests

composer phpstan-plugins to test all installed plugins

About

Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig, and Symfony

getgrav.org

Topics

markdown

php

yaml

cms

content

website

twig

symfony

php7

doctrine

flat-file

website-builder

grav

content-management

website-generation

Resources

Readme

License

MIT license

Code of conduct

Code of conduct

Security policy

Security policy

Activity

Custom properties

Stars

14.2k

stars

Watchers

343

watching

Forks

1.4k

forks

Report repository

Releases

275

1.7.44

Latest

Jan 5, 2024

+ 274 releases

Sponsor this project

opencollective.com/grav

Contributors

214

+ 200 contributors

Languages

PHP

99.7%

Other

0.3%

Footer

© 2024 GitHub, Inc.

Footer navigation

Terms

Privacy

Security

Status

Docs

Contact

Manage cookies

Do not share my personal information

You can’t perform that action at this time.

如何使用Grav轻松快速地创建网页| 从Linux

如何使用Grav轻松快速地创建网页| 从Linux

从Linux

GNU / Linux的

应用

外形

发行版

新闻

教程

登录/注册

登录

注册

围棋 1.22 新闻

如何使用Grav快速轻松地创建网页

路易吉·托罗

2评论

从业余博客到创新型网站,在Internet上拥有存在已成为公司和个人的主要目标之一,每个网站都有自己的风格和不同的目标。 互联网时代允许任何人学习 如何快速轻松地创建网页, 有多种工具使这项工作变得微不足道,但今天我们将讨论 GRAV,我们毫无疑问您会喜欢它。

什么是重力?

GRAV 是现代的开源CMS,允许我们在 快, 简单 y 柔软,它基于Web平台,不需要安装,我们只需要提取ZIP文件,便可以 GRAV funcionando。

GRAV 遵循与其他CMS平台相似的原理,但是与大多数CMS平台具有不同的设计理念。 GRAV 带有强大的功能 包裹管理系统 以方便安装,插件和主题增强以及简单的更新。

重力徽标

Grav中包含的技术

的架构 GRAV 旨在使用最佳和最稳定的技术,旨在 简单易用,易于扩展。 其中包括一些关键技术 GRAV 是:

树枝模板:控制用户界面的范围

降价:轻松创建内容

Yaml:易于设置

解析:让Markdown更快并获得更多支持

教义缓存:表现良好

imple依赖注射容器:具有可扩展性和可维护性

Symfony事件分派器:用于管理插件事件

Symfony控制台:对于CLI界面

格雷格瓦图片库:用于处理动态图像

重力仪表板

为什么选择重力?

我认为有四个根本原因 GRAV 这是一个CMS,我们可以选择创建我们的网页。

Grav编辑器

重力很快

此 CMS 它最初被认为是同类产品中最快的,因此自创建以来,其开发人员就一直在技术和编程方式方面给予极大的关注,以提供高性能。

Grav易于使用

GRAV 它是为新手和专家用户设计的,因此它的界面非常直观,功能齐全,并且学习范围非常狭窄。 同样,由于Grav提供了许多插件,您可以添加它们,因此每个功能都可以适应您的口味和舒适度。

的管理员 GRAV 提供了一个简单直观的界面,可以轻松,快速,轻松地进行内容的配置和创建。 此外,在管理员中,我们还可以查看站点的状态,统计信息,条目,修改配置,单击安装软件包等。

Grav是可扩展的

受到其他成功的CMS和软件的启发, GRAV 旨在整合强大的 包装经理 允许添加新功能,改进,插件,其他软件的软件包等。 同样, GRAV 他们已经开发了功能强大的API,除了可以与第三方集成之外,还可以进行更井井有条的开发。

Grav是开源的

对我们来说很重要的原因 GRAV es 开源 并且所有代码都在您的 官方资料库。 您可以改善,贡献,测试,创建新功能,研究其代码等。 CMS 它对世界开放,需要您不断发展。 得益于其出色的社区,引人注目的进步很多,而且臭虫或问题的解决速度也臭名昭著。

重力功能

GRAV 具有许多特性和功能,以至于他们在其官方网站上创建了一个 会议 仅列出它们,我们将立足于此以使您知道它们:

Grav插件

平面文件架构

GRAV 快速而灵活的部分原因在于高度优化的平面文件体系结构。

智能缓存

它有一个 快取 在所有过程中都使用非常复杂的 它知道何时自动更新缓存。

即时安装

您只需要解压缩Grav软件包并运行,即可开始配置CMS。

CLI工具

GRAV 有一系列 命令行工具 例如,依赖项安装,清除缓存,用户创建和备份。

包装经理

它具有程序包管理器,可让您轻松查找,安装和更新 Grav的扩展。

广泛的文档

团队 GRAV 还没有留下其工具的文档,它有一个 网站专用于您的文档,外加大量的教程和指南。

多站点能力

您可以配置一个 GRAV 运行多个站点以及其他高级设置。

搜索引擎友好

易读的网址 整个网站 y 每页元数据 他们提供了出色的SEO功能。

用户和角色

您可以轻松创建 用户和角色, 您可以建立权限以限制他们对任何页面的访问。

调试和日志

它具有功能强大的调试面板,可在开发过程中提供很大帮助,以清晰的方式提供重要信息。

多国语言支持

GRAV 它可以用任何一种语言进行配置,或者甚至可以用多种语言来使用,它旨在检测最终用户的语言,从而根据该用户的语言显示信息。

版本控制和同步支持

您可以使用GIT,SVN,Dropbox和其他服务来进行版本管理并轻松同步数据。

多种内容工具

模块化页面

自订栏位

灵活的分类法

本机支持各种图像,视频,声音,文件和格式

图像处理

自动分页

自动图像管理

这是唯一具有本地支持的CMS,可正确显示视网膜和HiDPI上的图像

广泛的定制功能

GRAV 没有设计限制,提供:

语言模板。

主题的继承,使我们可以扩展主要主题并在自己的类中进行调整,从而可以更轻松地进行更新。

控制CSS和JS。

多个设计插件。

能够与任何CSS框架(例如Bootstrap,Foundation,Pure等)集成。

我们可以用Grav做什么?

GRAV 从简单到复杂,它都没有限制,它可以灵活地提供各种类型的网站。 其灵活的内容结构和强大的模板可轻松实现任何设计。

Grav有很多站点,每个站点都有不同的结构,逻辑和设计,因此可以适应任何想法或业务模型。

重力安装

安装 GRAV 这是一个微不足道的过程。 实际上,没有实际安装。 我们有 三 选项来“安装” Grav。 第一个也是最简单的,就是简单地下载文件 拉链 并将其提取。 第二种方法是使用 组合。 第三种方法是直接从中克隆代码 GitHub上 然后运行脚本以安装必要的依赖项:

检查PHP版本

Grav非常易于设置和运行。 确保您至少具有PHP 5.5.9版,要执行此操作,请在终端上输入:

$ php -v

这应该报告PHP的版本和构建。 例如:

PHP 5.5.20 (cli) (built: Jan 19 2014 21:32:15)

Copyright (c) 1997-2013 The PHP Group

Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

从ZIP安装Grav

安装Grav的最简单方法是下载ZIP并将其解压缩:

下载  最新版本的Grav。

将zip文件解压缩到 webroot或根目录 例如,从您的Web服务器。 ~/webroot/grav

如果您已经下载了ZIP文件,然后要将其移动到Web服务器的根目录,请移动 完整资料夹 ,因为它包含几个默认情况下不会选择的隐藏文件(例如.htaccess)。 运行Grav时跳过这些隐藏文件可能会导致问题。

使用composer安装Grav

另一种方法是使用 撰写:

$ composer create-project getgrav/grav ~/webroot/grav

如果要使用grav的开发版本,请添加 1.x-dev  作为附加参数:

$ composer create-project getgrav/grav ~/webroot/grav 1.x-dev

从GitHub安装Grav

另一种方法是从GitHub存储库克隆Grav,然后运行具有依赖项的简单安装脚本:

将Grav存储库克隆到 GitHub上 到文件夹 webroot或根目录 例如,从您的Web服务器。 ~/webroot/grav。 运行终端并转到Web服务器的根目录:

$ cd ~/webroot

$ git clone -b master https://github.com/getgrav/grav.git

安装 依存关系 供应商 与作曲家:

$ composer install --no-dev -o

使用安装插件和主题依赖项 Grav CLI应用程序 bin/grav:

$ cd ~/webroot/grav

$ bin/grav install

这会自动克隆 从GitHub所需的依赖项直接进入此Grav安装。

重力运行

一旦我们跑步 重力 下一步是根据自己的喜好进行调整和修改,为此,我们可以帮助自己 Grav开发人员官方文档,尤其是 基础教程 它将教您成为Grav专家并因此成为出色的网站构建者所需的一切。

你觉得呢 GRAV告诉我们您的印象,疑问或告诉我们有关您尝试过的该工具的替代方案。 我们希望从今天起有人可以 用Grav创建网页。

文章的完整路径: 从Linux » 应用 » 如何使用Grav快速轻松地创建网页

2条评论,留下您的评论

发表您的评论 取消回复您的电子邮件地址将不会被发表。 必填字段标有 *评论 * 名称

*

电子邮件地址*

我接受了 隐私条款*

负责数据:MiguelÁngelGatón

数据用途:控制垃圾邮件,注释管理。

合法性:您的同意

数据通讯:除非有法律义务,否则不会将数据传达给第三方。

数据存储:Occentus Networks(EU)托管的数据库

权利:您可以随时限制,恢复和删除您的信息。

 我想收到时事通讯

  技术手册 说

前 7年

我通常使用joomla / wordpress + uikit来创建网页等,但是有趣的是看到了其他选择并能够尝试使用它们来扩展我们的文化。

感谢您抽出宝贵的时间与他人分享“发现”。

我会试试看 !!

回复曼努埃尔

  西尔万·拉福莱(SylvainLaforêt) 说

前 3年

你好,

法国的民俗之地(pouvez-vous m'indiquer des sites)? Je n'en ai pastrouvéun seul ...

谢谢!

致敬

回复西尔万·拉福莱特(SylvainLaforêt)

电子邮件中的新闻在您的电子邮件中获取最新的Linux新闻

名称

邮箱地址

我接受法律条件

Facebook

Twitter

Pinterest

Telegram

邮箱地址

RSS

iPhone新闻

我来自mac

苹果化

Android帮助

Androidsis

Android指南

所有安卓系统

埃尔输出

小工具新闻

手机论坛

平板专区

Windows新闻

生命字节

在线广告

所有电子阅读器

免费硬件

Linux成瘾者

登录

魔兽世界指南

秘籍下载

汽车新闻

贝齐亚

应用

发行版

社区

提示库

编辑团队

编辑伦理

成为编辑

订阅新闻通讯

法律声明

联系我们

关闭

GRAV® - Premium Pipes & Bongs

GRAV® - Premium Pipes & Bongs

CONGRATS

You qualify for a free .

DECLINE

ACCEPT

Get ✨ 20% OFF✨ sitewide + FREE SHIPPING on all orders | code: SALEXSW20

ARE YOU OVER 21?

NO

YES

Shop by Collection

New

New

Best Sellers

Gift Cards

Categories

Hand Pipes

Bubblers

Bongs

Gravity Bongs

Accessories

Apparel & Merch

One Hitters

Collections

GRAV

Sip Series

Helix

STAX

Upline

Orbis

Shop by Category

New

New

Best Sellers

Gift Cards

Categories

Hand Pipes

Bubblers

Bongs

Gravity Bongs

Accessories

Apparel & Merch

One Hitters

Collections

GRAV

Sip Series

Helix

STAX

Upline

Orbis

SHOP

Shop by Collection

New

Best Sellers

Bundles

Shop All

Shop by Category

Gravity Bongs

Bongs

Hand Pipes

Bubblers

Dab Rigs

One-Hitters

Fill-Your-Own Glass Joints

Accessories

Grinders & Dugouts

Apparel + Merch

ABOUT US

About Us

COMMUNITY

Blog

Loyalty

Events

SUPPORT

FAQ

Customer Service

MY ACCOUNT

MY BAG

0

SHOP

Shop by Collection

New

Best Sellers

Bundles

Shop All

Shop by Category

Gravity Bongs

Bongs

Hand Pipes

Bubblers

Dab Rigs

One-Hitters

Fill-Your-Own Glass Joints

Accessories

Grinders & Dugouts

Apparel + Merch

ABOUT US

About Us

COMMUNITY

Blog

Loyalty

Events

SUPPORT

FAQ

Customer Service

0

CLOSE

Your bag is currently empty!

Total:

$0.00

Continue Shopping

You are $100.00 away from free shipping!

Total:

$0.00

GO TO BAG

CHECKOUT

WARNING:

Cancer and Reproductive Harm -

www.P65Warnings.ca.gov

My Account

My Wishlist

My Bag

Check Out

Login

Sign Up

Filter By

Featured

Price: Low to High

Price: High to Low

A-Z

Z-A

Oldest to Newest

Newest to Oldest

Filter By

Collection

GRAV

Helix

Upline

STAX

Pleasures

Type

Joint Size

10mm

14mm

19mm

Color

Black

Blue

Clear

Light Cobalt

Consumption Type

Concentrate

Flower

Size

6"

8"

9"

9.5"

12"

13"

14"

16"

Price

Under $25

$25-$50

$50-$100

Above $100

Apply

Bongs

Creating high-quality borosilicate glass since 2004. Advocates for the cannabis community, culture and causes.

#findyourhigherself

3501 Dime Circle, Ste 119

Austin, TX 78744

ABOUT

Frequently Asked Questions

Teacher, Military & First Responders

Submit A Design

Video Vault

CONTACT

Monday-Friday 8:00-6:00PM CST

Email Support

Careers

Wholesale

ACCOUNT

My Account

Terms of Service

Replacement Policy

Order Policy

Loyalty Program

Data Privacy

Terms of Use

Privacy Policy

©GRAVITRON, LLC. ALL RIGHTS RESERVED

Creating high-quality borosilicate glass since 2004. Advocates for the cannabis community, culture and causes.

#findyourhigherself

3501 Dime Circle, Ste 119

Austin, TX 78744

ABOUT

Frequently Asked Questions

Teacher, Military & First Responders

Submit A Design

Video Vault

CONTACT

Monday-Friday 8:00-6:00PM CST

Email Support

Careers

Wholesale

ACCOUNT

My Account

Terms of Service

Replacement Policy

Order Policy

Loyalty Program

Data Privacy

FAQ

Terms of Use

Privacy Policy

©GRAVITRON, LLC. ALL RIGHTS RESERVED

Error

Item added to your bag.

is added to your wish list.

Continue Shopping

Go to bag

Go To Wishlist

 

Quantity:

-

+

Add to Bag

Subtotal :

Your cart

Oh no, it looks like your cart is empty!

CONTINUE SHOPPING

About Grav | Grav CMS

About Grav | Grav CMS

Tour

Features

Blog

Downloads

About

Forum

Learn

5,772

14,242

2,996

You are cordially invited to join the Grav Community on our new Discord Chat Server

Tour

Features

Blog

Downloads

About

Forum

Learn

5,772

14,242

2,996

About Grav

Who we are and why we developed Grav

Grav is built and maintained by a team of dedicated and passionate developers, designers and users. As Grav is an open source project we greatly appreciate user contribution and commitment. These are the key folks that make this all possible.

Core Team

Andy Miller

Lead Developer

Djamil Legato

Developer

Matias Griese

Developer

Translation Team

If you wish to participate in the translation of Grav, please join our Crowdin based translation project with your GitHub account, and just start translating! Don't forget to join our Grav chatroom.

Rich Starkie - Translation Team Manager

Flavio Copes - Italian

Djamil Legato - Italian

Anibal Sanchez - Spanish

Hugo Avila - Spanish

Tyler Cosgrove - Portuguese, Spanish

Adriano Corte Real - Portuguese

Mike Wink - German

Marc-Antoine Thevenet - French

Sébastien Viallemonteil - French

Pascal Jacquemain - French

Jakub Baran - Polish

Gerard Roos - Dutch

Rachel Knol - Dutch

Matias Griese - Finnish

Kruno H - Croatian

Damir Pecnik - Croatian

Ceri Roberts - Welsh

Platinum Sponsors

A special thank you to the generous sponsors below which helped develop Grav further thanks to their financial support.

Grav is proudly part of the Open Collective family. You can now support the project and keep development going strong by becoming a backer or a sponsor.

Sponsor / Support Grav

Backers

Support us with a monthly donation and help us continue our activities.

Sponsors

Become a sponsor and get your logo on our README on Github with a link to your site.

Grav Origins

Why we built Grav...

The origins of Grav come from a personal desire to work with an open source platform that focused on speed and simplicity, rather than an abundance of built-in features that come at the expense of complexity.

There are plenty of great open source CMS platforms out there, including personal favorites Joomla and WordPress, as well as some really promising up-and-coming platforms like PageKit.

All of these platforms rely on a database for data persistence, are powerful, and offer a good degree of flexibility.

One real downside to these platforms is they require a real commitment to learn how to use and develop on them. You really have to pick one out of the pack, and dedicate yourself to that platform if you wish to become competent as either a user, developer, or administrator.

What if there was a platform that was fast, easy-to-learn, and still powerful & flexible? Surely something already exists that meets these criteria? In my search for such a platform, it became clear that a flat-file based CMS was likely to be the answer, and there are a bunch to choose from! I created a list of requirements I thought would ensure an ideal platform for my needs:

Fast, right out of the box

Flat-file based

Content created in Markdown

Templating provided by Twig or a similar established project

Extensible and flexible via far-reaching plugin architecture

Simple to install, with minimal server requirements

Must be open source and MIT licensed if possible

Solid Documentation

Enjoyable to use

The problem was, nothing really fit my requirements exactly. The ones that met my requirements the closest were not open source, so the option of forking it and adding the features I wanted was not available. I was left with two options:

Start with one of the open source platforms and transform it into my ideal solution.

Start from scratch

Originally, I thought that Pico might make a good base to start from as it already satisfied a good deal of the requirements. However, as I delved deeper, I realized it was not going to make a great starting point due to its functional approach. So, option #2 was the only option left to me. I started over.

Grav is heavily inspired by a whole raft of other platforms, but is written from scratch focusing on speed, simplicity, and flexibility.

The core of Grav is built around the concept of folders and markdown files for content. These folders and files are automatically compiled into HTML and cached for performance.

Its pages are accessible via URLs that directly relate to the folder structure that underpins the whole CMS. By rendering the pages with Twig Templates, you have complete control over how your site looks, with virtually no limitations.

Part of the flexibility comes from Grav's simple, but powerful, taxonomy functionality that lets you create relationships between pages. Another key part of this flexibility is the plugin architecture that exists throughout the entire platform to allow you to interact and modify pretty much any part of Grav as needed.

Please read through our documentation to get a better understanding of how Grav works, and how it can really change your ideas about web development.

Andy Miller - Grav Lead Developer

Download Grav

Never miss a thing, sign up to the Grav mailing list

Subscribe

Grav was with by Trilby Media

Contact the Grav Team

About Grav

Grav Media Information

Grav News Feed

Crazy Fast Cloudways Managed Hosting - monitoring by Pingometer

Copyright @2024 - Grav CMS - All rights reserved - Grav is released under the MIT license

Turbo-charge your Grav site - from the creators of Grav

Learn about Premium

Releases · getgrav/grav · GitHub

Releases · getgrav/grav · GitHub

Skip to content

Toggle navigation

Sign in

Product

Actions

Automate any workflow

Packages

Host and manage packages

Security

Find and fix vulnerabilities

Codespaces

Instant dev environments

Copilot

Write better code with AI

Code review

Manage code changes

Issues

Plan and track work

Discussions

Collaborate outside of code

Explore

All features

Documentation

GitHub Skills

Blog

Solutions

For

Enterprise

Teams

Startups

Education

By Solution

CI/CD & Automation

DevOps

DevSecOps

Resources

Learning Pathways

White papers, Ebooks, Webinars

Customer Stories

Partners

Open Source

GitHub Sponsors

Fund open source developers

The ReadME Project

GitHub community articles

Repositories

Topics

Trending

Collections

Pricing

Search or jump to...

Search code, repositories, users, issues, pull requests...

Search

Clear

Search syntax tips

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Cancel

Submit feedback

Saved searches

Use saved searches to filter your results more quickly

Name

Query

To see all available qualifiers, see our documentation.

Cancel

Create saved search

Sign in

Sign up

You signed in with another tab or window. Reload to refresh your session.

You signed out in another tab or window. Reload to refresh your session.

You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

getgrav

/

grav

Public

Notifications

Fork

1.4k

Star

14.2k

Code

Issues

398

Pull requests

23

Discussions

Actions

Projects

0

Security

Insights

Additional navigation options

Code

Issues

Pull requests

Discussions

Actions

Projects

Security

Insights

Releases: getgrav/grav

Releases

Tags

Releases · getgrav/grav

1.7.44

05 Jan 12:45

rhukster

1.7.44

78b8125

This commit was signed with the committer’s verified signature.

rhukster

Andy Miller

GPG key ID: 9F2CF38AEBDB0AE0

Learn about vigilant mode.

Compare

Choose a tag to compare

View all tags

1.7.44

Latest

Latest

Release v1.7.44

Assets

5

3

stevleibelt, JS-Media-Creation, and MasterZydra reacted with thumbs up emoji

2

YenLung-Huang and JS-Media-Creation reacted with hooray emoji

All reactions

3 reactions

2 reactions

4 people reacted

1.7.43

02 Oct 16:41

rhukster

1.7.43

1f21d25

This commit was signed with the committer’s verified signature.

rhukster

Andy Miller

GPG key ID: 9F2CF38AEBDB0AE0

Learn about vigilant mode.

Compare

Choose a tag to compare

View all tags

1.7.43

Release 1.7.43

Assets

5

All reactions

1.7.42.3

18 Jul 18:42

rhukster

1.7.42.3

fb5dd14

This commit was signed with the committer’s verified signature.

rhukster

Andy Miller

GPG key ID: 9F2CF38AEBDB0AE0

Learn about vigilant mode.

Compare

Choose a tag to compare

View all tags

1.7.42.3

Release v1.7.42.3

Assets

5

2

stevleibelt and cfyer reacted with thumbs up emoji

All reactions

2 reactions

2 people reacted

1.7.42.2

18 Jul 16:52

rhukster

1.7.42.2

45103f8

This commit was signed with the committer’s verified signature.

rhukster

Andy Miller

GPG key ID: 9F2CF38AEBDB0AE0

Learn about vigilant mode.

Compare

Choose a tag to compare

View all tags

1.7.42.2

Release v1.7.42.2

Assets

5

All reactions

1.7.42.1

15 Jun 18:58

rhukster

1.7.42.1

4cd1378

This commit was signed with the committer’s verified signature.

rhukster

Andy Miller

GPG key ID: 9F2CF38AEBDB0AE0

Learn about vigilant mode.

Compare

Choose a tag to compare

View all tags

1.7.42.1

Release v1.7.42.1

Assets

5

2

pfmurillo and skerbis reacted with thumbs up emoji

All reactions

2 reactions

2 people reacted

1.7.42

14 Jun 20:20

rhukster

1.7.42

dc20945

This commit was signed with the committer’s verified signature.

rhukster

Andy Miller

GPG key ID: 9F2CF38AEBDB0AE0

Learn about vigilant mode.

Compare

Choose a tag to compare

View all tags

1.7.42

Release 1.7.42

Assets

5

4

ynn1k, jasper-day, stevleibelt, and mdestafadilah reacted with thumbs up emoji

All reactions

4 reactions

4 people reacted

1.7.41.2

01 Jun 21:22

rhukster

1.7.41.2

d4c617f

This commit was signed with the committer’s verified signature.

rhukster

Andy Miller

GPG key ID: 9F2CF38AEBDB0AE0

Learn about vigilant mode.

Compare

Choose a tag to compare

View all tags

1.7.41.2

Release v1.7.41.2

Assets

5

3

lufog, cebreus, and MasterZydra reacted with thumbs up emoji

1

Cvar1984 reacted with hooray emoji

All reactions

3 reactions

1 reaction

4 people reacted

1.7.41.1

10 May 14:37

rhukster

1.7.41.1

d96b023

This commit was signed with the committer’s verified signature.

rhukster

Andy Miller

GPG key ID: 9F2CF38AEBDB0AE0

Learn about vigilant mode.

Compare

Choose a tag to compare

View all tags

1.7.41.1

Release v1.7.41.1

Assets

5

2

stevleibelt and viocassel reacted with thumbs up emoji

All reactions

2 reactions

2 people reacted

1.7.41

09 May 18:45

rhukster

1.7.41

e4a30f5

This commit was signed with the committer’s verified signature.

rhukster

Andy Miller

GPG key ID: 9F2CF38AEBDB0AE0

Learn about vigilant mode.

Compare

Choose a tag to compare

View all tags

1.7.41

Release v1.7.41

Assets

5

All reactions

1.7.40

22 Mar 17:30

rhukster

1.7.40

685d762

This commit was signed with the committer’s verified signature.

rhukster

Andy Miller

GPG key ID: 9F2CF38AEBDB0AE0

Learn about vigilant mode.

Compare

Choose a tag to compare

View all tags

1.7.40

Release 1.7.40

Assets

5

4

stevleibelt, viocassel, sebasvisser, and r4vanan reacted with thumbs up emoji

All reactions

4 reactions

4 people reacted

Previous 1 2 3 4 5 … 27 28 Next

Previous Next

Footer

© 2024 GitHub, Inc.

Footer navigation

Terms

Privacy

Security

Status

Docs

Contact

Manage cookies

Do not share my personal information

You can’t perform that action at this time.

Grav - 概述_学习Grav|WIKI教程

Grav - 概述_学习Grav|WIKI教程

WIKI教程

首页

WIKI工具

学习敏捷数据科学

学习Apex

学习Arduino

学习汇编

学习Awk

C标准库

学习Clojure

学习COBOL

学习计算机编程

学习C ++

C ++标准库

学习C

学习C#

学习dart_programming

学习D.

目录

目录

Grav - 教程

Grav - 概述

Grav - 安装

Grav - Pages

Grav - Markdown 语法

Grav - 页面链接( Page Linking)

Grav - 图像链接( Image Linking)

Grav - Media

Grav - 模块化页面( Modular Pages)

Grav - 多语言( Multi Language)

Grav - 主题基础知识( Themes Basics)

Grav - Theme 教程

Grav - Twig过滤器和功能( Twig Filters & Functions)

Grav - Theme 变量

Grav - 资产经理( Asset Manager)

Grav - 主题定制( Theme Customization)

Grav - 插件基础知识( Plugin Basics)

Grav - 插件基础知识( Plugin Basics)

Grav - 插件基础知识( Plugin Basics)

Grav - Admin 介绍

Grav - 管理员仪表板( Admin Dashboard)

Grav - 配置系统( Configuration System)

Grav - 配置站点( Configuration Site)

Grav - 管理面板页面( Administration Panel Pages)

Grav - 页面编辑器选项( Page Editor Options)

Grav - 页面编辑器高级( Page Editor Advanced)

格拉夫 - 蓝图( Blueprints)

Grav - 性能和缓存( Performance & Caching)

Grav - 调试和记录( Debugging & Logging)

Grav - CLI

Grav - GPM

Grav - 发展( Development)

Grav - 生命周期( Lifecycle)

Grav - YAML 语法

Grav - Forms

Grav - 网页寄存( Web Hostings)

Grav - 服务器错误( Server Error)

格拉夫 - 许可( Permission)

Grav - 面试问题( Interview Questions)

Grav - 快速指南

Grav - 有用的资源

Grav - 讨论

关闭

WIKI教程

学习Grav

Grav - 概述

Grav - 概述

Grav是一个基于平面文件的内容管理系统。 此系统不使用数据库来存储内容,而是使用文本(.txt)文件或markdown(.md)文件来存储内容。 平面文件部分指的是可读文本,它以简单的方式处理内容,这对开发人员来说很简单。 Grav由Rocket Theme团队开发。 它运行在PHP上,是一个开源的CMS,如Joomla,Wordpress或Drupal。 为什么格拉夫? Grav现在是最快的平面文件内容管理系统。 使用Grav发布和管理内容更容易。 它允许开发人员通过将内容存储在文件(例如文本或降价文件)而不是数据库中来非常容易地处理内容。 Grav可以帮助您构建一个简单,易于管理和快速的站点。 它的成本低于数据库驱动的CMS,当您没有足够的资源时,它可用于文件处理的I/O. Grav的特点 它是一个快速,简单和强大的平面文件Web平台。 它用于构建没有额外工具或HTML知识的网站。 它使用文本文件或markdown文件来存储内容。 它不使用数据库,因此这减轻了瓶颈的实例。 它使用由Twig提供的基于PHP的模板,该模板直接解析为PHP,使其快速。 优势 (Advantages) 它不是基于数据库CMS,因此它非常易于安装,并且可以在将文件上载到服务器时使用。 它使用Markdown文本文件使事情变得简单。 使用此功能,内容将动态转换为HTML并显示在浏览器中。 在安全性方面,Grav没有管理区域和数据库。 因此,没有机会将黑客入侵或在数据库中访问重要数据。 您可以轻松备份所有文件以保留网站的备份副本,因为没有要备份的数据库。 它是一个不需要更多时间学习的软件。 缺点 (Disadvantages) 您可能遇到未经授权的用户可能直接从文件访问您的内容的实例,因为没有文件的数据库。 使用Grav CMS构建复杂的网站很困难。

<上一篇.Grav - 教程

Grav - 安装.下一篇>

编程技术

JAVA技术

PYTHON编程

WEB开发

脚本语言

↑回到顶部↑

WIKI教程 @2018