Spring + Thymeleaf ๋ก FullCalendar ์ด๋ฏธ์ง ๋ํ๋ด๊ธฐ
๋ฐ ์ด๋ฒคํธ ์จํด๋ฆญ(onClick)์ฒ๋ฆฌํ๊ธฐ
๋ฌ๋ ฅ์ ๋ทฐ๋ก ๋์ธ ๋ ๋ง์ด ์ฐ๋ ๋ฌ๋ ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค.
๋ฐ๋ก fullcalendar์ธ๋ฐ ์๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ๋ฌ๋ ฅ์ ๋ง๋๋ ๊ฒ์ด๋ค.
fullcalendar์ ์ผ์ ์ ๋ํ๋ด๋ ๋ฌ๋ ฅ์ ์นํ์ ์ธ๋ฐ ์ด๋ฅผ ์กฐ๊ธ ์์ฉํ์ฌ ์ผ๊ธฐ ๋ฌ๋ ฅ์ผ๋ก ๋ง๋ค์๋ค.
์ผ๊ธฐ๋ฅผ ์ฐ๋ฉด ํด๋น ๋ ์ง์ ํ๋กํ ์ฌ์ง์ด ๋จ๊ณ ํ๋กํ์ ๋๋ฅด๋ฉด ์ผ๊ธฐ ์์ธ ํ์ด์ง๋ก ๋์ด๊ฐ๊ฒ ๋ง๋ค์๋ค.
FullCalendar - JavaScript Event Calendar
Open Source... With over 10 years of open source and over 120 contributors, FullCalendar will always have a free and open source core. Learn more
fullcalendar.io
์์ ์ํ๋ ํ์์ผ๋ก ์ปค์คํ ๋ง์ด์ง ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ css๋ ํ์ cdn ์ผ๋ก ๋ฐ์ ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
Thymeleaf ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋ฌ๋ ฅ์ ํ์ํ๊ธฐ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
<style>
.calbox {
width: 25px;
height: 25px;
border-radius: 70%;
overflow: hidden;
}
.calprofile {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
<script th:inline="javascript">
/*<![CDATA[*/
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView : 'dayGridMonth', // ์ด๊ธฐ ๋ก๋ ๋ ๋ ๋ณด์ด๋ ์บ๋ฆฐ๋ ํ๋ฉด(๊ธฐ๋ณธ ์ค์ : ๋ฌ)
headerToolbar : { // ํค๋์ ํ์ํ ํด ๋ฐ
start : 'prev next today',
center : 'title',
end : 'dayGridMonth,dayGridWeek,dayGridDay'
},
titleFormat : function(date) {
return date.date.year + '๋
' + (parseInt(date.date.month) + 1) + '์';
},
//initialDate: '2021-07-15', // ์ด๊ธฐ ๋ ์ง ์ค์ (์ค์ ํ์ง ์์ผ๋ฉด ์ค๋ ๋ ์ง๊ฐ ๋ณด์ธ๋ค.)
selectable : false, // ๋ฌ๋ ฅ ์ผ์ ๋๋๊ทธ ์ค์ ๊ฐ๋ฅ
droppable : false,
editable : true,
nowIndicator: true, // ํ์ฌ ์๊ฐ ๋งํฌ
locale: 'ko', // ํ๊ตญ์ด ์ค์
events:
[
/*[# th:each="calendar : ${list}"]*/
{
start:/*[[${calendar['DTIME']}]]*/,
image_url:/*[[${calendar['PROFILE']}]]*/,
url:"/dageul/detailDiary/"+/*[[${calendar['DNUM']}]]*/
},
/*[/]*/
],
eventContent: function(arg) {
let arrayOfDomNodes = []
// image event
let imgEventWrap = document.createElement('div')
if(arg.event.extendedProps.image_url) {
let imgEvent = '<div class=\"calbox\" style=\"background: #BDBDBD;\"><img class=\"calprofile\" src=\"/dageul/getpic/getprofile/'+arg.event.extendedProps.image_url+'" ></a></div>'
imgEventWrap.classList = "fc-event-img"
imgEventWrap.innerHTML = imgEvent;
}
arrayOfDomNodes = [imgEventWrap]
return { domNodes: arrayOfDomNodes }
},
eventClick:function(event) {
if(event.url) {
location.href=event.url;
}
}
});
calendar.render();
});
/*]]>*/
</script>
|
cs |
Thymeleaf ๋ฅผ javascript์์ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋จผ์ 14์ด ์ฒ๋ผ ์ ์ธํด์ฃผ๊ณ 15์ด๊ณผ 69์ด ์ฒ๋ผ ์ ์ฒด๋ฅผ ์ฃผ์์ฒ๋ฆฌ๋ CDATA๋ฌธ์ ์ฒ๋ฆฌํด์ค์ผํ๋ค. 36์ด๊ณผ 42์ด ์ฒ๋ผ ๋ฐ๋ณต๋ฌธ์ ์จ์ผํ๋ Thymeleaf ์ th:each๋ฅผ ์ฃผ์์ฒ๋ฆฌํ์ฌ ์ฐ๊ณ ๋ฐ์ดํฐ ๋ํ ์ฃผ์์ฒ๋ฆฌํ์ฌ ์ฐ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ธ์ํ์ฌ ๋ฐ์ดํฐ๊ฐ ๋์ค๊ฒ ๋๋ค.
๊ตฌ๊ธ์ ๋ณด๋ฉด ํ์บ๋ฆฐ๋์์ ์ด๋ฏธ์ง๋ฅผ ๋์ธ๋ eventRender์ ๋ง์ด ์ฐ๋๋ฐ <img >ํ๊ทธ๋ฅผ ์ธ์ํ์ง ๋ชปํ์ฌ 45์ด~60์ด ๊ฐ์ ๋ฐฉ๋ฒ์ ์ผ๋ค. ์์ <div class=\"calbox\" style=\"background: #BDBDBD;\">ํ๊ทธ์ img ํ๊ทธ์ id๋ฅผ ์ค๊ฒ์ css๋ฅผ ํตํ์ฌ ํ๋กํ ์ฌ์ง ํฌ๊ธฐ์ ๋๊ทธ๋๊ฒ ํ์ ๋๋๋ก ๋ง๋ค๊ธฐ ์ํจ์ด๋ค.
์ฐธ๊ณ ํ์ด์ง - ์คํ ์ค๋ฒํ๋ก์ฐ
https://stackoverflow.com/questions/40266483/fullcalendar-images-as-events
FullCalendar - Images as events
Looking to use Full Calendar and to include images as events and draggable. In short, would love to see how this example https://fullcalendar.io/js/fullcalendar-3.0.1/demos/external-dragging.html w...
stackoverflow.com
61์ด~ 65์ด์ ํตํ์ฌ ํด๋ฆญํ๋ฉด ๋ฐ์ํ๋ ์ด๋ฒคํธ๋ ๋ง๋ค์ด ์ฃผ์๋ค. ์ผ๊ธฐ์ ํด๋น ๋ฒํธ๋ฅผ ์๋ฒ์ธก์์ ์ฃผ์ด
ํ๋กํ์ ๋๋ฅด๋ฉด ํด๋น ๋ฒํธ์ ์ผ๊ธฐ ์์ธ๋ณด๊ธฐ ํ์ด์ง๋ก ๋์ด๊ฐ๊ฒ ํด์ฃผ์๋ค.
์ปจํธ๋กค์์ ๋ฟ๋ ค์ฃผ๋ ๋ฐ์ดํฐ
์คํ ๊ฒฐ๊ณผ :
๋๊ธ