feat(courses): Add Landing Page content modules

This commit is contained in:
Khaled Garbaya
2017-09-26 14:35:53 +02:00
committed by Benedikt Rötsch
parent e2ceb39e83
commit 0c66b6678c
10 changed files with 68 additions and 10 deletions

View File

@@ -1,9 +1,12 @@
const express = require('express') const express = require('express')
const {getLandingPage} = require('../services/contentful')
const router = express.Router() const router = express.Router()
/* GET home page. */ /* GET home page. */
router.get('/', function (req, res, next) { router.get('/', async function (req, res, next) {
res.render('index', { title: 'Welcome to Contentful university' }) const landingPage = await getLandingPage()
console.log(landingPage.fields.contentModules[1].fields)
res.render('index', { landingPage })
}) })
module.exports = router module.exports = router

View File

@@ -7,12 +7,19 @@ exports.initClient = (config = {space: process.env.CF_SPACE, accessToken: proces
client = createClient(config) client = createClient(config)
previewClient = createClient({...config, host: 'preview.contentful.com'}) previewClient = createClient({...config, host: 'preview.contentful.com'})
} }
exports.getCourses = () => { exports.getCourses = () => {
// to get all the courses we simply request from Contentful all the entries // to get all the courses we simply request from Contentful all the entries
// with the content_type `course` // with the content_type `course`
return client.getEntries({content_type: 'course'}) return client.getEntries({content_type: 'course'})
} }
exports.getLandingPage = () => {
// our Home page is fully configureable via contentful
return client.getEntries({content_type: 'landingPage', 'fields.slug': 'contentful-university'})
.then((response) => response.items[0])
}
exports.getCourse = (slug) => { exports.getCourse = (slug) => {
// the SDK support link resolution only when you request the collection endpoint // the SDK support link resolution only when you request the collection endpoint
// That's why we are using getEntries with a query instead of getEntry(entryId) // That's why we are using getEntries with a query instead of getEntry(entryId)

View File

@@ -5,7 +5,7 @@ block content
if lesson if lesson
p= lesson.fields.description p= lesson.fields.description
else else
p= course.fields.description p= course.fields.description
ul ul
each lesson in course.fields.lessons each lesson in course.fields.lessons
li li

View File

@@ -1,11 +1,22 @@
extends layout extends layout
include mixins/_copyModule
include mixins/_heroImageModule
include mixins/_highlightedCourse
include mixins/_highlightedLessonsModule
block content block content
.container .container
section.hero each module in landingPage.fields.contentModules
.hero__image case module.sys.contentType.sys.id
.featured-cards-list when 'landingPageModuleCopy'
.featured-cards__list +copyModule(module)
.featured-cards__list
.featured-cards__list
when 'landingPageModuleHeroImage'
+heroImageModule(module)
when 'landingPageModuleHighlightedCourse'
+highlightedCourseModule(module)
when 'landingPageModuleHighlightedLessons'
+highlightLessonsModule(module)

View File

@@ -0,0 +1,8 @@
mixin copyModule(module)
.module
.module__copy
h1.module__copy__title #{module.fields.title}
h3.module__copy__headline #{module.fields.headline}
div.module__copy__copy #{module.fields.copy}

View File

@@ -1,7 +1,7 @@
mixin courseCard(course = {fields: {title: '', description: '', categories: [], slug: ''}}) mixin courseCard(course = {fields: {title: '', description: '', categories: [], slug: ''}})
.course .course
.course__categories .course__categories
if(course.fields.categories) if course.fields.categories
each category in course.fields.categories each category in course.fields.categories
a.course__categories--category(href=`categories/${category.fields.slug}`) #{category.title} a.course__categories--category(href=`categories/${category.fields.slug}`) #{category.title}
h1.course__title #{course.fields.title} h1.course__title #{course.fields.title}

View File

@@ -0,0 +1,6 @@
mixin heroImageModule(module)
.module
.module__heroImage
h1.module__heroImage__title #{module.fields.title}
h2.module__heroImage__headline #{module.fields.headline}
img.module__heroImage__image(src=`${module.fields.backgroundImage.fields.file.url}` alt=`${module.fields.backgroundImage.fields.title}`)

View File

@@ -0,0 +1,7 @@
include ./_courseCard
mixin highlightedCourseModule(module)
.module
.module__higlightedCourse
h1.module__higlightedCourse__title #{module.fields.title}
+courseCard(module.course)

View File

@@ -0,0 +1,9 @@
include _lesson
mixin _highlightLessonsModule(module)
.module
.module__higlightedLessons
h1.module__higlightedLessons__title #{module.fields.title}
each lesson in module.fields.lessons
+lesson(lesson)

7
views/mixins/_lesson.pug Normal file
View File

@@ -0,0 +1,7 @@
mixin lesson(lesson)
.lesson
h1.lesson__tilte #{lesson.fields.title}
div.lesson__shortDescription #{lesson.fields.shortDescription}
img.lesson__image(src=`${lesson.fields.image.fields.file.url}` alt=`${lesson.fields.image.fields.title}`)