plasticstudio/modulemanager

Module Manager for SilverStripe - forked from jaedb/modulemanager

Installs: 1 676

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 2

Open Issues: 0

Type:silverstripe-vendormodule

4.0.0 2021-06-22 22:36 UTC

This package is auto-updated.

Last update: 2024-03-23 04:50:31 UTC


README

Description

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.

Dependencies

  • SilverStripe 4

For a Silverstripe CMS 4.x compatible version of this module, please see the 3.x or 4.x release line.

  • Release 4.x uses new namespace (plasticstudio\ModuleManager)
  • Release 3.x uses legacy namespace (Jaedb\ModuleManager)

For a Silverstripe CMS 3.x compatible version of this module, please see the 3 branch, or 2.x release line.

Installation

  1. composer require plasticstudio/ModuleManager
  2. Run /dev/build?flush=1
  3. Setup your Module Positions. There is an initial after_content area setup to get you started.
  4. Insert your Module Positions in your template (ie $ModuleArea(after_content))

Usage

Create a module area

  1. Edit your app/_config/config.yml file to add any additional module areas. Use the following format:
PlasticStudio\ModuleManager\ModuleManager:
  positions:
    {ALIAS}: "{NAME}"
  1. In your template, use the code $ModulePosition(ALIAS) where ALIAS is your position's alias string.
  2. Run dev/build (/dev/build?flush=all)

Create a module instance

  1. Within the Module Manager admin, create a new Module object. The type dropdown will show the list of available module types.
  2. Assign your new Module object to one of the positions you configured in config.yml.

Build a custom module type

  1. 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;
  }	
}
  1. Create your template file app/templates/{NameSpace}}/MyModule.ss:
  <div class="module module_my-module">
  	<h3>$Title</h3>
  	<div class="module-content">
          $MyField
  	</div>
  </div>
  1. Perform a build and flush (/dev/build?flush=all)
  2. Now you can create your custom module type

Modules inheritance

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.

  1. Open your page, and navigate to the Modules tab
  2. Check Inherit Modules and Save your page.
  3. You can apply this inheritance further up the page hierarchy if required.