The requirements class takes care of including CSS and JavaScript into your applications. This is preferred to hard coding any references in the <head> tag of your template, as it enables a more flexible handling through the Requirements class.

Template Requirements API


<% require themedCSS("TreeSelector") %>
Requiring assets from the template is restricted compared to the PHP API.

PHP Requirements API



class MyCustomController extends Controller {

	public function init() {


CSS Files

Requirements::css($path, $media);



Javascript Files



$vars = array(
	"EditorCSS" => "cms/css/editor.css",


In this example, editor.template.js is expected to contain a replaceable variable expressed as $EditorCSS.

Custom Inline CSS or Javascript

You can also quote custom script directly. This may seem a bit ugly, but is useful when you need to transfer some kind of 'configuration' from the database in a raw format. You'll need to use the heredoc syntax to quote JS and CSS, this is generally speaking the best way to do these things - it clearly marks the copy as belonging to a different language.

  alert("hi there");

  .tree li.$className {
	background-image: url($icon);

Combining Files

You can concatenate several CSS or javascript files into a single dynamically generated file. This increases performance by reducing HTTP requests.

To make debugging easier in your local environment, combined files is disabled when running your application in dev mode.

By default it stores the generated file in the assets/ folder, but you can configure this by pointing the Requirements.combined_files_folder configuration setting to a specific folder.


  combined_files_folder: '_combined'
If SilverStripe doesn't have permissions on your server to write these files it will default back to including them individually. SilverStripe **will not** rewrite your paths within the file.


$printStylesheets = array(


By default, all requirements files are flushed (deleted) when ?flush querystring parameter is set. This can be disabled by setting the Requirements.disable_flush_combined config to true.

Clearing assets


Clears all defined requirements. You can also clear specific requirements.



Requirements can also be explicitly blocked from inclusion, which is useful to avoid conflicting JavaScript logic or CSS rules. These blocking rules are independent of where the block() call is made. It applies both for already included requirements, and ones included after the block() call.

One common example is to block the core jquery.js added by various form fields and core controllers, and use a newer version in a custom location. This assumes you have tested your application with the newer version.


Inclusion Order


Inclusion order is both relevant for CSS and Javascript files in terms of dependencies, inheritance and overlays - be careful when messing with the order of requirements.

Javascript placement



Requirements.force_js_to_bottom, will force SilverStripe to write the Javascript to the bottom of the page body, even if there is an earlier script tag.

If the Javascript files are preferred to be placed in the <head> tag rather than in the <body> tag, Requirements.write_js_to_body should be set to false.


API Documentation