# Resources

The resources component can create new variables, add headers and inject assets to the page. The resources component can be used on any page, layout or partial.

# Available Properties

The following properties are supported by the component.

Property Description
js Array of JavaScript files in the theme assets/js folder
less Array of LESS files in the theme assets/less folder
scss Array of SCSS files in the theme assets/scss folder
css Array of Stylesheet files in the theme assets/css folder
vars Includes variables available on the page or layout.
headers Includes headers with the page response.

# Basic Usage

The following example uses the vars property to create a new variable called activeNav and this variable becomes available to the page life-cycle, this includes layouts for that page or partials that are used on the page. The variable is accessed using the {{ activeNav }} Twig variable.

[resources]
vars[activeNav] = 'blog'
{% if activeNav == 'blog' %}
    <p>The blog is active!</p>
{% endif %}

# Injecting Variables

The resources component lets you define any number of variables on the page. These become available to the layout as a usual Twig variable.

[resources]
vars[activeNav] = 'blog'

You may also use parameters from the page cycle. In the following example the activeNav variable will contain the value found inside the :slug page route.

url = "mypage/:slug"

[resources]
vars[activeNav] = '{{ :slug }}'

This concept also works for component variables. The following example looks up the author by the :slug found in the page route and then assigns the author.id to the authorIdPage page variable.

url = "/author/:slug"

[section author]
handle = "Blog\Author"
identifier = "slug"

[resources]
vars[authorIdPage] = 'Author ID is: {{ author.id }}'

# Injecting Assets

If a layout includes the standard {% scripts %} and {% styles %} tags, then it is possible to inject assets to these placeholders. The assets will be bundled and combined to a single script/style reference.

Assets loaded using the resources component should be in a specific folder inside the theme as described in the available properties. An example could be a partial named blocks/carousel.htm

[resources]
css[] = "blocks/carousel.css"
scss[] = "blocks/carousel.scss"
less[] = "blocks/carousel.less"
js[] = "blocks/carousel.js"
<!-- Carousel Contents Here -->

Now when the partial is loaded on the page, the scripts and stylesheets will be injected to the layout. The assets should be located in the assets/js/blocks/carousel.js and assets/less/blocks/carousel.less directories respectively.

<!-- Assets for the carousel are injected automatically -->
{% partial 'blocks/carousel' %}

TIP

Using the partial twice on the page will only inject the assets once.

# Using Custom Headers

As an example of defining custom headers, you may wish to render XML content on a page instead of HTML content. This is possible by injecting a Content-Type header in to the page and giving it a value of text/xml. This header value will be sent with the response when the page loads.

url = "/blog/rss"

[resources]
headers[Content-Type] = 'text/xml'
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <!-- RSS contents here -->
</rss>