여러 페이지에 똑같이 들어가는 내비게이션을 한 번만 만들어 두고 모든 페이지에서 함께 쓰는 방법을, 세 페이지짜리 예제로 따라 해 봅니다.
index, weather, map 세 페이지가 있는 Bubble 웹 앱 (W04에 만든 앱)index 페이지 맨 위에 놓인 내비게이션 그룹 (사이트 제목 1개와 메뉴 링크 3개)내비게이션을 복사해서 세 페이지에 붙여 넣으면 처음에는 빠릅니다. 그러나 메뉴 이름 하나를 바꾸려면 세 페이지를 모두 열어 세 번 고쳐야 하고, 한 곳이라도 빠뜨리면 페이지마다 내비게이션이 달라집니다. 페이지가 열 개로 늘어나면 문제도 열 배가 됩니다.
재사용 요소는 이 문제를 해결합니다. 한 번 만들어 두면 앱의 어느 페이지에든 배치할 수 있고, 원본을 고치면 배치된 모든 곳이 함께 바뀝니다.
재사용 요소는 두 부분으로 이루어집니다.
재사용 요소의 원본입니다. 여기서 고친 내용은 앱 전체의 모든 인스턴스에 적용됩니다.
페이지에 배치한 사본입니다. 정의의 디자인과 동작을 그대로 따릅니다.
이 예제에서는 재사용 요소 RE_nav 하나를 만들어 세 페이지에 배치합니다.
이름 앞의 RE_는 재사용 요소임을 한눈에 알아보기 위한 관례일 뿐 필수는 아닙니다. 다만 한 가지 규칙을 정해 끝까지 지키는 편이 좋습니다.
가로 배치(Row), 양 끝 정렬(Space between)
"방문자 맞춤 정보"
index 페이지weather 페이지map 페이지페이지들을 모두 만들기 전에 공통된 부분을 미리 준비하고 싶을 때 쓰는 방법입니다.
페이지 내비게이터에서 New를 누르고 Reusable web element를 선택합니다.
이름을 RE_nav로 입력하고, 요소 유형(Type of element)은 Group으로 둡니다.
최상위 요소인 RE_nav의 컨테이너 레이아웃을 Row로, 정렬을 Space between으로 지정합니다.
Text 요소를 추가하고 "방문자 맞춤 정보"라고 입력합니다. Group을 추가하여 이름을 Group Menu로 바꾸고 레이아웃을 Row로 지정합니다.
Group Menu 안에 Link 요소 세 개를 넣고, 표시 글자를 각각 홈·날씨·지도로 입력합니다. 각 Link의 이동 대상(Destination)을 index, weather, map으로 지정합니다.
이 예제에서는 기본값인 Group을 씁니다. Bubble 공식 문서도 헤더와 푸터에는 Group 유형을 권장합니다.
페이지에 내비게이션 그룹을 이미 만들어 두었을 때 쓰는 방법입니다.
index 페이지를 엽니다캔버스에서 클릭하면 안쪽의 글자나 링크가 선택되기 쉬우므로, 요소 트리(Element tree)에서 그룹 이름을 클릭하는 편이 정확합니다.
그룹을 마우스 오른쪽 단추로 클릭하고 선택합니다.
RE_nav로 정합니다재사용 요소 목록에 RE_nav가 생겼는지 확인합니다.
재사용 요소에는 사용자 정의 속성(custom property)을 추가할 수 있습니다. 속성을 쓰면 구조는 공유하면서도 인스턴스마다 다른 내용을 보여 줄 수 있습니다.
글자, 숫자, 날짜 같은 기본 유형이나 직접 만든 데이터 유형의 값
색상 값 또는 저장해 둔 색상 변수
예/아니요 값
RE_nav의 정의를 열고 site_title이라는 이름의 글자(text) 유형 속성을 추가합니다.
사이트 제목 Text의 내용을 고정된 글자 대신 동적 데이터로 바꾸어, 재사용 요소의 site_title 속성을 참조하게 합니다.
각 페이지로 가서 RE_nav 인스턴스를 선택하고, 속성 편집기에서 site_title 값을 페이지마다 다르게 입력합니다.
재사용 요소를 쓰는 이유를 직접 확인하는 단계입니다.
페이지 내비게이터에서 RE_nav를 열어 정의 편집 화면으로 들어갑니다.
배경색을 바꾸거나, 사이트 제목 글자를 굵게 합니다.
index, weather, map 페이지를 차례로 미리 보기 합니다.
이 결과 세 페이지 모두 같은 변경이 반영되어 있어야 합니다. 정의에서 고친 내용은 앱 전체의 모든 인스턴스에 즉시 적용됩니다.
index 페이지를 엽니다방법 A로 만든 경우, 남아 있는 원본 내비게이션 그룹을 삭제합니다.
RE_nav를 끌어다 놓습니다요소 팔레트의 Reusable elements 항목에서 RE_nav를 찾아 페이지 맨 위로 끌어다 놓습니다.
배치한 인스턴스가 페이지 폭에 맞추어 늘어나도록 레이아웃을 설정합니다.
고정 폭으로 두면 창 크기를 바꿀 때 내비게이션이 따라 늘어나지 않습니다.
weather 페이지와 map 페이지에서 2~3단계를 반복합니다.
Preview로 실행하여 메뉴를 눌러 봅니다. 세 페이지를 오갈 수 있어야 합니다.
지금 어느 페이지에 있는지 내비게이션에서 알 수 있으면 사용자가 길을 잃지 않습니다. 그런데 RE_nav는 세 페이지가 똑같이 공유하는 하나의 정의입니다. 페이지마다 다르게 보이게 하려면, 재사용 요소가 "지금 내가 놓인 페이지가 어디인가"를 스스로 알아야 합니다.
Bubble은 이를 위해 Current page name이라는 데이터 소스를 제공합니다. 재사용 요소가 자신이 사용되고 있는 페이지의 이름을 알 수 있게 해 줍니다.
RE_nav의 정의 편집 화면을 엽니다.
Link 날씨를 선택하고 속성 편집기에서 Conditional 탭을 엽니다.
새 조건을 추가하고 다음과 같이 작성합니다: Current page name is weather
조건이 참일 때 바꿀 속성으로 글자색(Font color)을 선택하고 강조색을 지정합니다. 굵게(Bold)를 함께 지정해도 좋습니다.
미리 보기에서 세 페이지를 오가며, 현재 페이지의 메뉴만 강조되는지 확인하십시오.
재사용 요소 안에서 일어나는 동작은 페이지가 아니라 정의 안에서 만들고 편집합니다.
반대 방향은 가능합니다. 페이지에서 Trigger a custom event from a reusable element 동작으로 재사용 요소 안의 사용자 정의 이벤트를 실행할 수 있습니다.
인스턴스를 마우스 오른쪽 단추로 클릭하면 나오는 이 메뉴는 정의와의 연결을 끊고 일반 요소로 바꿉니다. 이후에는 정의를 고쳐도 그 페이지에 반영되지 않습니다.
삭제하기 전에 어느 페이지에서 쓰이는지 확인하십시오.
웹용으로 만든 재사용 요소는 네이티브 모바일 앱에서 쓸 수 없고, 그 반대도 마찬가지입니다.
이때에도 Bubble 공식 문서는 재사용 요소를 Group 유형으로 만들고, 페이지에 일반 Floating group을 둔 다음 그 안에 배치하는 방법을 권합니다. 여러 상황에서 더 유연하게 쓸 수 있기 때문입니다.
RE_nav가 있습니다.index, weather, map 페이지에 RE_nav 인스턴스가 하나씩 있습니다.index 페이지에 원본 내비게이션 그룹이 남아 있지 않습니다.푸터(footer)도 같은 방법으로 RE_footer라는 재사용 요소로 만들어 세 페이지에 배치해 보십시오.
A. 정의 한 군데만 고치면 됩니다. 재사용 요소가 없었다면 세 페이지를 각각 고쳐야 합니다.
map 페이지의 이름을 location으로 바꾸면 강조 기능에 어떤 일이 생깁니까?A. "지도" 메뉴가 더 이상 강조되지 않습니다. 조건이 map이라는 글자와 페이지 이름을 비교하므로, 조건도 location으로 함께 고쳐야 합니다.
index 페이지의 내비게이션을 고쳤는데 다른 페이지에 반영되지 않았습니다. 원인이 무엇이겠습니까?A. 변환은 원본 그룹을 인스턴스로 바꿔 주지 않습니다. 고친 대상이 재사용 요소가 아니라 index 페이지에 남아 있던 원본 그룹이었습니다.
아래 공식 문서와 동영상을 통해 재사용 요소에 대해 더 깊이 학습할 수 있습니다.
Bubble에서 내비게이션 그룹을 재사용 요소로 만들기