메인 콘텐츠로 건너뛰기
페이지 레이아웃은 레코드의 상세 페이지가 어떻게 구성되는지를 제어합니다. 어떤 탭이 표시되고, 그 탭 안에 어떤 위젯이 포함되는지를 결정합니다. 소유한 객체에 대한 레이아웃을 선언하려면 definePageLayout()을 사용하고, 이미 존재하는 레이아웃(사용자 소유 또는 표준 Twenty 레이아웃)에 단일 탭을 추가하려면 definePageLayoutTab()을 사용합니다.

definePageLayout

전체 상세 페이지를 소유할 때 사용합니다. 일반적으로 직접 정의한 사용자 지정 객체에 해당합니다.
src/page-layouts/example-record-page-layout.ts

핵심 요점

  • type은 일반적으로 특정 객체의 상세 보기를 사용자 지정하기 위해 ‘RECORD_PAGE’입니다.
  • objectUniversalIdentifier는 이 레이아웃이 적용되는 객체를 지정합니다.
  • tabtitle, position, layoutMode(CANVAS는 자유 형식 레이아웃)를 통해 페이지의 섹션을 정의합니다.
  • 탭 내부의 각 widgetfront component, 관계 목록 또는 기타 기본 제공 위젯 타입을 렌더링할 수 있습니다.
  • 탭의 position은 탭의 순서를 제어합니다. 값을 더 높게 설정하면(예: 50) 기본 탭 뒤에 사용자 지정 탭을 배치할 수 있습니다.

definePageLayoutTab

기존 레이아웃에 탭만 추가하려는 경우에 사용합니다. 예를 들어, 표준 Company 페이지에 분석 탭을 추가하거나, 자신이 소유한 객체의 레이아웃에 AI 요약 탭을 연결하는 경우입니다.
src/page-layouts/example-extra-tab.ts

핵심 요점

  • pageLayoutUniversalIdentifier필수이며, 설치 시점에 이미 존재하는 페이지 레이아웃을 가리켜야 합니다. 이는 표준 Twenty 레이아웃이거나, 사용자의 앱에서 정의한 레이아웃일 수 있습니다. 현재는 설치된 다른 앱이 소유한 레이아웃에 대한 크로스 앱 참조는 지원되지 않습니다. 상위 레이아웃이 없으면, 명확한 유효성 검사 오류와 함께 설치가 실패합니다.
  • 표준 Twenty 레이아웃의 경우 twenty-sdk/define에서 식별자를 가져옵니다:
    각 레이아웃 항목은 tabs와 해당 widgets도 노출하므로, 모든 수준을 참조할 수 있습니다:
    짧은 별칭인 STANDARD_PAGE_LAYOUT도 사용할 수 있습니다:
  • widgets는 이 탭에만 범위가 국한됩니다. definePageLayout에 인라인으로 정의된 위젯과 완전히 동일한 방식으로 front components, 뷰 등을 참조합니다.
  • position은 대상 레이아웃의 기존 탭과의 순서를 제어합니다. 기본 제공 탭을 기준으로 원하는 위치에 탭이 놓이도록 값을 선택하세요.
  • 기존 레이아웃에만 추가하려는 경우에는 definePageLayout 대신 이것을 사용하세요. 전체 레이아웃을 소유하는 경우에는 definePageLayout을 사용하세요.