Bubble에서 내비게이션 그룹을 재사용 요소로 만들기

여러 페이지에 똑같이 들어가는 내비게이션을 한 번만 만들어 두고 모든 페이지에서 함께 쓰는 방법을, 세 페이지짜리 예제로 따라 해 봅니다.

이 문서를 마치면 다음을 할 수 있습니다

  • 페이지에 있는 요소를 재사용 요소(Reusable element)로 변환합니다.
  • 재사용 요소를 여러 페이지에 배치합니다.
  • 정의를 한 번 고쳐서 모든 페이지에 반영되는 것을 확인합니다.
  • 현재 보고 있는 페이지에 해당하는 메뉴를 강조합니다.

준비물

  • index, weather, map 세 페이지가 있는 Bubble 웹 앱 (W04에 만든 앱)
  • index 페이지 맨 위에 놓인 내비게이션 그룹 (사이트 제목 1개와 메뉴 링크 3개)

재사용 요소의 쓸모

내비게이션을 복사해서 세 페이지에 붙여 넣으면 처음에는 빠릅니다. 그러나 메뉴 이름 하나를 바꾸려면 세 페이지를 모두 열어 세 번 고쳐야 하고, 한 곳이라도 빠뜨리면 페이지마다 내비게이션이 달라집니다. 페이지가 열 개로 늘어나면 문제도 열 배가 됩니다.

재사용 요소는 이 문제를 해결합니다. 한 번 만들어 두면 앱의 어느 페이지에든 배치할 수 있고, 원본을 고치면 배치된 모든 곳이 함께 바뀝니다.

재사용 요소는 두 부분으로 이루어집니다.

정의(definition)

재사용 요소의 원본입니다. 여기서 고친 내용은 앱 전체의 모든 인스턴스에 적용됩니다.

인스턴스(instance)

페이지에 배치한 사본입니다. 정의의 디자인과 동작을 그대로 따릅니다.

예제의 완성 모습

이 예제에서는 재사용 요소 RE_nav 하나를 만들어 세 페이지에 배치합니다.

이름 앞의 RE_는 재사용 요소임을 한눈에 알아보기 위한 관례일 뿐 필수는 아닙니다. 다만 한 가지 규칙을 정해 끝까지 지키는 편이 좋습니다.

RE_nav의 내부 구조

RE_nav

가로 배치(Row), 양 끝 정렬(Space between)

Text 사이트 제목

"방문자 맞춤 정보"

Group Menu — 가로 배치(Row)

  • Link 홈 → index 페이지
  • Link 날씨 → weather 페이지
  • Link 지도 → map 페이지

방법 B — 처음부터 재사용 요소로 만들기

페이지들을 모두 만들기 전에 공통된 부분을 미리 준비하고 싶을 때 쓰는 방법입니다.

01

Reusable web element 선택

페이지 내비게이터에서 New를 누르고 Reusable web element를 선택합니다.

02

이름 및 유형 설정

이름을 RE_nav로 입력하고, 요소 유형(Type of element)은 Group으로 둡니다.

03

레이아웃 지정

최상위 요소인 RE_nav의 컨테이너 레이아웃을 Row로, 정렬을 Space between으로 지정합니다.

04

Text 및 Group Menu 추가

Text 요소를 추가하고 "방문자 맞춤 정보"라고 입력합니다. Group을 추가하여 이름을 Group Menu로 바꾸고 레이아웃을 Row로 지정합니다.

05

Link 요소 세 개 추가

Group Menu 안에 Link 요소 세 개를 넣고, 표시 글자를 각각 홈·날씨·지도로 입력합니다. 각 Link의 이동 대상(Destination)을 index, weather, map으로 지정합니다.

요소 유형은 만들 때 정합니다

이 예제에서는 기본값인 Group을 씁니다. Bubble 공식 문서도 헤더와 푸터에는 Group 유형을 권장합니다.

방법 A — 이미 만든 요소를 재사용 요소로 변환

페이지에 내비게이션 그룹을 이미 만들어 두었을 때 쓰는 방법입니다.

