Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Liiptalk Neos CMS

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Liiptalk Neos CMS

Neos CMS introduction at the Liiptalk on the 27th of september 2016, record available https://www.youtube.com/watch?v=J6q5Hk7Dr4k

Avatar for Dominique Feyer

Dominique Feyer

September 27, 2016
Tweet

More Decks by Dominique Feyer

Other Decks in Technology

Transcript

  1. roles: 'Acme.MyPackage:Customer': privileges: - privilegeTarget: 'Acme.MyPackage:RestrictedController.customerAction' permission: GRANT - privilegeTarget:

    'Acme.MyPackage:RestrictedController.adminAction' permission: GRANT - privilegeTarget: 'Acme.MyPackage:RestrictedController.editOwnPost' permission: GRANT 'Acme.MyPackage:Customer': privileges: - privilegeTarget: 'Acme.MyPackage:RestrictedController.customerAction' permission: GRANT 'Acme.MyPackage:PrivilegedCustomer': parentRoles: ['Acme.MyPackage:Customer'] privileges: - privilegeTarget: 'Acme.MyPackage:RestrictedController.editOwnPost' permission: GRANT
  2. AOP

  3. /** * Returns a map of action method names and

    their parameters. * * @param \TYPO3\Flow\Object\ObjectManagerInterface $objectManager * @return array Array of method parameters by action name * @Flow\CompileStatic */ static public function getActionMethodParameters($objectManager) { $reflectionService = $objectManager->get( 'TYPO3\Flow\Reflection\ReflectionService'); $className = get_called_class(); $methodParameters = $reflectionService->getMethodParameters($className, get_class_methods($className)); foreach ($methodParameters as $parameterName => $parameterInfo) { ... } return $methodParameters; }
  4. 'My.Package:SpecialHeadline': superTypes: 'TYPO3.Neos:Content': true ui: label: 'Special Headline' group: 'general'

    properties: headline: type: 'string' defaultValue: 'My Headline Default' ui: inlineEditable: true validation: 'TYPO3.Neos/Validation/StringLengthValidator': minimum: 1 maximum: 255
  5. prototype(Vendor:Staff) < prototype(TYPO3.Neos:Content) { templatePath = ‘resource://Vendor.Site/Private/Templates/ElementName.html' headline = ${q(node).property('headline')}

    subheadline = ${q(node).property('subheadline')} text = ${q(node).property('text')} image = ${q(node).property('image')} }
  6. prototype(Vendor:Staff) < prototype(TYPO3.Neos:Content) { templatePath = ‘resource://Vendor.Site/Private/Templates/ElementName.html' headline = ${q(node).property('headline')}

    subheadline = ${q(node).property('subheadline')} text = ${q(node).property('text')} image = ${q(node).property(‘image’)} staffIdentifier = ${q(node).property(‘staffIdentifier’)} [email protected] = ${ErpApi.getStaffDetails(value)} }
  7. prototype(Vendor:YourTwoColumns) { prototype(Vendor:Staff) { templatePath = ‘resource://Vendor.Site/Private/Templates/Compact.html' } } prototype(Vendor:StaffDirectory.Document)

    { prototype(Vendor:Staff) { templatePath = ‘resource://Vendor.Site/Private/Templates/Square.html' staffPageLink = ${q(node).property(‘staffIdentifier’)} [email protected] = ${ErpApi.getStaffUri(value)} } }
  8. prototype(Vendor:StaffListing) < prototype(Flowpack.Listable:Listable) { @context.limit = 10 collection = ${q(site).find('[instanceof

    Vendor:Staff]’).get()} itemRenderer = ‘Vendor:StaffListingItem' } prototype(Vendor:StaffListingItem) < prototype(Vendor:Staff) { templatePath = ‘resource://Vendor.Site/Private/Templates/ListingItem.html' }
  9. prototype(Vendor:StaffListingItem) { @cache { mode = 'cached' maximumLifetime = '86400'

    entryIdentifier { node = ${node} } entryTags { 1 = ${'Node_' + documentNode.identifier} } } }