Помогите решить задачу!
приветствую! у меня такой вопрос..
Есть список постов, их я выгружаю из https://gorest.co.in и мне надо при нажатии на кнопку, которая располагается в картой карточке открыть детально на новой странице эту карточку(получается новый html документ ), детальная страница статьи, которую можно получить запросом https://gorest.co.in/public-api/posts/{id статьи}. При этом id статьи должен браться из URL страницы из параметра id
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./style.css">
<script defer src="./swiper.js"></script>
<script defer src="./main.js"></script>
<link rel="stylesheet" href="https://unpkg.com/swiper/swiper-bundle.min.css" />
</head>
<body>
<header>
<div class="container">
<div class="header__block"></div>
</div>
</header>
<main>
<div class="container">
<h1>List of post</h1>
<div class="slider-wrap js-slider-main">
<div class="slider js-slider">
<div id="post" class="slides-wrap js-slides-wrap">
</div>
</div>
</div>
<script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
</div>
</main>
<footer>
<div class="container">
<div class="footer__block"></div>
</div>
</footer>
</body>
</html>
const searchParams = new URLSearchParams(location.search);
const userId = searchParams.get('user_id')
if (userId) {
fetch(`https://gorest.co.in/public/v1/posts/${user_id}`)
.then(response => response.json())
.then(json => {
console.log(json.data);
const markup = json.data.map(el => {
return `
`;
})
console.log(markup);
document.getElementById("post").innerHTML = markup;
})
} else {
fetch('https://gorest.co.in/public/v1/posts')
.then(response => response.json())
.then(json => {
console.log(json.data);
const markup = json.data.map(el => {
return `
<div class="swiper-slide">
<div class="slide__img" style="max-width:300px;">
<img src="" alt="">
</div>
<h2 class="slide__title">${el.title}</h2>
<p class="slide__body">${el.body}</p>
<button class="btn-more" type="submit">Click for read</button>
</div>
`;
})
console.log(markup);
// markup = markup.reduce((acc, el) => acc + el, "")
document.getElementById("post").innerHTML = markup;
})
}
|
TomWalbridge,
строка 5 user_id |
Спасибо за ответ!
Еще такой вопрос.. У меня есть список страниц, на каждой странице есть список постов, и мне надо добавить кнопку, которая перелистывает на след и предыдущую страницы, показывая содержимое выбранной страницы
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="./style.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">
<link rel="stylesheet" href="./choices.min.css">
<script defer src="./main.js"></script>
<script defer src="./choices.min.js"></script>
</head>
<body>
<header>
<div class="container">
<div class="header__block">
<nav class="header__nav">
<ul class="header__nav-list">
<li class="header__nav-item"><a class="header__nav-link" href=""> lorem</a></li>
<li class="header__nav-item"><a class="header__nav-link" href="">lorem</a></li>
<li class="header__nav-item"><a class="header__nav-link" href="">lorem</a></li>
<li class="header__nav-item"><a class="header__nav-link" href="">lorem</a></li>
<li class="header__nav-item"><a class="header__nav-link" href="">lorem</a></li>
</ul>
</nav>
</div>
</div>
</header>
<main>
<div class="container">
<h1>List of post</h1>
<div class="pagination">
<button href="" class="btn-pagination pagination-prev"></button>
<button href="" class="btn-pagination pagination-next"></button>
</div>
<select name="select" class="nav__list select" onchange="window.location.href=this.options[this.selectedIndex].value">
</select>
<div class="posts-list"></div>
</div>
</main>
<footer>
<div class="container">
<div class="footer__block">
<ul class="footer__social-list">
<li class="social-item">
<a class="social-item-link" href=""></a>
</li>
<li class="social-item">
<a class="social-item-link" href=""></a>
</li>
<li class="social-item">
<a class="social-item-link" href=""></a>
</li>
</ul>
</div>
</div>
</footer>
<script >
(async function() {
const postNav = document.querySelector('.nav__list');
const postPage = document.querySelector('.comments-container');
if (postNav) {
createPostsNav();
createPostsList();
}
if (postPage) {
createPostPage();
createPostComment();
}
async function createPostComment() {
const commentBlock = document.querySelector('.comments-block');
let postComment = '';
const pageParams = new URLSearchParams(location.search);
const postId = pageParams.get('id');
const response = await fetch(`http://gorest.co.in/public-api/comments?post_id=${postId}`);
const result = await response.json();
const comment = result.data;
comment.map(item => {
postComment = `
<div class="block-avatar"></div>
<div class="card-comment">
<div class="card-header">
<span class="span-from">From:</span>
${item.email}
</div>
<div class="card-body">
<h3 class="card-title">${item.name}</h3>
<p class="card-text">${item.body}</p>
</div>
</div>
`;
commentBlock.innerHTML = postComment;
});
}
async function getPostsData() {
const pageParams = new URLSearchParams(location.search);
const postPage = pageParams.get('page');
const response = await fetch(`http://gorest.co.in/public-api/posts?page=${postPage == null ? 1 : postPage}`);
const result = await response.json();
return {
posts: result.data,
pagination: result.meta.pagination,
};
}
async function createPostPage() {
const postPage = document.querySelector('.post-block');
let postContent = '';
const pageParams = new URLSearchParams(location.search);
const postId = pageParams.get('id');
const response = await fetch(`http://gorest.co.in/public-api/posts/${postId}`);
const result = await response.json();
const post = result.data;
postContent = `
<div class="card">
<div class="card-body">
<div class="card-img">
<p class="card-img-text">Image</p>
</div>
<h1 class="card-title">${post.title}</h1>
<p class="card-text">${post.body}</p>
</div>
</div>
`;
postPage.innerHTML = postContent;
}
// <a class="nav__link" href="">
// Page ${i}
// </a>
async function createPostsNav() {
const pagination = await getPostsData();
const postsNav = document.querySelector('.nav__list');
let postNav = '';
for (let i = 1; i <= pagination.pagination.pages; i++) {
postNav += `
<option value="index.html?page=${i}"> Page ${i}
</option>
`;
postsNav.innerHTML = postNav;
}
}
async function createPostsList() {
const posts = await getPostsData();
const postsList = document.querySelector('.posts-list');
let postItem = '';
for (let i = 0; i < posts.posts.length; i++) {
postItem += `
<div class="slide__blocks">
<div class="card-img">
<p class="card-img-text">Image</p>
</div>
<h3 class="slide__title">${posts.posts[i].title}</h3>
<p class="slide__body">${posts.posts[i].body}</p>
<a class=" btn-more" href="post.html?id=${posts.posts[i].id}">
Click for read
</a>
</div>
`;
postsList.innerHTML = postItem;
}
}
}());
</script>
</body>
</html>
|
TomWalbridge,
вариант для медитации
async function createPostsNav() {
const pagination = await getPostsData();
const postsNav = document.querySelector('.nav__list');
let postNav = '';
for (let i = 1; i <= pagination.pagination.pages; i++) {
postNav += `
<option value="index.html?page=${i}"> Page ${i}
</option>
`;
postsNav.innerHTML = postNav;
}
const paginationNav = document.querySelector('.pagination');
paginationNav.addEventListener( "click" , function(event) {
let btn = event.target.closest('.btn-pagination');
if(btn) {
event.preventDefault();
let i = postsNav.selectedIndex;
let up = btn.classList.contains('pagination-prev') ? -1 : 1;
let len = postsNav.options.length - 1;
let k = i + up;
k = Math.max(0, Math.min(k , len));
if(k !== i) {
postsNav.selectedIndex = k;
// k++
//createPostsList(page=k)
}
}
});
}
|
Рони, благодарю! Вы спасли меня!
|
| Часовой пояс GMT +3, время: 12:01. |