Skip to content

Latest commit

 

History

History
94 lines (67 loc) · 3.96 KB

README.md

File metadata and controls

94 lines (67 loc) · 3.96 KB

#Play-govuk-demo

This is a simple example of how to make use of govuk_template_play in your play applications.

##Get the templates

First step, download the templates. Here we use git submodules to link to the govuk_template_play repo directly.

git submodule add git@github.com:alphagov/govuk_template_play.git
git submodule init
git submodule update

You can also download the compiled sources as a tar ball from govuk_template_play/releases

##Add the templates to Plays Template Generator

Play uses the property sourceGenerators to know what files should be compiled as templates. To make use of the govuk_template.scala.html file we need to include it in the sourceGenerators property.

Make the following changes to your project definition. This will add a new SettingsKey that refers to our template directory and includes it in the sourceGenerators property.

#####project/Build.scala

val templateKey = SettingKey[File]("template-dir", "Template directory for govuk_template_play")

lazy val main = play.Project(appName, appVersion, appDependencies).settings(
  templateKey in Compile <<= baseDirectory(_ / "govuk_template_play"),
  sourceGenerators in Compile <+= (state, templateKey in Compile, sourceManaged in Compile, templatesTypes, templatesImport) map ScalaTemplates)

##Serve the govuk_template_play assets to the template

In order for the govuk_template.scala.html template to access assets we need to add them to the playAssetsDirectories and serve them off the url /template/*file.

To do this we will create our own AssetBuilder which will keep reverse routing in our own templates cleaner than using the existing route.Assets to serve template assets.

Create the following file: #####app/controllers/Template.scala

package controllers
object Template extends AssetBuilder

Add the following definition to your routes file: #####conf/routes

GET    /template/*file    controllers.Template.at("/govuk_template_play/assets", file)

And finally we need to add the govuk_template_play/assets folder to the playAssetsDirectories property in our Build definition

#####project/Build.scala

...
lazy val main = play.Project(appName, appVersion, appDependencies).settings(
  playAssetsDirectories <+= baseDirectory { _ / "govuk_template_play" / "assets" },
...

##Init the submodule

Final thing we need to do is ensure the submodule is initialised. To do this we will create a script that can be hooked in as part of your upstart script.

Create the following sh script #####update-template.sh

echo "Updating govuk_template_play"
git submodule init
git submodule update

Now we will execute this script anytime play tries to compile the app. Make the following changes to your Build definition:

#####project/Build.scala

...
val updateTemplate = TaskKey[Unit]("update-template", "Updates the govuk_template_play")
val updateTemplateTask = updateTemplate := {
  "./update-template.sh".!
}

lazy val main = play.Project(appName, appVersion, appDependencies).settings(
  updateTemplateTask,
  compile <<= (compile in Compile) dependsOn updateTemplate,
...

Done!

##Using the templates

A simple example of how to use the template can be found in main.scala