paperpaper

用 React PHP 编写的开发者友好型站点生成器

安装: 10

依赖: 0

建议者: 0

安全: 0

星标: 9

关注者: 4

分支: 2

公开问题: 3

语言:HTML

类型:项目

0.0.5 2020-05-18 18:30 UTC

This package is auto-updated.

Last update: 2024-09-22 21:08:37 UTC


README

Paphper 是基于 ReactPHP 构建的静态站点生成器。

安装

composer create-project paphper/paper

Docker 支持

您也可以在 Docker 上使用 paper,以下是一些额外的步骤 -

  • docker-compose up -d
  • docker exec -i paper php run dev
  • 开始构建出色的模板

开发

php paper dev

这将在一个 https://:8888 的开发服务器上运行。此操作还会查找 pages 文件夹中的文件更改并在浏览器中反映。

注意:此操作不会监视 layouts 中的更改。因此,如果您更改了布局,您将需要在您的页面上进行一些修改才能在浏览器中看到更改。您可以在 /config.php 中更改此端口。

文件夹结构

/pages

所有网站页面都位于此处。支持作为页面使用的 .html.mdBlade 文件。页面的文件夹结构决定了路由。
例如

  • pages/index.html 将显示在 /
  • pages/readme.md 将显示在 /readme
  • pages/posts/post.html 将显示在 /posts/post
  • pages/blade.blade.php 将显示在 /blade

/layouts

所有网站布局都位于此处。只支持作为布局使用的 html 文件。

/assets

所有图像、css 和其他资源都位于此处

注意:所有这些都可以在 /config.php 中进行更改。

<paper>

我们在 <paper> 标签中包含“meta”以供文章使用。这里的“meta”意味着您希望在页面内容中替换的内容。

在布局中的 {content} 和在 <paper> 标签中的 layout 是保留的,不能用于替换页面内容

模板中的语法是 {meta}。例如,如果您要为页面添加标题 {title},在您的 paper 标签中添加一个,然后在您的布局中添加

title: This is the test title

这将生成

...
<title>{title}</title>
...

在 HTML 中。

<title>This is the test title</title>

示例 paper 标签

支持的文件类型

<paper>       
    description: this is the best description
    title: This is the test title
    layout: blog.html
</paper>

Paphper 目前支持三种文件类型。

Html

  1. Md
  2. Blade 模板
  3. 图像缩放支持

Paphper 还支持从单个源文件进行图像缩放。您可以引用图像的大小,它将生成该大小。

Paphper 从 assets 文件夹中的 envelope.jpg 文件中引用。它在 index.html 中引用,并在 index 布局 中作为 /envelope_50x50.jpeg 引用。这将复制原始文件,并在给定的维度中创建 /envelope_50x50.jpeg。
例如
要使此操作正常工作,图像必须以 filename_widthxheight.jpeg 的方式引用。例如

为了生成一个 50x50 维度的图像 /envelope.jpeg,它必须以 /envelope_50x50.jpeg 的方式引用。
构建

php paper build 将 html 文件构建到构建文件夹中。这可以在 此处 指定。

高级使用

img

我已尽力使这个事物尽可能灵活和可扩展。让我简单解释一下架构,以帮助我说明这一点。

架构

PageResolvers

PageResolver 是一个简单的类,实现了 PageResolverInterface.php

这是路由结构的来源。以下解释了函数。

  1. getPages 应该返回要构建的页面。它应该是一个解析为数组字符串的 Promise(pages)。
  2. getBuildFilename(string $page) 应该返回应该添加解析后页面内容的文件。必须是完整路径
  3. getBuildFolder 应该返回应该创建以放置文件的文件夹。必须是完整路径。

Paphper 中使用的默认 PageResolver 是 FilesystemPageResolver。它扫描 pages 文件夹中的文件夹,检索这些页面并决定要创建的文件和文件夹。

这可以扩展以使用,例如,MySQL 表中的帖子,并根据该帖子的 URI 创建页面。

FileTypeResolver

Content 是一个将任何文件解释为 HTML 的类。它实现了 Contentinterface。它需要一个函数。

  1. resolveFileType(string $filename) 当传入一个文件名时,应简单返回一个 ContentInterfaceContentInterface 返回解析为字符串的 Promise。这是将写入生成的 HTML 文件中的最终内容。

目前我们有三个 FileTypeResolver。

  1. HtmlResolver
  2. MdResolver
  3. BladeResolver

Paphper 使用此接口来内部支持多种文件类型。

MetaInterface

Meta 解析器解析页面中的元数据。默认的 meta 解析器是 Paper Tag Parser,它实现了 MetaInterfaec。正如其名称所暗示的,Paper Tag Parser 是文件顶部的 <paper> 标签。

您也可以实现自己的 meta 解析器。以下解释了函数。

  1. getBody 应该能够在写入 HTML 时获取页面的主体,而不包括元数据。
  2. getLayout 应该能够获取将要使用的布局。在 blade 模板的情况下,这不是必需的,因为它由 blade 本身处理。
  3. getLayoutContent 应该获取布局的内容,以便可以将元数据和内容传递到其中。
  4. get 在传入元数据键时,应该返回元数据值
  5. getExtraMetas 这是一切元数据
  6. process 返回一个 Promise。由于我们在文件系统中使用 Promise,必须读取文件一次以处理页面内容。如果我们在每次调用中单独处理 Promise,就会变得难以返回类型,并且会变成回调地狱。因此,我们调用 process 函数来设置所有属性。

整合这一切

我们基本上将这一切整合在一起来创建一个静态站点。

https://github.com/paphper/core/blob/master/paper#L26-L43。这些是 paper 中使用的默认值。您可以自定义并编写自己的。我计划添加更多。请告诉我应该添加什么。创建 PR 或 issues 以提出建议、贡献和反馈。