Skip to main content
PDF Files
Updated over a year ago

Overview

PDF files can be uploaded to Shogun Frontend using the Media type variable, it works for both CMS and Section. You can upload a single or multiple PDF files, by using the Multiple Values feature.

Once a PDF file is uploaded, the returned object shape will be like this:

{
name: 'Hello World.pdf',
src: '/path/to/hello_world.pdf',
alt: 'Use me as thte title field of the file or as a screen reader'
}

What is the alt text field for?

In this case, the alt attribute is used to set a proper title for your uploaded PDF file.

The alt text field in action.

Section - Media Variable

Given this Section variable:

251

A variable called "doc", (type Media). The Multiple Values options is disabled.

We can display the PDF files uploaded to this variable with the following snippets:

Single PDF file

import React from 'react'

const Component = ({ doc }) => {
if (!doc) return null

return (
<div>
<a href={doc.src} title={doc.name || doc.alt}>Download {doc.name}</a>
</div>
)
}

export default Component

Multiple PDF files

import React from 'react'

const Component = ({ docs = [] }) => (
<div>
{docs.map((doc, i) => (
<div key={`doc-key-${i}`}>
<a href={doc.src} title={doc.name || doc.alt}>Download {doc.name}</a>
</div>
))}
</div>
)

export default Component

CMS - Media Variable

Given the following CMS Group; Books:

A CMS Group called "Books", with two fields; a field called "File", (type Media) and another field called "Name", (type Text).

A CMS Group called "Books", with two fields; a field called "File", (type Media) and another field called "Name", (type Text).

We can create a Reference type variable that targets a specific book:

251

A variable called "Books", (type Reference) with two fields; a field called "File", type Media and another field called "Name", type Text. The Multiple Values option is disabled.

🚧 Don't forget to enable our media field. In our case, the file field.

To display the PDF files uploaded, we can slightly tweak the previous code snippets:

CMS - Single PDF file

import React from 'react'

const Component = ({ book }) => {
if (!book) return null

return (
<div>
<a href={book.file.src} title={book.file.alt}>
Download {book.name}
</a>
</div>
)
}

export default Component

CMS - Multiple PDF Files

import React from 'react'

const Component = ({ books = [] }) => (
<div>
{books.map((book, i) => (
<div key={`book-key-${i}`}>
<a href={book.file.src} title={book.file.alt}>
Download {book.name}
</a>
</div>
))}
</div>
)

export default Component

Did this answer your question?