profound-logoProfound CMS
⌘K
Admin
Theme
Tài liệuHướng dẫnBlogTriết học
Tài liệuHướng dẫnBlogTriết học

Kết hợp

Định tuyến tham sốCác loại ComponentSetup server sent events (SSE) content refetchThiết lập proxy bảng điều khiển quản trịCEL Scripting in Template BuilderProject ScaffoldingThư viện phương tiện

Không đầu

Bắt đầu nhanhJson và claude codeComponent Zod Pull

REST API

Tổng quan REST APIgetKết nối API trang webgetGET /routesgetLấy tuyếngetGET /blocksgetLấy các khối kèm bộ đệm CELgetGET /blocks/generatedgetGET /componentsgetLấy tên thành phầngetLấy tên lược đồ tập dữ liệugetGET /content-changes (SSE)patchCập nhật tên lược đồ tập dữ liệupostPOST /translationpatchPATCH /translationsgetGET /usagepostPOST /csvpatchPATCH /csv
All Systems Operational
Powered Byprofound-logo
Theme

Bắt đầu nhanh

Một bài viết về các lược đồ

Tạo Schema Zod an toàn kiểu

Tính năng này cho phép bạn lấy mô tả thành phần của mình dưới dạng schema Zod an toàn kiểu, cung cấp:

  • Xác thực schema ưu tiên TypeScript
  • Suy luận kiểu tĩnh

Tìm hiểu thêm: https://zod.dev

Thiết lập

Để lấy schema Zod của bạn, bạn sẽ:

  1. Tải các phụ thuộc cần thiết
  2. Tạo một script sử dụng các tiện ích từ cms-renderer

Cấu trúc dự án

apps/
  web/
    app/
      page.tsx
    scripts/
      generated-schema.ts   # file script

Tập lệnh: generated-schema.ts

import { fetchAllCustomSchemaFields, saveZodSchemaCode } from 'cms-renderer/lib/custom-schemas';
import { cmsConfig } from '../lib/cms-config';

async function main() {
  const { cmsUrl, websiteId, apiKey } = cmsConfig;

  if (!cmsUrl) {
    throw new Error(
      '[generate-schemas] NEXT_PUBLIC_CMS_API_URL chưa được thiết lập. Thiết lập nó trong môi trường của bạn hoặc tệp .env.'
    );
  }

  if (!websiteId) {
    throw new Error(
      '[generate-schemas] CMS_WEBSITE_ID chưa được thiết lập. Thiết lập nó trong môi trường của bạn hoặc tệp .env.'
    );
  }

  if (!apiKey) {
    throw new Error(
      '[generate-schemas] PROFOUND_API_KEY chưa được thiết lập. Thiết lập nó trong môi trường của bạn hoặc tệp .env.'
    );
  }

  const schemas = await fetchAllCustomSchemaFields({ cmsUrl, websiteId, apiKey });

  if (schemas.length === 0) {
    throw new Error(
      '[generate-schemas] Không có thành phần nào được trả về từ API. Kiểm tra rằng PROFOUND_API_KEY hợp lệ và trỏ đến đúng website.'
    );
  }

  console.log(
    `[generate-schemas] Tìm thấy ${schemas.length} thành phần: ${schemas.map((s) => s.name).join(', ')}`
  );

  await saveZodSchemaCode(schemas, './generated/cms-schemas.ts');

  console.log('[generate-schemas] Hoàn tất.');
}

main().catch((err) => {
  console.error('[generate-schemas] Thất bại:', err);
  process.exit(1);
});

Ví dụ cấu hình CMS

export const cmsConfig = {
  cmsUrl: process.env.NEXT_PUBLIC_CMS_API_URL,
  apiKey: process.env.CMS_API_KEY,
  websiteId: '...',
};

Cấu hình package.json

Lưu ý: Nếu bạn không có tsconfig.json, hãy bỏ cờ --tsconfig.

{
  "name": "web",
  "version": "0.1.0",
  "type": "module",
  "private": true,
  "scripts": {
    "generate-schemas": "tsx --tsconfig tsconfig.json scripts/generate-schemas.ts",
    "...": "..."
  },
  "dependencies": {
    "cms-renderer": "0.3.1",
    "zod": "^4.3.6",
    "...": "..."
  },
  "devDependencies": {
    "tsx": "^4.21.0",
    "object-hash": "^3.0.0",
    "...": "..."
  }
}

Chạy tập lệnh

bun run generate-schemas

Ví dụ đầu ra:

tsx --tsconfig tsconfig.json scripts/generate-schemas.ts
[generate-schemas] Tìm thấy 3 thành phần: post, categories, header
[generate-schemas] Hoàn tất.

Cấu trúc dự án đã cập nhật

apps/
  web/
    app/
      page.tsx
    scripts/
      generated-schema.ts
    generated/
      cms-schemas.ts   # schema Zod được tạo

Sử dụng trong page.tsx

import type { PetFoodPost, SiteConfig } from '@/generated/cms-schemas';
import { petFoodPostSchema } from '@/generated/cms-schemas';

// Dùng cho việc phân tích an toàn kiểu
petFoodPostSchema.parse(obj);

Ghi chú

  • Kiểm tra tệp đã tạo để hiểu cấu trúc thành phần của bạn
  • Chạy lại script bất cứ khi nào cấu trúc thành phần của bạn thay đổi:
bun run generate-schemas
  • Bạn có thể tích hợp điều này vào quy trình dev hoặc build của mình
  • Cập nhật thành phần thông qua bảng điều khiển quản trị, sau đó tạo lại cục bộ
Continue Reading
NextJson và claude code›