1

index 페이지를 엽니다

2

내비게이션 그룹 전체를 선택합니다

캔버스에서 클릭하면 안쪽의 글자나 링크가 선택되기 쉬우므로, 요소 트리(Element tree)에서 그룹 이름을 클릭하는 편이 정확합니다.

3

Convert to a reusable element를 선택합니다

그룹을 마우스 오른쪽 단추로 클릭하고 선택합니다.

4

이름을 RE_nav로 정합니다

재사용 요소 목록에 RE_nav가 생겼는지 확인합니다.

한 걸음 더 — 인스턴스마다 다른 값을 전달합니다

재사용 요소에는 사용자 정의 속성(custom property)을 추가할 수 있습니다. 속성을 쓰면 구조는 공유하면서도 인스턴스마다 다른 내용을 보여 줄 수 있습니다.

추가할 수 있는 속성의 종류는 세 가지입니다

Dynamic value

글자, 숫자, 날짜 같은 기본 유형이나 직접 만든 데이터 유형의 값

Color picker

색상 값 또는 저장해 둔 색상 변수

Checkbox

예/아니요 값

예: 페이지마다 다른 제목을 표시합니다

1

속성 추가

RE_nav의 정의를 열고 site_title이라는 이름의 글자(text) 유형 속성을 추가합니다.

2

동적 데이터로 연결

사이트 제목 Text의 내용을 고정된 글자 대신 동적 데이터로 바꾸어, 재사용 요소의 site_title 속성을 참조하게 합니다.

3

인스턴스마다 값 입력

각 페이지로 가서 RE_nav 인스턴스를 선택하고, 속성 편집기에서 site_title 값을 페이지마다 다르게 입력합니다.

한 번 고쳐서 모든 페이지에 반영

재사용 요소를 쓰는 이유를 직접 확인하는 단계입니다.

1

정의 편집 화면 열기

페이지 내비게이터에서 RE_nav를 열어 정의 편집 화면으로 들어갑니다.

2

눈에 띄는 변경 적용

배경색을 바꾸거나, 사이트 제목 글자를 굵게 합니다.

3

세 페이지 미리 보기

index, weather, map 페이지를 차례로 미리 보기 합니다.

이 결과 세 페이지 모두 같은 변경이 반영되어 있어야 합니다. 정의에서 고친 내용은 앱 전체의 모든 인스턴스에 즉시 적용됩니다.

각 페이지에 배치

1

index 페이지를 엽니다

방법 A로 만든 경우, 남아 있는 원본 내비게이션 그룹을 삭제합니다.

2

RE_nav를 끌어다 놓습니다

요소 팔레트의 Reusable elements 항목에서 RE_nav를 찾아 페이지 맨 위로 끌어다 놓습니다.

3

레이아웃을 설정합니다

배치한 인스턴스가 페이지 폭에 맞추어 늘어나도록 레이아웃을 설정합니다.

고정 폭으로 두면 창 크기를 바꿀 때 내비게이션이 따라 늘어나지 않습니다.

4

나머지 페이지에 2, 3을 반복합니다

weather 페이지와 map 페이지에서 2~3단계를 반복합니다.

5

Preview로 확인합니다

Preview로 실행하여 메뉴를 눌러 봅니다. 세 페이지를 오갈 수 있어야 합니다.

현재 페이지의 메뉴를 강조

지금 어느 페이지에 있는지 내비게이션에서 알 수 있으면 사용자가 길을 잃지 않습니다. 그런데 RE_nav는 세 페이지가 똑같이 공유하는 하나의 정의입니다. 페이지마다 다르게 보이게 하려면, 재사용 요소가 "지금 내가 놓인 페이지가 어디인가"를 스스로 알아야 합니다.

Bubble은 이를 위해 Current page name이라는 데이터 소스를 제공합니다. 재사용 요소가 자신이 사용되고 있는 페이지의 이름을 알 수 있게 해 줍니다.

01

정의 편집 화면을 엽니다

RE_nav의 정의 편집 화면을 엽니다.

