Configuration Forms for Themes and Plugins
Do you want to add some editable options to your plugin or to your theme? That is easily done with configuration forms and some lines of YAML.
Example for a Form Definition
To add a configuration form to your plugin or theme, just add some form-definitions to the YAML-configuration file of your theme or plugins. All form definitions start with the keywords forms
and fields
followed by the definition of the fields:
name: Example Plugin
version: 1.0.0
description: Add a short description
author: Firstname Lastname
homepage: http://your-website.net
licence: MIT
forms:
fields:
layout:
type: select
label: Select a Layout
options:
edgeless: Edgeless
block: Block
classic: Classic
This form-definition will add a selectbox called "layout" to the theme configuration. You can use all fields from the field overview.
Store Configurations
If the user fills out the configuration form of your plugin or theme and clicks on save, then the configuration will be stored in the settings.yaml
-file that you can find in the folder settings
.
If you use the example above for a theme called "exampletheme", then Typemill will store something like this in the settings.yaml-file:
...
themes:
exampletheme:
layout: edgeless
...
If you use a plugin called "exampleplugin", then it looks like this:
...
plugins:
exampleplugin:
layout: edgeless
...
Use Configurations
In the twig-templates of your theme you can use all stored configurations with the settings
-variable:
{{ settings.themes.exampletheme.layout }}
This will print out "edgeless".
In your plugin you can use the stored values with the event onSettingsLoaded
:
<?php
namespace Plugins\Example;
use \Typemill\Plugin;
class Example extends Plugin
{
private $settings;
public static function getSubscribedEvents()
{
return array(
'onSettingsLoaded' => 'onSettingsLoaded'
);
}
# when settings are loaded
public function onSettingsLoaded($settings)
{
# get settings, so you can use them in all methods
$this->settings = $settings->getData();
# or use them directly in this method
$layout = $this->settings['settings']['plugins']['exampleplugin']['layout'];
}
Play Around
As you can see, everything follows a simple logic and is easy to use. If you did not get it yet, no problem! Simply download a plugin or a theme, check the form configurations in the yaml-files and play around with it.