插件开发

Hook 与自定义标签

更新于 2026-11-13 阅读 2 # Hook 机制 ## 自动注册 Hook 方法 入口类中方法名以 `Hook` 结尾会自动监听同名挂载点: 模板中输… Markdown

Hook 机制

自动注册 Hook 方法

入口类中方法名以 Hook 结尾会自动监听同名挂载点:

public function headHook(): string
{
    return '<link rel="stylesheet" href="/plugins/friendlink/assets/style.css">';
}

模板中输出:

{pycms:hook name="head" /}

手动注册

use Pycms\Hook;

public function register(): void
{
    Hook::add('theme.footer', [$this, 'footer']);
}

public function footer(): string
{
    return '<div class="friendlink">友情链接</div>';
}

自定义标签

插件可注册成对标签,返回数组供模板循环:

use Pycms\Taglib;

public function register(): void
{
    Taglib::register('friendlink', function (array $attrs): array {
        $limit = (int) ($attrs['num'] ?? 6);
        return \Pycms\Db::table('friendlink')
            ->where('status', 1)
            ->orderBy('sort')
            ->limit($limit)
            ->get();
    });
}

模板调用:

<div class="friendlinks">
    {pycms:friendlink num="6"}
        <a href="{$item.url}" target="_blank" rel="noopener">{$item.title}</a>
    {/pycms:friendlink}
</div>

自定义单标签

需要直接输出 HTML 时注册单标签:

Taglib::registerSingle('friendlink_form', function (array $attrs): string {
    return '<form method="post">...</form>';
});
{pycms:friendlink_form /}

发布到市场

  1. 开发者中心上传插件 zip,填写名称、简介、价格与功能标签。
  2. 平台审核通过后进入市场。
  3. 后续版本在「我的应用 → 版本」上传,系统自动生成增量补丁。
← 插件目录与 info.ini 已是最后一篇