PyroCMS: Creating Themes

The start of my journey with PryoCMS 3 was learning how to make custom themes. I originally learned how to develop with PyroCMS 2.2 where I did not need to use the command line to create themes; it was entirely file-based. PyroCMS 3 was entirely different!

PHP's Artisan

Theme creation is done using Artisan in the command line. Ensure you are in your base PryoCMS 3 directory where a file called artisan should be visible.

Here is the base command:

php artisan

If you have a single-site installation of PryoCMS 3 then you can use the command:

php artisan make:addon {vendor}.theme.{slug}

and if you are using the Sites Module and want to create a theme for a particular site, the command looks like this:

php artisan make:addon {vendor}.theme.{slug} --app={reference}

Now, let's break down the placeholders I have left in these commands.

  • {vendor}: Typically your Github username. E.g. finnito for me.
  • {slug}: Slug representing the theme name. E.g. test.
  • {reference}: Slug of the site in the Sites Module. E.g. finnito.

If you need to find your site slug, navigate to /admin/sites and each entry should have a unique reference. You do not need to encase any of the variables in quote marks.

Putting it Together

Putting this together, to create a theme with slug test for a site with reference finnito using my vendor slug finnito we have:

php artisan make:addon finnito.theme.test --app=finnito


If you get an error that looks something like this:

In Container.php line 752: Class Finnito\FinnitoTheme\FinnitoTheme does not exist

you will need to run the following command:

composer dump-autoload

This gets Composer to optimise its autoload files and will fix this error.

Installing Themes

You can now install the theme by navigating to /admin/settings and setting the theme.

It was quite a journey for me to learn how to make a theme in PryoCMS 3 using Artisan. I was originally trying to create individual files and to replicate the file structure of a test theme, and this was a disaster. Now that I have internalised the usage of Artisan and Composer for this, it is very simple and speedy!