Creating Templates for Each Individual Entry Type

If you have a section with multiple Entry Types and you want to give each one its own template, here’s a quick tutorial that shows how you can do it.

For the purposes of this tutorial, we’ll call our section “Media”, and give it a Template setting of “media/_entry”. Our section will have three Entry Types: “Audio”, “Photo”, and “Video”.

First you’ll need to create the actual templates for each Entry Type, as well as the main section template. We’ll put them in a hidden _types folder alongside media/_entry.html. Our complete craft/templates/media/ folder might end up looking something like this:

  • media/_entry.html
  • media/_types/audio.html
  • media/_types/photo.html
  • media/_types/video.html
  • media/index.html

Now that we’ve got our templates in place, with the template names matching the Entry Type handles, routing requests to the Entry Type-specific templates will be as simple as an {% include %} tag.

Here’s media/_entry.html:

{% include "media/_types/" ~ entry.type %}

If you have any entry types that don’t need their own special template, you can create a default template located at media/_types/default.html, and tell the {% include %} tag to use it as a fallback:

{% include ["media/_types/" ~ entry.type, "media/_types/default"] %}

That’s it! When a request comes in for one of the Media section’s entries, it will get routed to media/_entry.html, which in turn will include the appropriate Entry Type template (or possibly the fallback template). The entry variable that automatically gets set in media/_entry.html will also be available to the included templates.

Applies to Craft CMS 3.