Skip to content

Commit 4a65833

Browse files
committed
๐Ÿ’„ STYLE: ๋ฉ”์ธ ํ™”๋ฉด์˜ ๋ฐฐ๋„ˆ์— ๊ณผ์ • ์ด๋ฏธ์ง€ ์ถ”๊ฐ€
1 parent e7cb551 commit 4a65833

2 files changed

Lines changed: 64 additions & 33 deletions

File tree

โ€Žcourses/views.pyโ€Ž

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ def get_context_data(self, **kwargs):
6161
"description": course.short_description
6262
or "์‹ค๋ฌด์— ํ•„์š”ํ•œ ๊ธฐ์ˆ ์„ ์Šต๋“ํ•˜์„ธ์š”.",
6363
"courseDetailUrl": f"/courses/detail/{course.id}/",
64+
"course": course,
6465
}
6566
banner_slides.append(slide)
6667

โ€Žtemplates/base.htmlโ€Ž

Lines changed: 63 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,34 @@
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

Comments
ย (0)