Installation and Overview
Template Resolver for Statamic is a simple utility addon, intended to be used by other addons. It provides a simple utility for selecting and rendering a template based on an entry's blueprint and collection, with support for a fallback default template.
Example use-cases:
Selecting templates dynamically to generate social media images from HTML,
Generating HTML documents on-the-fly, without requiring network requests to the site,
Anything where you need to support customizable templates based on an entry's blueprint/collection details
#Installation
Template Resolver for Statamic may be installed into a Statamic site by running the following command from the root of the project:
1composer require stillat/statamic-template-resolver
#How to Use
You need to create an instance of StringTemplateManager
, and supply the directory to search for templates in.
1<?php
2
3use Stillat\StatamicTemplateResolver\StringTemplateManager;
4
5$manager = new StringTemplateManager(
6 resource_path('views/social_media_images')
7);
Once you have a StringTemplateManager
instance, you can check if a template exists for a given collection/blueprint combination:
1<?php
2
3// ...
4
5if ($manager->hasTemplate($collection, $blueprint)) {
6 // The template exists.
7}
The hasTemplate
method will return true
if a specific template or the default template exists. To create a default template, create a file named _default.antlers.html
or _default.blade.php
at the root of the template folder.
In our example, the default template would need to be placed here:
1views/social_media_images/_default.antlers.html
Specific collection/blueprint templates are stored within a nested directory structure using the following format:
1<template_directory><collection_handle>/<blueprint_handle>.<extension>
For example, if we had a blog
collection, with a post
blueprint, we could create a specific template at the following location:
1views/social_media_images/blog/post.antlers.html
This library supports the following extensions:
.antlers.html
: Renders the template using Statamic's Antlers templating engine.blade.php
: Renders the template using Laravel's Blade templating engine
To render a template with data, we may use the render
method:
1<?php
2
3// ...
4
5$results = $manager->render(
6 'colllection_handle',
7 'blueprint_handle',
8 $data
9);
The render
method will return null
if a template could not be found; $data
is provided as an array, and is required.
We may also optionally modify the template before rendering it by supplying an optional callable as the fourth argument:
1<?php
2
3// Modify the template before its rendered.
4$results = $manager->render(
5 'collection_handle',
6 'blueprint_handle',
7 $data,
8 function ($template, $data) {
9 return mb_strtoupper($template);
10 }
11);
The modifying callable will receive the unmodified template contents as its first argument, and the original data array as the second.