SuperAPI AI 工具集

sfnext-page-designer

前端与建站

查看项目

更新于 10-16 06:04

技能介绍

用途

sfnext-page-designer 是 Storefront Next 中集成 Page Designer 的技能,用于构建商家可编辑的页面。Page Designer 是 Commerce Cloud 面向商家的可视化编辑器。在 Storefront Next 中,页面结构(区域、组件、属性)从 Shopper Experience API 获取,并通过组件注册表和 <Region> 组件渲染。

主要能力

该技能涵盖以下核心概念:

  • Page(页面):在路由 loader 中通过 fetchPageFromLoader(args, { pageId }) 获取。
  • Region(区域):使用 <Region page={...} regionId="..." /> 渲染的命名区域。
  • Component(组件):带有 typeId 和属性的内容块,注册在 @/lib/registry 中。
  • Registry(注册表):由 Vite 插件自动生成的静态注册表,请勿手动编辑。

哪些页面使用 Page Designer:首页(homepage)、分类/PLP、搜索、产品/PDP。不使用 Page Designer 的页面:购物车、结账、账户、认证。

使用方式

路由设置

在 Loader 中:

import { fetchPageFromLoader, collectComponentDataPromises } from '@/lib/page-designer';

export function loader(args: LoaderFunctionArgs) {
    const pagePromise = fetchPageFromLoader(args, { pageId: 'homepage' });
    const componentData = collectComponentDataPromises(args, pagePromise);

    return {
        page: pagePromise,
        componentData,
    };
}

在 Layout 中:

import { Region } from '@/components/region';

export default function HomePage({ loaderData: { page, componentData } }) {
    return (
        <div>
            <Region page={page} regionId="hero" componentData={componentData}
                fallbackElement={<HeroSkeleton />}
                errorElement={<RegionError />} />

            <Region page={page} regionId="content" componentData={componentData}
                fallbackElement={<ContentSkeleton />} />
        </div>
    );
}

组件设置

使用装饰器的元数据类:

import { Component, AttributeDefinition, RegionDefinition } from '@salesforce/storefront-next-runtime/design';

@Component('hero-banner', {
    name: 'Hero Banner',
    description: 'Full-width banner with image and CTA'
})
class HeroBannerMeta {
    @AttributeDefinition({ type: 'image' })
    image: string;

    @AttributeDefinition()
    headline: string;

    @AttributeDefinition({ type: 'url' })
    ctaUrl: string;

    @AttributeDefinition()
    ctaText: string;

    @AttributeDefinition({ type: 'boolean' })
    fullWidth: boolean;
}

React 组件:

export default function HeroBanner({ image, headline, ctaUrl, ctaText, fullWidth }) {
    return (
        <div className={cn('relative', fullWidth && 'w-full')}>
            <DynamicImage src={image} alt={headline} />
            <h1>{headline}</h1>
            {ctaUrl && <a href={ctaUrl}>{ctaText}</a>}
        </div>
    );
}

带服务端数据的组件

如果组件需要服务端数据(例如产品轮播):

// Export a loader for the component
export function loader({ componentData, context }) {
    const clients = createApiClients(context);
    return clients.shopperProducts.getProducts({
        params: { query: { ids: componentData.productIds } }
    }).then(({ data }) => data);
}

// Optional fallback during loading
export function fallback() {
    return <CarouselSkeleton />;
}

// Component receives data as prop
export default function ProductCarousel({ data, ...props }) {
    return <Carousel products={data.products} />;
}

设计模式

检测是否在 Page Designer 内运行:

import { isDesignModeActive, isPreviewModeActive } from '@salesforce/storefront-next-runtime/design/mode';

// In loaders
const isDesignMode = isDesignModeActive(request);
const isPreview = isPreviewModeActive(request);

// Root layout exposes pageDesignerMode in loader data
// 'EDIT' | 'PREVIEW' | undefined

MCP 工具

使用 B2C DX MCP 服务器工具进行 Page Designer 开发:

  • storefront_next_page_designer_decorator — 为组件添加装饰器(自动模式或交互模式)
  • storefront_next_generate_page_designer_metadata — 为 Business Manager 生成元数据 JSON
  • cartridge_deploy — 将 cartridge 部署到 Commerce Cloud

典型工作流

  1. 为组件添加装饰器(使用 storefront_next_page_designer_decorator 的 autoMode)
  2. 生成元数据 JSON(storefront_next_generate_page_designer_metadata)
  3. 部署 cartridge(cartridge_deploy)

适用场景

适用于在 Storefront Next 中构建商家可编辑的页面,包括首页、分类/PLP、搜索、产品/PDP 等页面。

限制与最佳实践

  • 保持 loader 同步 — 返回 promise 以支持流式传输。
  • 使用注册表 — 用正确的 typeId 注册组件。
  • 处理设计模式 — 当 pageDesignerMode 为 'EDIT' 或 'PREVIEW' 时调整 UI。
  • 更改后重新构建 — 静态注册表在构建时重新生成。
  • 使用 MCP 工具 — 比手写装饰器和元数据更快。

相关技能:storefront-next:sfnext-data-fetching(Page Designer 路由的 Loader 模式)、storefront-next:sfnext-components(组件开发模式)、b2c:b2c-page-designer(经典 ISML Page Designer,非 Storefront Next)。

参考文档:Decorator Patterns Reference(所有装饰器类型和选项)、Component Registry Reference(注册表设置和组件 loader)。