boke0/boke0ick_mecha

使用微框架制作的舒适CMS。

安装: 7

依赖: 0

建议者: 0

安全: 0

星级: 2

观察者: 2

分支: 1

开放问题: 0

类型:项目

2.2.2 2020-03-21 00:18 UTC

This package is auto-updated.

Last update: 2024-09-21 21:04:22 UTC


README

这是一个以现代API实现为目标的PHP CMS。可以使用用于Twig的HTML(与Python的Jinja具有相同语法的模板引擎)来创建主题,并可以使用Markdown来编写文章。

通过设置配置文件,可以以作者的方式对每个页面的主题和路由进行详细设置。

安装方法

使用Composer

# hogeディレクトリにプロジェクトを作成します
composer create-project boke0/boke0ick_mecha hoge

使用Git和Composer

git clone https://github.com/boke0/boke0ick_mecha.git
cd boke0ick_mecha
composer install

目录结构

.
├── Dockerfile
├── README.md
├── composer.json
├── composer.lock
├── contents ...記事のMarkdownや設定ファイルを置く場所
├── default.conf
├── docker-compose.yml
├── plugins ...プラグインをインストールする場所
├── public ...公開ディレクトリ
├── src ...本体ソースコード
├── static ...テーマに依存しない素材などを置く場所
├── themes ...テーマをインストールする場所
└── vendor

网站的设置结构

URL设计在contents/struct.json中描述。

[
    {
        "theme":"default",
        "routes":[
            {
                "path":"/",
                "type":"index"
            },
            {
                "path":"/about",
                "type":"about"
            }
        ]
    },
    {
        "theme":"hoge",
        "routes":[
            {
                "path":"/article/:id",
                "type":"article"
            },
            {
                "path":"/news/:id",
                "rule":"/n/files/:id"
                "type":"article"
            }
        ]
    }

]

在上述设置中,路由如下所示

对于示例,基本上使用与URL相同的规则来引用文章文件。如果需要应用异常规则,请指定rule指令。

如果contents中的引用目标是目录,则加载该目录的__index.md。

文章的发表

请用Markdown来描述文章。

此时,可以编写YAML格式的FrontMatter,并设置元信息,因为Hugo等也支持。

---
title: タイトルhogehoge
date: 2020/1/24
---
こんちは

主题的安装

将目录复制到themes/目录。

插件安装

将插件目录复制到plugins/目录。此时,请确保__construct.php放置在plugins/<插件名>/__construct.php的路径上。

主题制作

可以在themes/目录内创建目录,并在其中放置twig的HTML模板文件来创建主题。

主题发布

如果想要公开主题的源代码,建议使用Git来管理主题目录。这样,用户就可以通过clone themes/目录下的存储库来开始使用。

如果想要在主题中使用自定义素材,可以在主题目录内放置素材,并指定以下URI。

/asset?theme=<テーマ名>&filename=<ディレクトリ内のパス>

插件开发

可以通过在plugins/目录内创建目录并在其中放置PHP文件来创建插件。

在插件目录内,至少需要放置__construct.php。该文件由Boke0\Mechanism\Plugins从主体调用,并据此设置插件的行为。

以下以默认安装的SamplePlugin为例进行说明。

<?php

namespace Boke0\Mechanism\Plugins\SamplePlugin;

use \Boke0\Mechanism\Api\Plugin;

$plugin=new Plugin();
$plugin->endpoint(SampleEndpoint::class);
$plugin->templateExtension(SampleTemplateExtension::class);

return $plugin;

插件的名空间应遵循Psr-4,为Boke0\Mechanism\Plugins<插件名>。

在此程序中创建一个继承自Boke0\Mechanism\Api\Plugin的类的对象,设置扩展功能并返回对象。

API使用

介绍由Boke0\Mechanism提供的API。初版中,

  • 创建自定义端点
  • 扩展模板引擎

两个功能被安装。

创建端点

可以设置在任意URL上执行特定类方法。

<?php

namespace Boke0\Mechanism\Plugins\SamplePlugin;
use \Boke0\Mechanism\Api\Endpoint;

/**
 * @path /sampleendpoint
 */
class SampleEndpoint extends Endpoint{
    public function handle($req,$args){
        $res=$this->createResponse();
        $body=$res->getBody();
        $body->write("Hello world!");
        return $res->withBody($body);
    }
}

创建端点时,请定义继承自Boke0\Mechanism\Api\Endpoint的类。

如下所示,在文档注释中设置路径。可以设置路径,也可以设置请求时的方法。

/**
 * @path /sampleendpoint/insert
 * @method POST
 */

类需要实现PSR-15中定义的RequestHandler接口。Endpoint类中定义了生成PSR-7兼容响应对象的Endpoint::createResponse($status_code,$reason);方法,因此可以调用它来返回响应。

还可以使用Endpoint::twig($filename,$placeholder,$status_code,$reason)方法来直接获取使用Twig绘制的模板响应。这里使用的Twig引用插件目录的tpl/目录。此外,可以通过调用csrf_field()函数来利用Boke0\Mechanism主体中应用的CSRF防护措施。

如果插件端点需要使用自定义素材,请在/assets目录内放置素材,并指定以下URI。

/asset?plugin=<プラグイン名>&filename=<assetsディレクトリ以下のパス>
<?php

namespace Boke0\Mechanism\Plugins\SamplePlugin;
use \Boke0\Mechanism\Api\Endpoint;

/**
 * @path /sampleendpoint
 */
class SampleEndpoint extends Endpoint{
    public function handle($req,$args){
        return $this->twig("sample.tpl.html");
    }
}

模板引用插件目录内的tpl/目录的文件。

扩展模板引擎

对于Boke0\Mechanism中渲染时使用的Twig,可以设置扩展功能(TwigExtension)。如果使用支持的方法,这里也可以应用。以下是一个模板引擎扩展的示例。

{{ sample() }}

执行

sample function this is

将显示为

<?php

namespace Boke0\Mechanism\Plugins\SamplePlugin;
use \Boke0\Mechanism\Api\TemplateExtension;

class SampleTemplateExtension extends TemplateExtension{
    public function getFunctions(){
        return [
            new \Twig\TwigFunction("sample",function(){
                echo "sample function this is";
            })
        ];
    }
}

使用Twig扩展时,请定义继承自Boke0\Mechanism\Api\TemplateExtension的类的类。

插件发布

如果想要公开主题的源代码,建议使用Git来管理,就像主题一样。