ginger-tek/jerpy

小型、平面文件 PHP CMS

4.0.0 2024-09-24 23:48 UTC

This package is auto-updated.

Last update: 2024-09-25 18:53:16 UTC


README

jerpy

小型 | 无依赖 | 平面文件

Jerpy是一个小型、无依赖、平面文件内容管理系统(CMS),专为控制、简洁而构建,易于安装、自定义和维护。

该系统尽可能精简和简化,因此建议直接通过文件管理,没有管理网页面板。

入门指南

Composer

Jerpy的配置非常简单。只需运行以下命令即可开始

composer create-project ginger-tek/jerpy <directory>

文件/文件夹结构

config.php

所有网站设置都在 config.php 文件中设置,包括时区、选定的布局、启用的插件和页面路由。

布局

layouts 目录存储布局模板,每个模板都有自己的 .php 文件。默认的全局主题在 config.php 中通过 $layout 属性设置。

🗀 layouts
  🗋 default.php
$layout = 'default';

资产

这是一个全局资产目录,您可以在其中组织CSS、JavaScript、字体和图像,并通过绝对URI在布局和页面中使用。

🗀 assets
  🗀 css
    🗋 styles.css
<head>
  ...
  <link href="/assets/css/styles.css" rel="stylesheet">
  ...
</head>

页面和路由

pages 目录存储网站的页面内容,并在 config.php 中为每个路由进行配置。

🗀 pages
  🗋 home.php
$routes = [
  '/' => 'pages/home.php'
];

您可以将路由定义为键,键为一个指向文件的字符串,或一个具有 page 键和其他选项的关联数组,以更改页面渲染方式。

要使用不同于默认的布局,设置 layout 选项

$routes = [
  '/about' => [
    'page' => 'pages/about.php',
    'layout' => 'layouts/layout2.php'
  ]
];

如果您不想使用任何布局,将 layout 选项设置为 false,这将仅通过自身渲染页面。

还可以设置其他附加的任意属性,用于元数据/SEO目的

$routes = [
  '/about' => [
    'page' => 'pages/about.php',
    'title' => 'About',
    'thumbnail' => '/assets/my_thumbnail.png'
  ]
];

然后您可以在布局中实现这些附加属性,例如用于社交媒体SEO标签。使用 @ 警告抑制语法,当某些路由未指定属性时使用

<head>
  ...
  <meta name="og:title" content="<?= $title ?>">
  <meta name="og:description" content="<?= @$description ?>">
  <meta name="og:image" content="<?= @$thumbnail ?>">
  ...
</head>

动态路由

您还可以指定非静态匹配路由的键字符串。使用 :param 语法动态匹配路由,并设置其参数为从传入的URI解析的值

$routes = [
  '/products/:id' => 'pages/product.php'
];
<p>ID: <?= $req->params->id ?></p>

模板

如今,PHP内置的模板功能对于大多数用户场景来说已经足够了。因此,只需像通常一样使用 includerequire 进行模板化,按需解析内容(请参阅下面的插件)。

全局变量

有几个全局变量您可以在布局或页面文件中始终引用: $req$page

插件

可以通过插件扩展或添加Jerpy的功能。插件不需要任何特定框架,也不遵循任何特定的设计模式。插件的要求是入口点是一个与插件文件夹同名的 .php 文件。从那里,您可以使用任何首选的工具和包管理器创建插件代码。

🗀 plugins
  🗀 myPlugin <-- plugin dir
    🗋 composer.json
    🗋 myPlugin.php <-- entrypoint (same as plugin dir)
    🗀 vendor
      🗋 someSupportingFile.php

插件全局加载,其顶级对象、函数和/或类可以从所有布局和页面中访问。

要添加插件,只需将插件的文件夹复制/上传到 plugins 目录。

要启用插件,将其文件夹名称添加到 config.php 中的 $plugins 数组。

下面是一个使用包装方法的Parsedown插件的示例

插件/md/md.php

<?php

require 'vendor/Parsedown.php';

function md(string $path): string
{
  return (new Parsedown)->text(file_get_contents($path));
}

config.php

$plugins = [
  'md'
];

页面/some-page.php

<?= md('path/to/markdown-file.md') ?>