02

Conditional 탭을 엽니다

Link 날씨를 선택하고 속성 편집기에서 Conditional 탭을 엽니다.

03

조건을 작성합니다

새 조건을 추가하고 다음과 같이 작성합니다: Current page name is weather

04

강조 속성을 지정합니다

조건이 참일 때 바꿀 속성으로 글자색(Font color)을 선택하고 강조색을 지정합니다. 굵게(Bold)를 함께 지정해도 좋습니다.

05

나머지 링크에도 조건을 추가합니다

미리 보기에서 세 페이지를 오가며, 현재 페이지의 메뉴만 강조되는지 확인하십시오.

알아 둘 점

워크플로는 재사용 요소 안에 있습니다

재사용 요소 안에서 일어나는 동작은 페이지가 아니라 정의 안에서 만들고 편집합니다.

재사용 요소는 페이지의 워크플로를 직접 실행할 수 없습니다

반대 방향은 가능합니다. 페이지에서 Trigger a custom event from a reusable element 동작으로 재사용 요소 안의 사용자 정의 이벤트를 실행할 수 있습니다.

Detach reusable element는 되돌릴 수 없습니다

인스턴스를 마우스 오른쪽 단추로 클릭하면 나오는 이 메뉴는 정의와의 연결을 끊고 일반 요소로 바꿉니다. 이후에는 정의를 고쳐도 그 페이지에 반영되지 않습니다.

정의를 삭제하면 인스턴스 자리에 'Deleted reusable element'가 표시됩니다

삭제하기 전에 어느 페이지에서 쓰이는지 확인하십시오.

웹과 모바일의 재사용 요소는 서로 다릅니다

웹용으로 만든 재사용 요소는 네이티브 모바일 앱에서 쓸 수 없고, 그 반대도 마찬가지입니다.

스크롤해도 위에 고정되는 헤더가 필요합니다

이때에도 Bubble 공식 문서는 재사용 요소를 Group 유형으로 만들고, 페이지에 일반 Floating group을 둔 다음 그 안에 배치하는 방법을 권합니다. 여러 상황에서 더 유연하게 쓸 수 있기 때문입니다.

정리

체크리스트

  • 재사용 요소 목록에 RE_nav가 있습니다.
  • index, weather, map 페이지에 RE_nav 인스턴스가 하나씩 있습니다.
  • index 페이지에 원본 내비게이션 그룹이 남아 있지 않습니다.
  • 정의에서 배경색을 바꾸면 세 페이지 모두 바뀝니다.
  • 현재 페이지의 메뉴만 강조됩니다.

과제

푸터(footer)도 같은 방법으로 RE_footer라는 재사용 요소로 만들어 세 페이지에 배치해 보십시오.

생각해 볼 질문들

Q1. 메뉴의 "지도"를 "위치"로 바꾸려면 몇 군데를 고쳐야 합니까?

A. 정의 한 군데만 고치면 됩니다. 재사용 요소가 없었다면 세 페이지를 각각 고쳐야 합니다.

Q2. map 페이지의 이름을 location으로 바꾸면 강조 기능에 어떤 일이 생깁니까?

A. "지도" 메뉴가 더 이상 강조되지 않습니다. 조건이 map이라는 글자와 페이지 이름을 비교하므로, 조건도 location으로 함께 고쳐야 합니다.

Q3. 변환 직후에 index 페이지의 내비게이션을 고쳤는데 다른 페이지에 반영되지 않았습니다. 원인이 무엇이겠습니까?

A. 변환은 원본 그룹을 인스턴스로 바꿔 주지 않습니다. 고친 대상이 재사용 요소가 아니라 index 페이지에 남아 있던 원본 그룹이었습니다.

참고 자료

아래 공식 문서와 동영상을 통해 재사용 요소에 대해 더 깊이 학습할 수 있습니다.

1
3

Bubble Manual — Data Sources (Current page name)

4

Bubble Academy — Converting elements to reusable elements

5

Bubble Academy — How to build a responsive navigation bar