Manage site-wide modules (aka widgets) and select the pages on which they are to appear. This allows you to repurpose content across your website, and build easily modular content elements.
- SilverStripe 4
composer require jaedb/ModuleManager
- Run /dev/build?flush=1
- Setup your Module Positions. There is an initial
after_content
area setup to get you started. - Insert your Module Positions in your template (ie
$ModuleArea(after_content)
)
- Edit your
app/_config/config.yml
file to add any additional module areas. Use the following format:
Jaedb\ModuleManager\ModuleManager:
positions:
{ALIAS}: "{NAME}"
- In your template, use the code
$ModulePosition(ALIAS)
where ALIAS is your position's alias string. - Run dev/build (
/dev/build?flush=all
)
- Within the Module Manager admin, create a new
Module
object. The type dropdown will show the list of available module types. - Assign your new
Module
object to one of the positions you configured inconfig.yml
.
- Create a new DataObject file
app/src/Modules/MyModule.php
:
<?php
class MyModule extends Module {
// set module names
private static $singular_name = 'My Module';
private static $plural_name = 'My Modules';
private static $description = 'This is my great custom module';
// your custom fields
static $db = array(
'MyField' => 'Varchar(255)'
);
// create cms fields
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.Main', TextField::create('MyField', 'My field'));
return $fields;
}
}
- Create your template file
app/templates/Modules/MyModule.ss
:
<div class="module module_my-module">
<h3>$Title</h3>
<div class="module-content">
$MyField
</div>
</div>
- Perform a build and flush (
/dev/build?flush=all
) - Now you can create your custom module type
To avoid having to set a module on each page within a section, you can set your pages to inherit it's parent page's modules.
- Open your page, and navigate to the Modules tab
- Check Inherit Modules and Save your page.
- You can apply this inheritance further up the page hierarchy if required.