2020 {% if request.path == '/' or request.path == '/courses/' or request.resolver_match.url_name == 'courses' %}
2121 < div class ="bg-blue-900 text-white py-16 px-4 relative ">
2222 < div class ="container mx-auto ">
23- < div class ="max-w-xl mx-auto text-left ">
24- < div class ="h-32 flex flex-col justify-center ">
25- < h2 class ="text-4xl md:text-5xl font-bold mb-3 text-left ">
26- < span class ="text-white "> ์น ๊ฐ๋ฐ ์ฌ์ ์</ span > < br >
27- < span class ="text-indigo-300 "> ๋๋
ธ ๋๊ทธ๋ฆฌ๋ก ์์ฑํ์ธ์</ span >
28- </ h2 >
23+ < div class ="max-w-6xl mx-auto flex flex-col md:flex-row items-center ">
24+ <!-- ํ
์คํธ ์์ญ -->
25+ < div class ="md:w-1/2 text-left mb-6 md:mb-0 ">
26+ < div class ="h-32 flex flex-col justify-center ">
27+ < h2 class ="text-4xl md:text-5xl font-bold mb-3 text-left ">
28+ < span class ="text-white "> ์น ๊ฐ๋ฐ ์ฌ์ ์</ span > < br >
29+ < span class ="text-indigo-300 "> ๋๋
ธ ๋๊ทธ๋ฆฌ๋ก ์์ฑํ์ธ์</ span >
30+ </ h2 >
31+ </ div >
32+ < div class ="h-20 flex items-center ">
33+ < p class ="text-sm text-gray-300 mb-6 text-left "> 7๊ฐ ๊ธฐ์ ๋ถ์ผ ํ์ต์ ํตํด ๋๋ง์ ์น ๊ฐ๋ฐ ํฌํธํด๋ฆฌ์ค๋ฅผ ๋ง๋ค์ด๋ณด์ธ์.</ p >
34+ </ div >
35+ < div class ="mt-4 flex justify-start space-x-3 ">
36+ < a href ="# " class ="px-5 py-2 bg-white hover:bg-gray-100 text-gray-800 rounded-md text-sm font-medium transition-colors ">
37+ ๋ ์์๋ณด๊ธฐ
38+ </ a >
39+ </ div >
2940 </ div >
30- < div class ="h-20 flex items-center ">
31- < p class ="text-sm text-gray-300 mb-6 text-left "> 7๊ฐ ๊ธฐ์ ๋ถ์ผ ํ์ต์ ํตํด ๋๋ง์ ์น ๊ฐ๋ฐ ํฌํธํด๋ฆฌ์ค๋ฅผ ๋ง๋ค์ด๋ณด์ธ์.</ p >
32- </ div >
33- < div class ="mt-4 flex justify-center space-x-3 ">
34- < a href ="# " class ="px-5 py-2 bg-white hover:bg-gray-100 text-gray-800 rounded-md text-sm font-medium transition-colors ">
35- ๋ ์์๋ณด๊ธฐ
36- </ a >
41+
42+ <!-- ์ด๋ฏธ์ง ์์ญ -->
43+ < div class ="md:w-1/2 flex justify-center ">
44+ < div class ="w-120 h-80 bg-gray-200 rounded-lg shadow-lg overflow-hidden flex items-center justify-center " id ="banner-image-container ">
45+ {% if banner_course and banner_course.thumbnail_image %}
46+ < img src ="{{ banner_course.thumbnail_image.url }} " alt ="{{ banner_course.title }} " class ="w-full h-full object-cover ">
47+ {% else %}
48+ < span class ="text-gray-500 "> ์ด๋ฏธ์ง ์์</ span >
49+ {% endif %}
50+ </ div >
3751 </ div >
3852 </ div >
3953 </ div >
@@ -65,14 +79,17 @@ <h2 class="text-4xl md:text-5xl font-bold mb-3 text-left">
6579 <!-- ๋ฐฐ๋ ์ฌ๋ผ์ด๋ ์คํฌ๋ฆฝํธ -->
6680 {% if request.path == '/' or request.path == '/courses/' or request.resolver_match.url_name == 'courses' %}
6781 < script >
68-
6982 const slides = [
7083 { % for slide in banner_slides % }
7184 {
7285 titleLine1 : "{{ slide.titleLine1 }}" ,
7386 titleLine2 : "{{ slide.titleLine2 }}" ,
7487 description : "{{ slide.description }}" ,
75- courseDetailUrl : "{{ slide.courseDetailUrl }}"
88+ courseDetailUrl : "{{ slide.courseDetailUrl }}" ,
89+ course : {
90+ title : "{{ slide.course.title }}" ,
91+ thumbnail_image : "{{ slide.course.thumbnail_image.url }}"
92+ }
7693 } { % if not forloop . last % } , { % endif % }
7794 { % endfor % }
7895 ] ;
@@ -88,6 +105,7 @@ <h2 class="text-4xl md:text-5xl font-bold mb-3 text-left">
88105 const description = banner . querySelector ( 'p' ) ;
89106 const indicators = banner . querySelectorAll ( '.rounded-full' ) ;
90107 const moreInfoLink = banner . querySelector ( 'a' ) ;
108+ const imageContainer = document . getElementById ( 'banner-image-container' ) ;
91109
92110 // ๋ด์ฉ ์
๋ฐ์ดํธ
93111 title . innerHTML = `
@@ -100,35 +118,47 @@ <h2 class="text-4xl md:text-5xl font-bold mb-3 text-left">
100118 // ๋ ์์๋ณด๊ธฐ ๋งํฌ ์
๋ฐ์ดํธ
101119 moreInfoLink . href = slides [ index ] . courseDetailUrl ;
102120
121+ // ์ด๋ฏธ์ง ์ปจํ
์ด๋ ์
๋ฐ์ดํธ
122+ if ( imageContainer ) {
123+ if ( slides [ index ] . course && slides [ index ] . course . thumbnail_image ) {
124+ imageContainer . innerHTML = `<img src="${ slides [ index ] . course . thumbnail_image } " alt="${ slides [ index ] . course . title } " class="w-full h-full object-cover">` ;
125+ } else {
126+ imageContainer . innerHTML = `<span class="text-gray-500">์ด๋ฏธ์ง ์์</span>` ;
127+ }
128+ }
129+
103130 // ์ธ๋์ผ์ดํฐ ์ํ ์
๋ฐ์ดํธ
104131 indicators . forEach ( ( dot , i ) => {
105132 if ( i === index ) {
106133 dot . classList . remove ( 'opacity-50' ) ;
107134 } else {
108135 dot . classList . add ( 'opacity-50' ) ;
109- }
110- } ) ;
111- }
136+ }
137+ } ) ;
138+ }
112139
113- document . addEventListener ( 'DOMContentLoaded' , function ( ) {
114- const indicators = document . querySelectorAll ( '[data-slide-index]' ) ;
140+ document . addEventListener ( 'DOMContentLoaded' , function ( ) {
141+ const indicators = document . querySelectorAll ( '[data-slide-index]' ) ;
115142
116- indicators . forEach ( indicator => {
117- indicator . addEventListener ( 'click' , function ( ) {
118- const slideIndex = parseInt ( this . getAttribute ( 'data-slide-index' ) , 10 ) ;
119- showSlide ( slideIndex ) ;
143+ indicators . forEach ( indicator => {
144+ indicator . addEventListener ( 'click' , function ( ) {
145+ const slideIndex = parseInt ( this . getAttribute ( 'data-slide-index' ) , 10 ) ;
146+ showSlide ( slideIndex ) ;
147+ } ) ;
120148 } ) ;
121- } ) ;
122-
123- // ์ด๊ธฐ ์ฌ๋ผ์ด๋ ์ค์
124- showSlide ( 0 ) ;
125149
126- let slideInterval = setInterval ( ( ) => {
127- let nextSlide = ( currentSlide + 1 ) % slides . length ;
128- showSlide ( nextSlide ) ;
129- } , 5000 ) ;
150+ // ์ด๊ธฐ ์ฌ๋ผ์ด๋ ์ค์
151+ if ( slides . length > 0 ) {
152+ showSlide ( 0 ) ;
153+ }
130154
131- } ) ;
155+ let slideInterval = setInterval ( ( ) => {
156+ if ( slides . length > 1 ) {
157+ let nextSlide = ( currentSlide + 1 ) % slides . length ;
158+ showSlide ( nextSlide ) ;
159+ }
160+ } , 5000 ) ;
161+ } ) ;
132162 </ script >
133163 {% endif %}
134164 </ body >
0 commit comments