90 lines
2.5 KiB
JavaScript
90 lines
2.5 KiB
JavaScript
|
const path = require('path')
|
||
|
|
||
|
exports.createPages = async ({ actions, graphql }) => {
|
||
|
const {createPage} = actions;
|
||
|
|
||
|
const result = await graphql(`
|
||
|
{
|
||
|
courses: allMarkdownRemark(
|
||
|
filter: {frontmatter: {
|
||
|
content_type: {eq: "page_education"},
|
||
|
published: {eq: true}}}
|
||
|
){
|
||
|
edges{
|
||
|
node{
|
||
|
html
|
||
|
frontmatter{
|
||
|
title
|
||
|
path
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
news: allMarkdownRemark(
|
||
|
filter: {frontmatter: {content_type: {eq: "post"}, published: {eq: true}}},
|
||
|
sort: {fields: [frontmatter___date], order: DESC}
|
||
|
) {
|
||
|
edges{
|
||
|
node{
|
||
|
frontmatter{
|
||
|
title
|
||
|
slug
|
||
|
date(formatString: "DD.MM.YYYY")
|
||
|
}
|
||
|
html
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}`)
|
||
|
|
||
|
if( result.errors ){ throw result.errors; }
|
||
|
|
||
|
const courseTemplate = path.resolve(`./src/components/templates/courseTemplate.js`);
|
||
|
const courses = result.data.courses.edges;
|
||
|
|
||
|
courses.forEach(({node}) => {
|
||
|
createPage({
|
||
|
path: node.frontmatter.path,
|
||
|
component: courseTemplate,
|
||
|
})
|
||
|
});
|
||
|
|
||
|
///////////////////////////////////////////////////////////////////
|
||
|
|
||
|
const newsTemplate = path.resolve(`./src/components/templates/news.js`);
|
||
|
const posts = result.data.news.edges;
|
||
|
|
||
|
const postsPerPage = 5;
|
||
|
const numberOfNewsItems = posts.length;
|
||
|
const numberOfNewsPages = Math.ceil(numberOfNewsItems / postsPerPage);
|
||
|
|
||
|
|
||
|
for (let pageIndex = 0; pageIndex < numberOfNewsPages; pageIndex++) {
|
||
|
const pageNumber = pageIndex + 1;
|
||
|
const path = pageIndex === 0 ? '/news' : `/news/${pageNumber}`;
|
||
|
const skip = pageIndex * postsPerPage;
|
||
|
|
||
|
function getPreviousPageLink() {
|
||
|
if (!pageIndex) return null
|
||
|
if (pageIndex === 1) return '/news'
|
||
|
return `/news/${pageIndex}`
|
||
|
}
|
||
|
|
||
|
function getNextPageLink() {
|
||
|
if (pageNumber < numberOfNewsPages) return `news/${pageNumber + 1}`
|
||
|
return null
|
||
|
}
|
||
|
|
||
|
createPage({
|
||
|
path,
|
||
|
component: newsTemplate,
|
||
|
context: {
|
||
|
limit: postsPerPage,
|
||
|
skip,
|
||
|
next: getNextPageLink(),
|
||
|
prev: getPreviousPageLink(),
|
||
|
},
|
||
|
})
|
||
|
}
|
||
|
}
|