ํฐ์คํ ๋ฆฌ ๋ธ๋ก๊ทธ์ ์ต์ ๊ธ ๋ชฉ๋ก ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ
๋ค๋ฅธ ๋ธ๋ก๊ทธ์ ์ต์ ๊ธ์ ๋ถ๋ฌ์์ ๋ธ๋ก๊ทธ์ ๋ฉ์ธ ํ๋ฉด์ ๊พธ๋ฏธ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์์ต๋๋ค. ํนํ ์ด๋ฏธ์ง, ๋์์, ์ต๊ทผ ๊ธ ๋ชฉ๋ก ๋ฑ์ ํตํด ๋ธ๋ก๊ทธ๋ฅผ ๋์ฑ ํ์ฑ ๋ค์ฑ๋กญ๊ฒ ๊พธ๋ฐ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์ฌ์ดํธ๋ ์๋ธ ๋ธ๋ก๊ทธ์ ์ต์ ๊ธ ๋ชฉ๋ก์ ํ์ํด ์ฃผ๋ฉด ๋ฐฉ๋ฌธ์๊ฐ ์ฝ๊ฒ ๋ค๋ฅธ ๋ธ๋ก๊ทธ๋ก ์๋ด๋ฅผ ํด์ค์ ์์ต๋๋ค. ๋ํ ๋ฐฉ๋ฌธ์์ ์ฒด๋ฅ ์๊ฐ์ ๋๋ ค์ค์ ์๊ณ ๋๋ถ์ด ๋ฐฑ๋งํฌ์ ํจ๊ณผ๋ ๋ณผ์ ์์ต๋๋ค.
์๋ ๋ด์ฉ์ ์ฝ๊ฒ ํฐ์คํ ๋ฆฌ ๋ธ๋ก๊ทธ ๊ธฐ๋ณธ ์คํจ์ ํ์ฉํด์ ๋ค๋ฅธ ์ฌ์ดํธ๋ ๋ธ๋ก๊ทธ์ ์ต์ ๊ธ ๋ชฉ๋ก์ ํ์ํด ์ฃผ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
ํฐ์คํ ๋ฆฌ ๋ฉ์ธ ๋ฆฌ์คํธ ๊พธ๋ฏธ๊ธฐ
๋ค๋ฅธ ๋ธ๋ก๊ทธ ๋๋ ์ฌ์ดํธ์ RSS ์ ๋ณด๋ฅผ ์ด์ฉํด์ ๊ฐ๋จํ๊ฒ ๋ฉ์ธ ํ๋ฉด์ ๊พธ๋ฐ ์ ์์ต๋๋ค. ์๋๋ ๊ธฐ์กด์ ํฐ์คํ ๋ฆฌ BOOK ์คํจ์ ๊ธฐ๋ณธ ๋ฆฌ์คํธ ์ฝ๋๋ฅผ ํ์ฉํด์ ์ ๋ชฉ๊ณผ ๊ธ๋ด์ฉ .๊ธ ๋ ์ง๋ฅผ ๋ฉ์ธ ํ๋ฉด์ ์ต์ ๊ธ ๋ชฉ๋ก ํํ๋ก ๋ ธ์ถ์ํฌ์ ์์ต๋๋ค.
์ต์ ๊ธ ๋ชฉ๋ก ์ฝ๋
ํ ์ปค๋ฒ ๊ธฐ๋ณธ ๋ฆฌ์คํธ ๊ธฐ๋ณธ ์ฝ๋
ํฐ์คํ ์คํจ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๊ธฐ๋ณธ ๋ฆฌ์คํธ HTML ์ฝ๋์ ๋๋ค.
<s_cover name='cover-list'>
<div class="cover-list">
<h2></h2>
<ul>
<s_cover_item>
<li>
<a href="">
<span class="title"></span> <span class="excerpt"></span> <s_cover_item_article_info>
<span class="date"></span> </s_cover_item_article_info>
</a>
</li>
</s_cover_item>
</ul>
</div>
</s_cover>
ํ ์ปค๋ฒ ๊ธฐ๋ณธ ๋ฆฌ์คํธ ์์ ์ฝ๋
ํฐ์คํ ๋ฆฌ ๊ธฐ๋ณธ ์คํจ์ ๋ณ๊ฒฝํด์ ์๋ ์ฝ๋๋ก ์ฌ์ฉํฉ๋๋ค. ์๋ ์ฝ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก RSS ์ ๋ณด๋ฅผ ์ด์ฉํด์ ๊ธฐ๋ณธ ๋ฆฌ์คํธ ํํ๋ก ์ถ๋ ฅํด ์ค๋๋ค.
<s_cover name='cover-list'>
<div class="cover-list">
<ul id="cover-items">
</ul>
</div>
</s_cover>
ํ ์ปค๋ฒ ๊ธฐ๋ณธ ๋ฆฌ์คํธ RSS ์คํฌ๋ฆฝํธ ์ฝ๋
์ด ์ฝ๋๋ RSS ์ฃผ์๋ฅผ ํตํด ๋ค๋ฅธ ์ฌ์ดํธ๋ ๋ธ๋ก๊ทธ์ ์ต์ ๊ธ์ ์๋์ผ๋ก ๋ถ๋ฌ์ค๋ JavaScript์ ๋๋ค. RSS URL์ ์์ ํ์ฌ ์ํ๋ ๋ธ๋ก๊ทธ์ ์ต์ ๊ธ์ ํ์ํ ์ ์์ต๋๋ค.
<script defer="defer">
async function fetchRSS() {
const rssUrl = 'https://api.rss2json.com/v1/api.json?rss_url=https://everydayhub.tistory.com/rss';
try {
const response = await fetch(rssUrl);
const { items } = await response.json();
const coverItemsList = document.getElementById('cover-items');
const limitedItems = items.slice(0, 5);
limitedItems.forEach(item => {
const coverItem = document.createElement('div');
coverItem.className = 'cover-item';
const listItem = document.createElement('li');
const link = document.createElement('a');
link.href = item.link;
link.target = '_blank';
const titleDiv = document.createElement('div');
titleDiv.className = 'title';
titleDiv.innerHTML = item.title;
const excerptDiv = document.createElement('div');
excerptDiv.className = 'excerpt';
excerptDiv.innerHTML = item.description;
if (excerptDiv.innerHTML.length > 200) {
excerptDiv.innerHTML = excerptDiv.innerHTML.substring(0, 200) + '...';
}
const dateDiv = document.createElement('div');
dateDiv.className = 'date';
dateDiv.innerHTML = new Date(item.pubDate).toLocaleDateString();
const articleInfo = document.createElement('div');
articleInfo.className = 'article-info';
const dateSpan = document.createElement('span');
dateSpan.appendChild(dateDiv);
articleInfo.appendChild(dateSpan);
link.appendChild(titleDiv);
link.appendChild(excerptDiv);
link.appendChild(articleInfo);
listItem.appendChild(link);
coverItem.appendChild(listItem);
coverItemsList.appendChild(coverItem);
});
} catch (error) {
console.error('RSS ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ค ์ค๋ฅ ๋ฐ์:', error);
}
}
fetchRSS();
</script>
ํ ์ปค๋ฒ ์คํจ์ ๊ธฐ๋ณธ ๋ฆฌ์คํธ CSS
ํฐ์คํ ๋ฆฌ ๊ธฐ๋ณธ ๋ฆฌ์คํธ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ CSS ์ ๋๋ค. ์ถ๊ฐ ์์ ํ๊ฑฐ๋ ๋ณ๊ฒฝํด์ ์ฌ์ฉํ์๋ฉฐ ๋ฉ๋๋ค.
.cover-list {
position: relative;
overflow: hidden;
width: 100%;
margin-bottom: 42px;
}
.cover-list h2 {
margin-bottom: 35px;
padding-bottom: 19px;
border-bottom: 1px solid #eee;
font-weight: 500;
font-size: 1em;
color: #555;
}
.cover-list ul li {
overflow: hidden;
margin-bottom: 33px;
}
.cover-list ul li a {
display: block;
text-decoration: none;
}
.cover-list ul li .title {
display: block;
overflow: hidden;
max-width: 95%;
margin-bottom: 6px;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 1.25em;
line-height: 1.4;
}
.cover-list ul li .excerpt {
display: block;
overflow: hidden;
max-width: 95%;
margin-bottom: 18px;
text-overflow: ellipsis;
font-size: 0.875em;
line-height: 1.5rem;
color: #999;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
.cover-list ul li .date {
display: block;
font-size: 0.75em;
color: #999;
}