Skip to content

0) Output mong muốn

  • 1 homepage (hero + section + list + CTA)
  • 1 article page (page properties + content components)
  • header/footer dùng locked structure (thường qua Experience Fragment)

1) Core Components: danh sách “hay dùng”

ComponentDùng để
Titleheading H1–H6 (+ link)
Textrich text
Imageresponsive image + lazy loading
ButtonCTA link
Teasercard: image + title + desc + CTA
Listlist child pages / tagged pages / search
Navigationmenu tree
Language Navigationswitch locale
Breadcrumbbreadcrumbs
Containerresponsive grid / layout container
Tabs / Accordion / CarouselUI layout
Experience Fragmentreuse blocks (header/footer/sections)
Content Fragmentrender CF
Embedembed external (YouTube, …)
Separatordivider

Notes:

  • Dự án archetype thường tạo proxy components cho nhóm core components này.
  • Policy quyết định component nào xuất hiện trong component browser.

2) Page anatomy (pattern)

ZoneThường chứaTemplate mode
Headerlogo + nav + language nav (+ search)Structure (locked)
Mainresponsive grid (authors drag-drop)editable
Footerlinks + legal + socialStructure (locked)

Nguồn dữ liệu header/footer:

  • Experience Fragment (khuyến nghị) hoặc
  • page properties / config

3) Build Homepage (step-by-step)

3.1 Tạo page

  • Sites → <site><lang-root>
  • Create → Page
  • Template: landing/home template
  • Title: Home
  • Name: home

3.2 Add Hero (Teaser / custom Hero)

Checklist cấu hình:

  • [ ] Title: Welcome to My Site
  • [ ] Description: We build amazing digital experiences
  • [ ] Image: DAM
  • [ ] Link: trỏ article page
  • [ ] CTA label: Learn More

3.3 Add content sections (Container)

Trong main responsive grid:

  1. Container (section wrapper)
  2. Bên trong Container:
    • Title: Latest Articles
    • List:
      • Source: child pages dưới /content/<site>/<lang>/blog
      • Sort: by date
      • Limit: 3
    • Button: View All Articles → blog listing page

3.4 Layout mode (responsive)

Layout mode (ruler icon):

  • Desktop: 4 + 4 + 4
  • Tablet: 6 + 6
  • Phone: 12

4) Build Article Page

4.1 Tạo page

  • Sites → <site><lang-root>blog
  • Create page với template article
  • Title: Getting Started with AEM Components

4.2 Set page properties (quan trọng)

Page Information → Open Properties:

TabPropertyValue (ví dụ)
BasicTitleGetting Started with AEM Components
BasicSubtitleA guide for new AEM developers
BasicDescriptionLearn how to create your first AEM component…
BasicTagschọn tags liên quan
AdvancedFeatured Imagechọn DAM asset
Social Mediaog:title / og:descriptioncho share

4.3 Add content (trên page)

Order gợi ý:

  1. Title (thường map từ page title)
  2. Image (featured)
  3. Text (body)
  4. Accordion (FAQ)
  5. Teaser (related)

4.4 Preview + publish

  • Preview mode để check output
  • Publish Page → Publish instance

5) Page properties trong code (Sling Model)

Node storage:

  • page node: /content/<site>/<lang>/<page>
  • properties: /content/.../<page>/jcr:content

Snippet:

java
@Model(adaptables = SlingHttpServletRequest.class)
public class ArticlePageModel {

  @ScriptVariable
  private Page currentPage;

  public String getTitle() { return currentPage.getTitle(); }

  public String getDescription() { return currentPage.getDescription(); }

  public Calendar getLastModified() { return currentPage.getLastModified(); }

  public String getFeaturedImage() {
    ValueMap props = currentPage.getProperties();
    return props.get("featuredImage", String.class);
  }

  public String[] getTags() {
    Tag[] tags = currentPage.getTags();
    return Arrays.stream(tags).map(Tag::getTitle).toArray(String[]::new);
  }
}

TagManager (khi cần resolve theo locale / xử lý tag id):

java
public String getLocalizedTagTitle(String tagId, Locale locale) {
  TagManager tagManager = resource.getResourceResolver().adaptTo(TagManager.class);
  Tag tag = tagManager.resolve(tagId);
  return tag != null ? tag.getTitle(locale) : tagId;
}

6) Troubleshooting (ráp page)

SymptomCheckFix
Component không thấy trong side panelpolicy allowed componentsenable trong container policy
Component chỉ placeholderdialog values + model defaultsset required fields / @Default an toàn
Header/footer mất ở vài pagetemplate structure + locked itemsreapply structure; verify XF path
Navigation thiếu itemnav root/depth + hide-in-navchỉnh config + page properties
Author vs Publish khácpublish content + clientlibs + dispatcher cachepublish dependencies + invalidate caches

7) Navigation (core component)

Site tree mẫu:

text
/content/<site>/<lang>
├── home
├── about
├── services
│   ├── consulting
│   └── development
├── blog
│   ├── article-1
│   └── article-2
└── contact

Config gợi ý:

PropertyValueEffect
Navigation Root/content/<site>/<lang>start point
Exclude Root Level1skip root
Structure Depth2show 2 levels
Collect all child pagesNochỉ show navigable

Page opt-out: Hide in Navigation.


8.1 Create header XF

  • Experience Fragments console
  • Create dưới /content/experience-fragments/<site>/<lang>/header
  • Add: Logo + Navigation + Language Navigation
  • Publish XF

8.2 Include vào template structure

  • Template editor → Structure
  • Add Experience Fragment component (locked)
  • Point tới XF header

Kết quả:

  • mọi page dùng template → dùng chung header
  • update XF → reflect toàn site (sau publish + cache invalidation nếu có)

9) Authoring tips (cho editor)

9.1 Drag/drop

  • drag từ side panel → page
  • reorder trong container
  • toolbar: edit/config/copy/cut/delete

9.2 Quick edit vs Dialog

  • Quick edit: inline text
  • Dialog: wrench icon / double click

9.3 Modes

ModeHiển thị
Editchrome + placeholders
Layoutresize columns
Previewvisitor view
Targetingpersonalization
Timewarpview at time

Liên kết nội bộ

AEM 6.5 On-Premise Developer Notes