Map View는 다가오는 이벤트 목록을 지도와 함께 표시하여 사용자가 이벤트의 위치를 확인하거나 수정하거나, 새로운 이벤트의 위치를 지정할 수 있도록 합니다.
Google Maps를 사용하려면, 페이지에 자신의 Google API 키를 추가해야 합니다.
Map View를 스케줄러에 추가하려면 아래 단계를 따라주세요:
1. 아래와 같이 페이지에 지도 공급자 코드 파일을 포함합니다:
<-- Google Maps를 포함하려면 자신의 Google API 키를 사용하세요 -->
<script src="//maps.google.com/maps/api/js?key=[your Google API key]&sensor=false"
type="text/javascript"></script>
지도 공급자를 변경하거나 설정을 조정할 수 있습니다. 변경 사항은 다음 지도 렌더링 시 적용됩니다.
2. Map view 플러그인을 활성화합니다:
scheduler.plugins({
map_view: true
});
3. 스케줄러 마크업에 뷰 탭을 추가합니다:
<div id="scheduler_here" class="dhx_cal_container" ...>
<div class="dhx_cal_navline">
...
<div class="dhx_cal_tab" data-tab="map"></div>
</div>
...
</div>
4. 탭의 라벨을 설정합니다:
//'map_tab'은 div 이름과 일치해야 합니다
scheduler.locale.labels.map_tab = "Map";
5. 이벤트 위치를 처리할 라이트박스 섹션을 추가합니다:
scheduler.config.lightbox.sections=[
{name:"description", height:50,map_to:"text", type:"textarea", focus:true},
{name:"location", height:43, map_to:"event_location", type:"textarea"},
{name:"time", height:72, type:"time", map_to:"auto"}
]
6. 새 섹션의 라벨을 정의합니다:
scheduler.locale.labels.section_location = "Location";
7. 스케줄러를 초기화합니다:
//'map'은 Map View의 기본 이름입니다
scheduler.init('scheduler_here',new Date(2024,5,11),"map");
dhtmlxScheduler는 Google Maps, OpenStreetMaps, Mapbox를 지도 공급자로 지원합니다.
지도 공급자를 설정하려면 다음 단계를 따르세요:
1. 예를 들어 Google Maps의 경우, 지도 라이브러리를 페이지에 포함합니다:
<-- Google Maps를 포함하려면 자신의 Google API 키를 사용하세요 -->
<script src="//maps.google.com/maps/api/js?key=[your Google API key]&sensor=false"
type="text/javascript"></script>
2. 필요하다면 map_settings 옵션을 사용하여 설정을 구성합니다. 예:
scheduler.config.map_settings = {
initial_position: {
lat: 48.724,
lng: 8.215
}
}
...
scheduler.init('scheduler_here',new Date(2024,5,11),"map");
3. 다음 중 한 가지 방법으로 지도 공급자 이름을 지정합니다:
scheduler.config.map_view_provider = "googleMap";
...
scheduler.init('scheduler_here',new Date(2024,5,11),"map");
사용 가능한 값: "googleMap", "openStreetMaps", "mapbox".
scheduler.config.map_settings = {
view_provider: "googleMap"
}
...
scheduler.init('scheduler_here',new Date(2024,5,11),"map");
v7.1부터 대부분의 지도 구성 옵션은 map_settings 속성 내에서 설정됩니다. 기본 설정은 다음과 같습니다:
scheduler.config.map_settings = {
initial_position: {
lat: 48.724,
lng: 8.215
},
error_position: {
lat: 15,
lng: 15
},
initial_zoom: 1,
zoom_after_resolve: 15,
info_window_max_width: 300,
resolve_user_location: true,
resolve_event_location: true,
view_provider: "googleMap"
}
...
scheduler.init('scheduler_here',new Date(2024,5,11),"map");
이 속성들은 다음을 포함합니다:
토큰 등 사용자 정의 설정은 map_settings 내부에 추가할 수 있습니다. 예:
scheduler.config.map_settings.accessToken = "pk.eyJ...";
scheduler.xy.map_date_width - 날짜 열의 너비
scheduler.xy.map_description_width - 설명 열의 너비
내장 지도 공급자가 요구 사항을 충족하지 않는 경우, map adapter 인터페이스를 준수하는 클래스를 구현하여 커스텀 지도 어댑터를 만들 수 있습니다. 다음 메서드를 포함해야 합니다:
interface IMapAdapter {
// 제공된 옵션으로 지도 인스턴스 초기화
initialize(container: HTMLElement, options: IMapSettings): void;
// Map View에서 벗어날 때 지도 인스턴스 제거 및 리소스 해제
destroy(container: HTMLElement): void;
// 이벤트에 대한 마커 추가
addEventMarker(event: ICalendarEvent): void;
// 특정 eventId의 마커 제거
removeEventMarker(eventId: string): void;
// 이벤트의 마커 업데이트
updateEventMarker(event: ICalendarEvent): void;
// 모든 이벤트 마커 제거
clearEventMarkers(): void;
// 지정된 위치로 지도 중심 이동
setView(latitude: number, longitude: number, zoom: number): void;
// 스케줄러에서 이벤트 클릭 처리
onEventClick(event: ICalendarEvent): void;
// 문자열 주소를 좌표로 변환, {lat, lng}를 반환하는 Promise
resolveAddress(address: string): Promise<IMapPosition>;
}
Map View에서 올바르게 렌더링하려면 데이터 항목에 몇 가지 추가 속성이 필요합니다. 필수 속성은 다음과 같습니다:
.php 파일이 데이터베이스 데이터와 일치하는지 확인하세요.
Map View에서는 로케일에서 네 가지 라벨을 사용합니다:
일반적으로, 처음 두 라벨은 뷰 탭을 추가할 때 설정하며, 마지막 두 라벨은 영어가 아닌 언어로 현지화할 때만 수정하면 됩니다.
v7.0부터, Map View의 createMarker()
메서드를 오버라이드하여 마커 모양을 커스터마이즈할 수 있습니다:
const { AdvancedMarkerElement,
PinElement } = await google.maps.importLibrary("marker");
scheduler.ext.mapView.createMarker = function(config){
const pinViewGlyph = new PinElement({
glyphColor: "white",
});
return new AdvancedMarkerElement({
...config,
content: pinViewGlyph.element,
});
};
자세한 내용은 Google Maps documentation에서 확인할 수 있습니다.