ttree/outofbandrendering

Last activity on 2 February 2021
  • 4
  • 1
  • 909
composer require ttree/outofbandrendering

A package to render Fusion Out of Band in complex application fun & easy

3.0.1

A package to render Fusion Out of Band in complex application fun & easy

Version
3.0.1
Type
neos-package
Release Date
25.02.2021 08:39:38
Source
git
Distribution
zip
Requires
Requires (dev)
None
Suggest
None
Provides
None
Conflicts
None
Replaces
None
MIT
  • #neoscms
  • #fusion
  • #flow-framework
b5ce5decf7f819331178f1537c355ae4a8571e05

Fusion Out of Band rendering helpers

This package provide some helpers to work with Fusion Out of Band rendering in Neos CMS

Package under development, API can change at any time

How to use ?

Edit your distribution Routes.yaml and add the required routes:

-
  name: 'Ttree.OutOfBandRendering'
  uriPattern: '<TtreeOutOfBandRenderingSubroutes>'
  subRoutes:
    'TtreeOutOfBandRenderingSubroutes':
      package: 'Ttree.OutOfBandRendering'
      variables:
        'defaultUriSuffix': ''

With this configuration you can access the URL endpoint at http://www.domain.com/api/v1/rendering.

Check the Routes.yaml in this package, if you need a custom URL.

Make it work

The endpoint require two parameters:

  • node: the full node path of the rendering node
  • preset: the preset name, check below for information about Presets

You can create preset in two different ways, static presets in Settings.yaml and dynamic presets with your own PHP implementation. A preset is mainly used to limit the Fusion path that can be rendered out of band.

Static Preset

To use static preset, just write something like this in your Settings.yaml:

Ttree:
  OutOfBandRendering:
    presets:
      'marketplace:version':
        path: 'root<Neos.Fusion:Case>/neosMarketPlaceDocument<Neos.Fusion:Matcher>/element<Neos.MarketPlace:Package>/body<Neos.Fusion:Template>/content/main<Neos.Fusion:Array>/package<Neos.MarketPlace:Package>/versions<Neos.MarketPlace:VersionPreview>'

The key marketplace:version is your preset name, and the path the allowed Fusion path to be rendered.

Dynamic Preset

A dynamic preset is more flexible and allow you to generate the Fusion path dynamically based on the given node.

You need a PresetDefintion object, the easy way is to extend the AbstractPresetDefinition like this:

use Ttree\OutOfBandRendering\Domain\Model\AbstractPresetDefinition;
use Neos\ContentRepository\Domain\Model\NodeInterface;

class CustomPresetPresetDefinition extends AbstractPresetDefinition  {

    /**
     * @param NodeInterface $node
     * @return string
     */
    public function getFusionPath(NodeInterface $node) {
        return 'page<Ttree.ArchitectesCh:DefaultPage>/body<Neos.Fusion:Template>/content/main<Neos.Neos:PrimaryContent>/enterpriseProfile<Neos.Fusion:Matcher>/element<Ttree.ArchitectesCh:EnterpriseProfile>/reportSection<Ttree.ArchitectesCh:EnterpriseProfileSection>/content<Ttree.ArchitectesCh:ReportMenu>';
    }
}

The PresetDefinitionInterface force you to defined the following methods:

  • PresetDefinitionInterface::getPriority: Return an integer to define the preset priority (higher has more priority, like in the Flow Framework PropertyMapper
  • PresetDefinitionInterface::getName: Return the name of the preset (used in the endpoint URL)
  • PresetDefinitionInterface::canHandle: Receive the current document node as argument, and allow you to add more logic to decide if a preset can handle the given node
  • PresetDefinitionInterface::getFusionPath: Receive the current document node as argument, must return the Fusion path to render

What's next ?

  • Implement authorization support
  • Add JS module to support content loading (appending, replacing, infinite scrolling, ...)

Acknowledgments

Development sponsored by ttree ltd - neos solution provider.

We try our best to craft this package with a lots of love, we are open to sponsoring, support request, ... just contact us.

License

Licensed under MIT, see LICENSE

The content of the readme is provided by Github
The same vendor provides 48 package(s).