8fold/php-amos

不是一个内容管理系统。

维护者

详细信息

github.com/8fold/php-amos

源代码

问题

资助包维护!
joshbruce
8fold

0.11.0 2024-05-19 13:17 UTC

README

该项目是一个集合,包含了用于创建具有最少依赖和意见的基于PHP的扁平文件网站的模式和示例代码。模式比实现更重要。

本文件中的关键字“必须”、“禁止”、“要求”、“应该”、“不应该”、“建议”、“推荐”、“可能”和“可选”应按RFC 2119中所述进行解释。

  • 实现应优先考虑分离元数据、内容、渲染和逻辑。
    • 元数据应优先考虑JSON而非YAML。
    • 内容应优先考虑Markdown而非HTML。
    • 渲染应优先考虑系统语言而非HTML。
    • 逻辑应优先考虑低级解决方案而非全面的框架。
  • 实现应优先考虑本地作用域而非全局;开发人员和内容创建者不应需要修改多个位置来完成事情。
  • 实现应优先考虑利用服务器本身而非替换服务器。 (此实现使用Apache,但其他服务器堆栈也存在类似功能。)
  • 实现应优先考虑简单而非复杂;请参阅Pragmatic Dave的剃刀
  • 路径不应使用尾随斜杠。
  • 网站URL不应显示站点文件名(如index)或扩展名(如.html、.php等),并应使用尾随斜杠来模仿静态站点(如https://domain.com/page/,而不是https://domain.com/page)。

安装

  1. 克隆仓库。
  2. 添加到项目,或者复制、粘贴并修改你自己的类中的代码。

文件夹和文件(基础)

每个网站可以有三个区域

  1. 内容,
  2. 站点,和
  3. 源。

每个站点应有一个自己的内容文件夹。每个站点应有两个文件夹;一个用于本地开发,另一个用于指向域名。每个站点可以只有一个源文件夹。一个基线Amos项目可能看起来像这样

.
├── content-root/
│   └── public
├── site-root/
│   ├── local
│   └── public
└── src

虽然不是必需的,但我们建议使用content-作为内容文件夹的前缀,使用site-作为站点文件夹的前缀,并使用你首选的堆栈的命名约定来命名存储源代码的文件夹。(在PHP中这是src。)

内容目录

通常是变化最频繁的。

每个网站页面都在内容目录中有详细信息。每个页面可以有一个元数据文件、一个内容文件,以及该页面的文件夹中包含的任何其他相关内容。

.
├── content-root/
│   └── public/
│       ├── content.md
│       ├── meta.json
│       └── sub-page/
│           ├── content.md
│           └── meta.json
└── ...

注意:内容文件夹可能不在站点和源文件夹相同的级别。此外,可能有多个。

content.md是一个纯文本文件,可以独立于网站和渲染运行。meta.json文件包含有关内容本身的元数据,不应依赖于网站实现。

源目录

通常比内容更改得更少。

消费、处理和渲染内容的代码在这里。我们建议将数据处理代码与视图代码分开;促进MVCMVVMMVP设计模式。

站点目录

很少更改。

该区域是服务器的入口,允许用户配置环境。它也是我们在进行非内容更改时倾向于从询问两个问题开始的地方

  1. 这是服务器可以为我们做的事情吗?
  2. 如果是的话,我们希望它这样做吗?

例如,Apache服务器有一个名为.htaccess的文件,我们可以使用它来与服务器通信。我们希望将用户从一个URL重定向到另一个URL。我们可以

  1. 编写源代码,查找meta.json文件中的redirect键,其值是重定向的目标URL。编写响应以正确返回300响应代码,更改浏览器中的header位置值。随着重定向页面数量的增加,这可能会变得难以更改;如果我们决定更改,例如键的名称,我们需要编写更多的源代码来允许两者,或者可能更新大量文件。
  2. 使用已经实现此功能的框架,从而增加依赖项。这可能会在未来变得困难,因为框架开发者可能会以需要我们编写更多源代码或修改多个文件来更新到框架最新版本的方式修改某些内容。
  3. .htaccess文件中添加一行。

此实现

必须尽可能保持功能。使用带有static方法的final abstract类来完成此操作,同时利用PSR-4自动加载。

其他

{链接、描述、许可、版本和治理}