skimpy/cms

Skimpy CMS

维护者

详细信息

github.com/skimpy/cms

主页

源代码

问题

安装: 27

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

公开问题: 2

语言:Twig

v0.3.0 2024-06-18 05:48 UTC

This package is auto-updated.

Last update: 2024-09-19 02:36:20 UTC


README

Latest Stable Version License

关于Skimpy

Skimpy是一个基于文件的CMS,使用PHP(Lumen)编写和运行。它不是一个静态站点生成器。生成器是繁琐的工具。Skimpy易于使用。您只需创建一个文件,它就会出现!Skimpy如此易于使用,可能是您尝试过的最简单的CMS/博客工具。您不信?试试吧!

文档

简介

Skimpy是一个简单的基于文件的CMS,可用于创建网站或博客。Skimpy是为开发者构建的,尽管任何可以创建文件并将PHP站点上传到互联网的人都可以使用它。Skimpy旨在简单易用。

安装

服务器要求

  • PHP >= 8.0.2
  • OpenSSL PHP扩展
  • PDO PHP扩展
  • Mbstring PHP扩展

通过Composer安装Skimpy

您可以使用Composer安装Skimpy,并使用PHP内置服务器运行它,或者您可以在内置的Dockerfile中运行它。

Composer + PHP服务器

  1. composer create-project --prefer-dist skimpy/cms skimpy
  2. cd path/to/skimpy
  3. cp .env.example .env
  4. 更新.env文件以匹配您的偏好/信息
  5. php -S localhost:4000 -t public
  6. 访问 https://:4000

Composer + Docker

  1. composer create-project --prefer-dist skimpy/cms skimpy
  2. cd path/to/skimpy
  3. cp .env.example .env
  4. 更新.env文件以匹配您的偏好/信息
  5. 构建容器
  6. docker build -t skimpy .
  7. 运行带有卷的容器,以便代码更改得到反映
  8. docker run -p 4000:80 -v $PWD:/var/www/html skimpy
  9. 访问 https://:4000

创建博客文章

  1. site/content目录内创建一个新的Markdown文件,名为test-post.md
  2. 访问https://:4000/test-post,就是这样!
  3. 在文件中添加Markdown标题# 测试标题并刷新。您将看到读取为“测试标题”的h1标签。

如何确定URI

在上面的示例中,我们创建了“test-post”,您可以看到Skimpy使用文件名作为文章的URI。如果您将文件放入名为“products”的目录中,并将文件命名为“widget.md”,则文件的URI将是/products/widget

path = path/to/skimpy/site/content/products/widget.md
URL = https://:4000/products/widget

添加元数据

您可以使用元数据键值来自定义条目的某些属性。所有元数据都是可选的,Skimpy将使用合理的默认值。

始终使用精确的三个连字符“---”来分隔元数据和内容。否则,您将收到异常或文件无法正确解析。

请注意,在单独的一行上使用三个连字符“---”,或在文件末尾没有新行的情况下使用,都会导致Skimpy假设它是元数据分隔符,无论这是否是您的意图。

元数据

您在元数据中放入的任何不是内置的键/值都将被存储为元数据。

您可以在模板中访问任何自定义的元数据键值。

下面示例文件中的“restaurants”键是元数据的一个例子。

在模板中访问FrontMatter元数据

在条目对象上调用“meta”方法,并传入您想要的键。

{{ entry.meta('restaurants') }}

示例带元数据的内容文件

title: My 2019 Trip to Germany
date: "2019-08-27"
description: The SEO meta description (if any) goes here
seoTitle: Custom SEO title here
categories: [Vacation]
tags: [Personal Growth]
restaurants: [Kin Dee, Markthalle Neun]
---
The content for the post goes here...

创建页面

内容简单的网站不一定是博客,但如果您正在做博客,那么这会使博客变得简单。在我解释Skimpy中的“页面”之前,让我们先定义一下什么是页面。页面和帖子都只是当有人访问匹配的URI时用于显示内容的文件。页面和帖子之间的唯一区别是,人们通常不会像博客帖子那样显示页面的索引。页面通常不会在主页上列出,就像博客帖子那样有“摘要”,页面也不是真正打算分类或标记的。

因此,如果您想在您的网站上创建一个不会显示在默认博客源中的“条目”,那么您需要创建一个页面。这可以通过在内容目录下创建一个子目录并将您想要成为“页面”的任何文件放入该目录来实现。您可以命名这个目录您想要的任何名字,但请记住,目录名将是访问页面的URI的一部分。

您还可以通过手动更改Front Matter中的“type”键来排除根条目在主页或索引中显示。这基本上与将文件放入子目录中相同。任何子目录中的文件都有一个“type”属性,其值与父目录的名称匹配。尽量少使用“type”键。遵循约定的网站将更有组织,更容易导航。您始终可以只创建一个“pages”目录并将您的页面放在那里。在页面URI之前有“pages”这一URI片段其实并不是什么大问题。

分类法 - 内容分类和标记

