Files
cms-SiteForge/themes/trade-pro/pages/standard.html
T
浅念 87ce104d7e feat: port cms standard layout into trade-pro
Task 10h (last regular layout). Design sources: cms applications.astro +
support.astro (generic content pages). Common form = PageHero (eyebrow/h1/
lead + in-page anchor button + cover bg) then content area.

- The structured sections in both sources (application card grid,
  FeatureGrid bands, anchor nav strip, doc cards, FAQ) are HESU dictionary
  content, not layout - not ported (fake data across sites). The platform
  standard page content is the rich-text body: section structure is carried
  by the body's own h2/img/tables (10g decision), typeset via the 10d
  sf-tp-article-body layer double-attached with sf-tp-standard-body.
- Empty body hides the body section and the hero anchor button (cms
  isRichAbout ternary); empty cover/summary hide bg/lead independently.
- Breadcrumb Home > title per platform page-level convention (10e/10f);
  support's trailing Cta stays covered by pro.html pro-end-cta.
- Zero new CSS rules: applications.astro itself ships no scoped styles and
  the template is pure composition (10c hero / 10b breadcrumb / 10a
  section-head / theme.css baselines); decision documented in pro.css.
- Test test_trade_pro_standard_layout_structure: build-flow page entry
  asserts hero/body containers; bootstrap /services/ page (meta.
  page_template='standard') verifies the template is not route-bound
  (explicit meta beats route-prefix inference) and the empty-data hiding.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-23 17:25:21 +08:00

59 lines
3.8 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{# trade-pro standard — cms 通用内容页设计移植(Task 10h,最后一个常规布局)。
standard 是所有非专属 kind 页面的兜底模板(应用/支持/隐私政策/自定义页等),
设计源 = cms 的两个通用内容页 D:/project/cms/runtimes/astro-site-runtime/
src/pages/[locale]/applications.astro 与 support.astro(像素基准
dist/hesupipe/en/applications/ 与 /en/support/)。
两页共性模板形态(standard 的设计本质):
PageHero(眉题 + h1 + 导语 + 页内锚点按钮 + 封面底图)→ 内容区。
与 cms 的结构决策:
1. 内容区的「布局 vs 内容」判定:applications 的应用卡网格(cols-3)、
FeatureGrid 优势带、projects 卡带,与 support 的锚点导航条 / 文档卡
(含 PDF 体积等假数据位)/ FAQ 折叠,全是 HESU 词典驱动的站点内容
而非布局——跨站即假数据,不移植。平台 standard 页内容 = 单一富文本
body:小节结构由正文自身的 h2/h3/图片/表格承担(10g 案例详情同
决策),排版层双挂 sf-tp-article-body(10d;cms about-body 与全站
rich-body 同构)。正文区块头沿用 cms about-body 的 SectionHead
title={heroTitle} 形态(眉题 + 页题 h2 复述,10e 同款)。
2. body 为空 → 正文区块整段隐藏(cms isRichAbout ? ... : null 同款),
hero 锚点按钮随之隐藏(无正文即无锚点目标,不留死锚点);封面/摘要
为空则底图/导语各自隐藏,页面退化为纯 hero 最小形态。
3. 两页 PageHero 均无面包屑(crumbs 仅 cms 详情页经 slot 传入),但平台
页面级模板约定补面包屑 Home › 标题(10e/10f 同款平台化决策;cms
landing 页的锚点导航条不移植——sanitize 剥离正文 id,无锚点目标)。
4. hero 按钮是 cms PageHero 的固有形态(applications「Explore Products
→ #main」/ support「Contact Technical Support → #technical」),
平台锚到正文区块 #tp-standard-body(构建器豁免 # 锚点链接),
文案取通用词(页面专属词典文案不移植)。
5. support 页尾的 Cta 横幅由 pro.html 的 .pro-end-cta 全局承担
(10b/10d/10g 同决策)。applications.astro 本身零 scoped CSS——
全部由共享组件构成,本模板同构复用(10c hero / 10b 面包屑 / 10a
section-head / 10d 排版层),无新增样式规则。 #}
<section class="sf-tp-page-hero sf-tp-standard-hero">
{% if safe_image(page.cover) %}<img class="sf-tp-page-hero-bg" src="{{ safe_image(page.cover) }}" alt="" width="1600" height="900" fetchpriority="high" decoding="async">{% endif %}
<div class="sf-tp-page-hero-overlay" aria-hidden="true"></div>
<div class="wrap">
<nav class="sf-tp-breadcrumb" aria-label="Breadcrumb" data-reveal>
<a href="/">Home</a><span class="sf-tp-breadcrumb-current">{{ page.title }}</span>
</nav>
<div class="sf-tp-page-hero-copy" data-reveal style="--reveal-i: 1">
<span class="eyebrow">OVERVIEW</span>
<h1>{{ page.title }}</h1>
{% if page.summary %}<p class="sf-tp-page-hero-lead">{{ page.summary }}</p>{% endif %}
{% if content %}<a class="sf-tp-btn" href="#tp-standard-body">Explore this page {{ icon('arrow-right') }}</a>{% endif %}
</div>
</div>
</section>
{% if content %}
<section class="section sf-tp-standard-body-section" id="tp-standard-body">
<div class="wrap">
<div class="sf-tp-section-head" data-reveal>
<div>
<span class="eyebrow">OVERVIEW</span>
<h2>{{ page.title }}</h2>
</div>
</div>
<div class="sf-tp-standard-body sf-tp-article-body" data-reveal style="--reveal-i: 1">{{ body_copy(content, page) }}</div>
</div>
</section>
{% endif %}