building a CMS for
ambitious editors
history
born under
the TYPO3 umbrella
goals
foundation
FLOW
full stack PHP framework
yet an other framework
convention over
configuration
security framework
privilegeTargets:
'TYPO3FlowSecurityAuthorizationPrivilegeMethodMethodPrivilege':
'Acme.MyPackage:RestrictedController.cus...
roles:
'Acme.MyPackage:Customer':
privileges:
-
privilegeTarget: 'Acme.MyPackage:RestrictedController.customerAction'
perm...
security CLI helpers
$ ./flow security:showunprotectedactions
TYPO3NeosControllerBackendContentController
initializeUploadAssetAction
initializ...
AOP
help with single
responsibility principle
danger zone
We compile your code
Powerful Reflection API
@FlowCompileStatic
/**
* Returns a map of action method names and their parameters.
*
* @param TYPO3FlowObjectObjectManagerInterface $objectM...
NEOS is just a package
NEOS Content Repository
where content lives
yaml configuration
'My.Package:SpecialHeadline':
superTypes:
'TYPO3.Neos:Content': true
ui:
label: 'Special Headline'
group: 'general'
proper...
inspired by PHPCR
editing content
editor experience
workspace
content dimensions
contents lives
in multiple contexts
WYSIFTW
developer
don’t hide features
create values
flexible content structure
modern rendering stack
fusion
prototype(Vendor:Staff) < prototype(TYPO3.Neos:Content) {
templatePath = ‘resource://Vendor.Site/Private/Templates/Element...
prototype(Vendor:Staff) < prototype(TYPO3.Neos:Content) {
templatePath = ‘resource://Vendor.Site/Private/Templates/Element...
prototype(Vendor:YourTwoColumns) {
prototype(Vendor:Staff) {
templatePath = ‘resource://Vendor.Site/Private/Templates/Comp...
prototype(Vendor:StaffListing) < prototype(Flowpack.Listable:Listable) {
@context.limit = 10
collection = ${q(site).find('...
cache on steroid
prototype(Vendor:StaffListingItem) {
@cache {
mode = 'cached'
maximumLifetime = '86400'
entryIdentifier {
node = ${node}
}...
much much more
open to organize a workshop to build
something on top of NEOS
from the lab
CQRS
for the content repository
touch points
neos.io
hello@ttree.ch - @ttreeagency - github.com/ttreeagency
tt ttree
digital beans
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Liiptalk Neos CMS
Prochain SlideShare
Chargement dans…5
×

Liiptalk Neos CMS

221 vues

Publié le

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

Publié dans : Technologie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
221
Sur SlideShare
0
Issues des intégrations
0
Intégrations
0
Actions
Partages
0
Téléchargements
2
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Liiptalk Neos CMS

  1. 1. building a CMS for ambitious editors
  2. 2. history
  3. 3. born under the TYPO3 umbrella
  4. 4. goals
  5. 5. foundation
  6. 6. FLOW full stack PHP framework
  7. 7. yet an other framework
  8. 8. convention over configuration
  9. 9. security framework
  10. 10. privilegeTargets: 'TYPO3FlowSecurityAuthorizationPrivilegeMethodMethodPrivilege': 'Acme.MyPackage:RestrictedController.customerAction': matcher: 'method(AcmeMyPackageControllerRestrictedController-> customerAction())' 'Acme.MyPackage:RestrictedController.adminAction': matcher: 'method(AcmeMyPackageControllerRestrictedController-> (admin|drop)Action())’ 'Acme.MyPackage:editOwnPost': matcher: ‘method(AcmeMyPackageControllerPostController-> editAction(post.owner == current.userService.currentUser))'
  11. 11. 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
  12. 12. security CLI helpers
  13. 13. $ ./flow security:showunprotectedactions TYPO3NeosControllerBackendContentController initializeUploadAssetAction initializeCreateImageVariantAction TYPO3NeosControllerLoginController initializeIndexAction TYPO3NeosControllerServiceWorkspacesController initializeUpdateAction TtreeCloudButlerControllerJobController initializeRegisterAction
  14. 14. AOP
  15. 15. help with single responsibility principle
  16. 16. danger zone
  17. 17. We compile your code
  18. 18. Powerful Reflection API
  19. 19. @FlowCompileStatic
  20. 20. /** * Returns a map of action method names and their parameters. * * @param TYPO3FlowObjectObjectManagerInterface $objectManager * @return array Array of method parameters by action name * @FlowCompileStatic */ static public function getActionMethodParameters($objectManager) { $reflectionService = $objectManager->get( 'TYPO3FlowReflectionReflectionService'); $className = get_called_class(); $methodParameters = $reflectionService->getMethodParameters($className, get_class_methods($className)); foreach ($methodParameters as $parameterName => $parameterInfo) { ... } return $methodParameters; }
  21. 21. NEOS is just a package
  22. 22. NEOS Content Repository
  23. 23. where content lives
  24. 24. yaml configuration
  25. 25. '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
  26. 26. inspired by PHPCR
  27. 27. editing content
  28. 28. editor experience
  29. 29. workspace
  30. 30. content dimensions
  31. 31. contents lives in multiple contexts
  32. 32. WYSIFTW
  33. 33. developer
  34. 34. don’t hide features
  35. 35. create values
  36. 36. flexible content structure
  37. 37. modern rendering stack
  38. 38. fusion
  39. 39. 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')} }
  40. 40. 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’)} staffIdentifier.@process.callErp = ${ErpApi.getStaffDetails(value)} }
  41. 41. 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’)} staffPageLink.@process.callErp = ${ErpApi.getStaffUri(value)} } }
  42. 42. 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' }
  43. 43. cache on steroid
  44. 44. prototype(Vendor:StaffListingItem) { @cache { mode = 'cached' maximumLifetime = '86400' entryIdentifier { node = ${node} } entryTags { 1 = ${'Node_' + documentNode.identifier} } } }
  45. 45. much much more open to organize a workshop to build something on top of NEOS
  46. 46. from the lab
  47. 47. CQRS for the content repository
  48. 48. touch points
  49. 49. neos.io
  50. 50. hello@ttree.ch - @ttreeagency - github.com/ttreeagency tt ttree digital beans

×