内容可以分类或标记。分类和标记被称为“分类法”(就像WordPress中那样)。分类法是一种分类内容的方式。默认的Skimpy安装中已经预定义了两个分类法。您猜对了,那些分类法就是分类和标记。如果您想添加自己的分类法,只需复制categories.yaml文件并更改值。

分类法有“术语”。在“分类”分类法的情况下,术语就是实际的分类。您可以通过在content/taxonomies/categories.yaml文件中添加一个新的数组到术语键来添加新的分类。您只需提供一个分类的名称和用于URI的别名。

公共术语路由

默认情况下,当您访问/categories时,Skimpy将列出您在categories.yaml文件中定义的术语(分类名称)的链接。如果您想关闭特定分类法(如分类)的此功能,则应在categories.yaml中将has_public_terms_route yaml键设置为false

分配分类/标记

您只需在内容的YAML前文中添加键categories并提供一个分类名称数组。使用实际的“名称”而不是别名。

别忘了前文分隔符! "---"

categories: [Web Development]
tags: [Tag 1]
date: "2020-01-21"
---
Your post content here...

创建页面类型

假设您想为您的团队中的每个人添加一个页面,并且您想在您的“团队”页面上列出这些人。

  1. 创建文件夹 content/team
  2. 创建文件 content/team/kevin-rose.md
  3. 创建文件 content/team/tim-ferriss.md
  4. 通过创建content/team/index.md启用“团队索引”
  5. 以下URL现在是有效的
    • example.com/team - 列出“team”目录下任何文件的链接
    • example.com/team/kevin-rose
    • example.com/team/tim-ferriss

索引页面

索引页面基本上是内容子目录中内容文件的存档。

请参阅创建页面类型的示例

默认情况下,内容目录子目录中的文件没有索引。要打开索引URI,换句话说,要将子目录名称变为网站上的有效URI,只需在该子目录中创建一个名为index.md的文件即可

URI映射 & 模板变量

Skimpy中有三种类型的“实体” - 条目分类术语。当前的URI决定了查询哪种类型的实体以及模板变量名。只需查看URI就可以确定正在显示哪个文件。文件结构直接映射到当前URI。只需记住,当你创建一个分类文件时,你正在创建一个与该文件名匹配的URL。当你在内容内部创建一个目录并将index.md文件放入其中时,你正在创建一个与该目录路径匹配的URL。

模板层次结构

Skimpy使用Twig进行模板化。请参阅Twig文档以发现Twig的所有功能。

所使用的模板取决于显示的实体类型(条目、分类、术语)。您可以通过template前端文件密钥手动设置模板。

  1. 前端文件密钥 template: your-template-name
  2. 如果文件位于内容子目录中,则父文件夹名称。
  3. 如果文件是索引(index.md),则索引模板。
  4. 实体类型(条目 = entry.twig,分类 = taxonomy.twig,术语 = term.twig)

自定义模板

Skimpy使用Twig进行模板化。请参阅Twig文档以发现Twig的所有功能。

Skimpy在决定使用哪个模板方面有一些约定。您可以通过向内容文件的前端文件添加template密钥来覆盖这些约定。

使用自定义模板

  1. 创建模板site/templates/my-custom-template.twig
  2. 打开或创建一个内容文件,并在前端文件中设置模板。
    template: my-custom-template

部署

将Skimpy部署到生产环境非常简单。只需确保您的服务器满足服务器要求,并创建一个虚拟主机,将文档根设置为skimpy公共文件夹。

自动重建

什么是自动重建?自动重建是指Skimpy在每次对您的网站进行请求时扫描您的内容文件夹并更新SQLite数据库。这使得开发快速简单。您不必担心“生成”您的网站。您可以在本地或生产环境中打开或关闭此功能。实际上,我不太担心这一点,因为它不会带来太大的差异。话虽如此,我将分享我使用Skimpy部署的首选方法。

我是如何部署Skimpy的

  1. 我用Git跟踪我的SQLite数据库,所以当我在master上推送时,它会自动部署。这使得我的Skimpy网站在推送到master时可以更新到最新版本,而无需在生产网站上为每个请求重建数据库。

  2. 我在.env文件中将AUTO_REBUILD=false设置为生产网站,这样数据库就不会在每次请求时重建。

Skimpy是如何工作的?

当请求击中您的网站时,Skimpy会扫描您的site/content目录中的所有文件,将它们转换为Doctrine实体,并将它们推入SQLite数据库。如果您不想关注数据库,则不必关注。Skimpy将内容转换为数据库记录的原因是为了利用Doctrine和SQL的一般功能。Skimpy中的数据库组件更像是一个缓存。您永远不应该直接编辑数据库,因为Skimpy将在下一次网站收到请求时自动清除您所做的任何更改。

Skimpy 使用 Doctrine 和数据库,原因有几个。主要原因是数据库可以让你在更改内容或保存文件时,不需要每次都“生成”实际的网站,或者运行一个“监控”命令来自动生成更改。使用“生成方式”的做法是毫无意义的。生成会增加创建网站或博客的复杂性。撰写和添加内容应该是无意识的,这正是 Skimpy 旨在实现的。

许可证

Skimpy CMS 是开源软件,遵循 MIT 许可证