TanzCMS开源CMS系统

代码示例合集

最小模块、插件、模板标签、后台页面、API 和回调示例

更新:2026-05-31 03:20:44 浏览:3

代码示例合集

本页收集最小写法。示例用于说明结构,正式业务应补齐权限、验证、日志、缓存和测试。

一、最小模块 Provider

class DemoServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        $base = dirname(__DIR__);

        if (! $this->app->routesAreCached()) {
            Route::middleware('web')->group($base.'/routes/web.php');
            Route::middleware('web')->group($base.'/routes/admin.php');
        }

        $this->loadViewsFrom($base.'/resources/views', 'module-demo');
        $this->loadMigrationsFrom($base.'/database/migrations');
    }
}

二、最小插件 Provider

class DemoPluginServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        $base = dirname(__DIR__);

        if (! $this->app->routesAreCached()) {
            Route::middleware('web')->group($base.'/routes/web.php');
            Route::middleware('web')->group($base.'/routes/admin.php');
        }
    }
}

三、后台保存接口

public function store(Request $request): JsonResponse
{
    $data = $request->validate([
        'title' => ['required', 'string', 'max:120'],
        'status' => ['nullable', 'boolean'],
    ]);

    $id = DB::transaction(function () use ($data): int {
        return (int) DB::table('demo_items')->insertGetId([
            'title' => $data['title'],
            'status' => (int) ($data['status'] ?? 1),
            'created_at' => now(),
            'updated_at' => now(),
        ]);
    });

    return response()->json([
        'message' => '保存成功',
        'data' => ['id' => $id],
    ]);
}

四、列表查询

$query = DB::table('demo_items')->select(['id', 'title', 'status', 'sort', 'updated_at']);

if ($keyword !== '') {
    $query->where('title', 'like', '%'.$keyword.'%');
}

$page = $query->orderBy('sort')->orderByDesc('id')->paginate(20);

五、模板标签调用

{demo_items return=item num=10}
  <a href="{$item.url}">{$item.title}</a>
{empty}
  <p>暂无数据</p>
{/empty}
{/demo_items}

六、资源引用

<link rel="stylesheet" href="{module_asset code=demo path='style.css' version=mtime}">
<script src="{plugin_asset code=demo_plugin path='admin.js' version=mtime}"></script>

七、API 响应

return response()->json([
    'code' => 0,
    'message' => 'ok',
    'data' => $payload,
]);

八、回调幂等

DB::transaction(function () use ($event): void {
    $exists = DB::table('demo_callback_logs')->where('event_id', $event['id'])->exists();

    if ($exists) {
        return;
    }

    DB::table('demo_callback_logs')->insert([
        'event_id' => $event['id'],
        'created_at' => now(),
    ]);

    // 执行业务状态变更。
});

九、主题模板片段

{template "header.html"}

<main class="site-main">
  <h1>{$category.name}</h1>
  {content catid=$category.id num=10 page=$query.page}
    <article>
      <h2><a href="{$t.url}">{$t.title}</a></h2>
      <p>{$t.description}</p>
    </article>
  {/content}
  {html $pages}
</main>

{template "footer.html"}