카페 상세 페이지 접속시 표시되는 달력에
해당 카페에 등록된 event 내역을 달력에 표시해 달라는 요구사항을 받음
html
<div id='calendar-container'>
<div id='calendar'></div>
</div>
javascript
타임리프 코드 사용 - th:inline="javascript"
<script th:inline="javascript">
let id = [[${cafeDetailResponseDto.getCafeNumber()}]];
</script>
jQuery
(function () {
$(function () {
// calendar element 취득
var calendarEl = $('#calendar')[0];
// full-calendar 생성하기
var calendar = new FullCalendar.Calendar(calendarEl, {
height: '500px', // calendar 높이 설정
expandRows: true, // 화면에 맞게 높이 재설정
// slotMinTime: '08:00', // Day 캘린더에서 시작 시간
// slotMaxTime: '20:00', // Day 캘린더에서 종료 시간
// 해더에 표시할 툴바
headerToolbar: {
left: 'prev,next today',
center: 'title',
// right: 'dayGridMonth,timeGridWeek,timeGridDay,listWeek'
right: 'dayGridMonth'
},
initialView: 'dayGridMonth', // 초기 로드 될때 보이는 캘린더 화면(기본 설정: 달)
// initialDate: '2021-07-15', // 초기 날짜 설정 (설정하지 않으면 오늘 날짜가 보인다.)
// navLinks: true, // 날짜를 선택하면 Day 캘린더나 Week 캘린더로 링크
// editable: true, // 수정 가능?
// selectable: true, // 달력 일자 드래그 설정가능
nowIndicator: true, // 현재 시간 마크
dayMaxEvents: true, // 이벤트가 오버되면 높이 제한 (+ 몇 개식으로 표현)
locale: 'ko', // 한국어 설정
eventAdd: function (obj) { // 이벤트가 추가되면 발생하는 이벤트
console.log(obj);
},
// eventChange: function(obj) { // 이벤트가 수정되면 발생하는 이벤트
// console.log(obj);
// },
// eventRemove: function(obj){ // 이벤트가 삭제되면 발생하는 이벤트
// console.log(obj);
// },
select: function (arg) { // 캘린더에서 드래그로 이벤트를 생성할 수 있다.
// var title = prompt('Event Title:');
// if (title) {
// calendar.addEvent({
// title: title,
// start: arg.start,
// end: arg.end,
// allDay: arg.allDay
// })
// }
// calendar.unselect()
},
// 이벤트
events: '/api/cafes/calender?id=' + id
});
// 캘린더 랜더링
calendar.render();
});
})();
controller
@GetMapping("/api/cafes/calender")
public List<CafeCalenderInfoResponseDto> ReadCafeEventInfo(@RequestParam Long id){
return cafeService.findCafeEventListForCalender(id);
}
service
public List<CafeCalenderInfoResponseDto> findCafeEventListForCalender(Long id) {
List<Event> eventList = eventRepository.findALLByCafeId(id);
List<CafeCalenderInfoResponseDto> cafeCalenderInfoResponseDtos = eventList.stream()
.map(e -> new CafeCalenderInfoResponseDto(e))
.collect(Collectors.toList());
return cafeCalenderInfoResponseDtos;
}
=======================================
추가. 여러개의 url을 호출하여 데이터를 받아올 때
(function () {
$(function () {
// calendar element 취득
var calendarEl = $('#calendar')[0];
// full-calendar 생성하기
var calendar = new FullCalendar.Calendar(calendarEl, {
height: '500px', // calendar 높이 설정
expandRows: true, // 화면에 맞게 높이 재설정
// 해더에 표시할 툴바
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth'
},
initialView: 'dayGridMonth', // 초기 로드 될때 보이는 캘린더 화면(기본 설정: 달)
nowIndicator: true, // 현재 시간 마크
dayMaxEvents: true, // 이벤트가 오버되면 높이 제한 (+ 몇 개식으로 표현)
locale: 'ko', // 한국어 설정
// 이벤트
eventSources: [
{
url: '/api/cafes/calender?id=' + id,
color: '#4C7A01',
textColor: 'white',
},
{
url: '/hosts/profile/api/cafes/calender/schedule?id=' + id,
color: 'darkorange',
textColor: 'white',
}
]
});
// 캘린더 랜더링
calendar.render();
});
})();
=====================================================
추가 - 이벤트 클릭시 해당 이벤트 상세 페이지 호출
(function () {
$(function () {
// calendar element 취득
var calendarEl = $('#calendar')[0];
// full-calendar 생성하기
var calendar = new FullCalendar.Calendar(calendarEl, {
height: '500px', // calendar 높이 설정
expandRows: true, // 화면에 맞게 높이 재설정
// 해더에 표시할 툴바
headerToolbar: {
left: 'prev,next today',
center: 'title',
right: 'dayGridMonth'
},
initialView: 'dayGridMonth', // 초기 로드 될때 보이는 캘린더 화면(기본 설정: 달)
nowIndicator: true, // 현재 시간 마크
dayMaxEvents: true, // 이벤트가 오버되면 높이 제한 (+ 몇 개식으로 표현)
locale: 'ko', // 한국어 설정
//이벤트 클릭시 function (이벤트 클릭시 해당 이벤트 상세 페이지 호출)
eventClick: function (info){
const eventId = info.event.id;
window.open(`/events/${eventId}/detail`)
},
// 이벤트
eventSources: [
{
url: '/api/cafes/calender?id=' + id,
color: '#4C7A01',
textColor: 'white',
},
{
url: '/hosts/profile/api/cafes/calender/schedule?id=' + id,
color: 'darkorange',
textColor: 'white',
}
]
});
// 캘린더 랜더링
calendar.render();
});
})();
참조 공식페이지 : https://fullcalendar.io/docs/events-json-feed
참고 블로그 : https://nowonbun.tistory.com/368
'프로그래밍 > JPA Project - sparta' 카테고리의 다른 글
enum 활용 - key, value 사용하여 리팩토링 (0) | 2022.07.13 |
---|---|
카페 검색, 정렬 기능을 구현 - 전략패턴 사용 (0) | 2022.07.12 |
카페 삭제 (0) | 2022.07.11 |
카페 수정 (기본 정보) (0) | 2022.07.11 |
타임리프 값 변형하여 사용하는 방법 (글자 추가, 콤마 추가) (1) | 2022.07.10 |