SlideShare a Scribd company logo
1 of 33
Download to read offline
Un CMS in 25 minuti 
Come assemblare i componenti del Symfony CMF 
(e non solo) per creare qualcosa che funzioni
Un anno fa 
Un CMS in 25 ore 
e una vita per capire 
cosa ho combinato 
Come assemblare i componenti del Symfony CMF 
(e non solo) per creare qualcosa che funzioni
Un CMS in 30 sec 
SE 
Oggi 
ho capito cosa c’è dietro 
Come assemblare i componenti del Symfony CMF 
(e non solo) per creare qualcosa che funzioni
Cosa non è il CMF
Cosa è il CMF 
https://github.com/symfony-cmf
Possiamo creare cose grandi
… o meno
composer.json 
"require": { 
"symfony-cmf/symfony-cmf": "1.1.*", 
"jackalope/jackalope-doctrine-dbal": "1.1.*", 
"sonata-project/doctrine-phpcr-admin-bundle": "1.1.*", 
"sonata-project/doctrine-orm-admin-bundle": "~2.2", 
"sonata-project/media-bundle": "~2.3@dev", 
"tilleuls/ckeditor-sonata-media-bundle": "dev-master", 
"egeloen/ckeditor-bundle": “~2.0" 
}
Bundles 
! 
• CoreBundle 
• RoutingBundle 
• MenuBundle 
• TreeBrowserBundle 
• BlockBundle 
! 
• RoutingAutoBundle 
• MediaBundle 
• CreateBundle 
• SearchBundle 
• SeoBundle
Documentazione
Read the source Luke 
• ContentBundle 
• SimpleCmsBundle 
• BlogBundle
JCR 
The JSR-283 and 333 specification defines an 
API for a Content Repository (CR) 
PHPCR 
The PHP Content Repository Interfaces aims 
to provide that API in PHP
doctrine/ 
DoctrinePHPCRBundle 
doctrine/phpcr-odm 
jackalope/jackalope 
midgard/phpcr 
Doctrine PHPCR ODM 
implementation layer 
SymfonyBundle 
PHPCR 
CR JCR-like 
implementation
jackalope/jackalope-jackrabbit 
jackalope/jackalope-doctrine- 
dbal 
midgard has built-it 
transport layer 
jackalope/jackalope 
midgard/phpcr 
PHPCR Transport 
implementation 
Storage 
Jackrabbit 
MySQL, SQLite, Postgres 
MySQL, SQLite, Postgres 
PHPCR 
CR JCR-like 
implementation
Jackrabbit 
Derby 
Oracle 
MySQL 
… 
Filesystem
SfDay 2014 live webcam
Contents cms! 
contents 
primo 
tortellini 
lasagne 
tagliatelle 
secondo 
abbacchio 
bagnacauda 
casadei 
menu 
primi 
secondi 
chi-siamo 
! 
Struttura ad albero non 
solo per gli “articoli” 
ma anche per 
menu, rotte, …
Esempio di articolo con 
annotazione PHPCR
Find e remove di 
documenti
Routing
Routing 
cmf_routing:" 
chain:" 
routers_by_id:" 
router.default: 200" 
cmf_routing.dynamic_router: 100"
Routing 
cmf_routing:" 
dynamic:" 
generic_controller:oln.content.controller:contentAction" 
controllers_by_type:" 
pippo: ideato.controller:indexAction" 
controllers_by_class:" 
IdeatoMyBundleDocumentCategory:" 
" " " content.controller:categoryAction" 
IdeatoMyBundleDocumentArticle:" 
" " " content.controller:articleAction" 
templates_by_class:" 
IdeatoMyBundleDocumentPage:" 
" " " " IdeatoMyBundle:Default:content.html.twig
Menù 
• Menu e MenuNode 
• possono essere collegati a documenti 
• possono essere delle rotte di sf (comprese di 
parametri) 
• possono essere dei link verso URI
Menù 
$menusRoot = $manager->find(null, “/cms/menus");" 
$menu = new Menu();" 
$menu->setPosition($menusRoot, "main");" 
$manager->persist($menu);" 
! 
$doc = $manager->find(null, “/cms/contents/mydoc“);" 
$menuNode = new MenuNode();" 
$menuNode->setPosition($menu, $doc->getName());" 
$menuNode->setLabel($doc->getTitle());" 
$menuNode->setContent($doc);" 
$manager->persist($menu);" 
$manager->flush();
…e il backend?
Concludendo 
• CMF è maturo 
• tanti piccoli componenti riutilizzabili 
• è possibile inserirlo su progetti Sf2 già realizzati 
• documentazione 
• ideato lo utilizza su progetti reali 
• viene utilizzato da eZPublish, Drupal 8, …
Grazie!
Manuel Baldassarri! 
Partner & COO at Ideato 
! 
Twitter K3a 
eMail mb@ideato.it 
https://joind.in/talk/view/12213
• https://www.flickr.com/photos/clarkwestfield/ 
2176617708 
• https://www.flickr.com/photos/rodrigogalindez/ 
4637637337

More Related Content

Similar to Un CMS in 25min con Symfony CMF

Similar to Un CMS in 25min con Symfony CMF (20)

Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Sviluppare moduli per il client web
Sviluppare moduli per il client webSviluppare moduli per il client web
Sviluppare moduli per il client web
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
 
Moduli su Zend Framework 2: come sfruttarli
Moduli su Zend Framework 2: come sfruttarliModuli su Zend Framework 2: come sfruttarli
Moduli su Zend Framework 2: come sfruttarli
 
Node.js - Server Side Javascript
Node.js - Server Side JavascriptNode.js - Server Side Javascript
Node.js - Server Side Javascript
 
Sviluppare Plugin per WordPress
Sviluppare Plugin per WordPress Sviluppare Plugin per WordPress
Sviluppare Plugin per WordPress
 
Automatizzare tutto con Azure Resource Manager
Automatizzare tutto con Azure Resource ManagerAutomatizzare tutto con Azure Resource Manager
Automatizzare tutto con Azure Resource Manager
 
Asp.NET MVC Framework
Asp.NET MVC FrameworkAsp.NET MVC Framework
Asp.NET MVC Framework
 
Introduzione a..django
Introduzione a..djangoIntroduzione a..django
Introduzione a..django
 
8 - Web App e CMS - 16/17
8 - Web App e CMS - 16/178 - Web App e CMS - 16/17
8 - Web App e CMS - 16/17
 
CakePhp Linux Day Torino '09
CakePhp Linux Day Torino '09CakePhp Linux Day Torino '09
CakePhp Linux Day Torino '09
 
7 - Web application e CMS
7 - Web application e CMS7 - Web application e CMS
7 - Web application e CMS
 
Working between the clouds
Working between the cloudsWorking between the clouds
Working between the clouds
 
07 - Web apps e CMS
07 - Web apps e CMS07 - Web apps e CMS
07 - Web apps e CMS
 
Ddive Xpage852
Ddive Xpage852Ddive Xpage852
Ddive Xpage852
 
Node js dev day napoli 2016
Node js dev day napoli 2016Node js dev day napoli 2016
Node js dev day napoli 2016
 
Plone Cms
Plone CmsPlone Cms
Plone Cms
 
Presentazione wi400 i5
Presentazione wi400 i5Presentazione wi400 i5
Presentazione wi400 i5
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 

More from Manuel Baldassarri

More from Manuel Baldassarri (8)

Swoole Overview
Swoole OverviewSwoole Overview
Swoole Overview
 
Videogiochi in PHP 👾
Videogiochi in PHP 👾Videogiochi in PHP 👾
Videogiochi in PHP 👾
 
From * to Symfony2
From * to Symfony2From * to Symfony2
From * to Symfony2
 
Automazione quotidiana in php
Automazione quotidiana in phpAutomazione quotidiana in php
Automazione quotidiana in php
 
Symfony2 security layer
Symfony2 security layerSymfony2 security layer
Symfony2 security layer
 
Symfony CMF: un nuovo paradigma per la gestione dei contenuti
Symfony CMF: un nuovo paradigma per la gestione dei contenutiSymfony CMF: un nuovo paradigma per la gestione dei contenuti
Symfony CMF: un nuovo paradigma per la gestione dei contenuti
 
Ant vs Phing
Ant vs PhingAnt vs Phing
Ant vs Phing
 
Form refactoring
Form refactoringForm refactoring
Form refactoring
 

Un CMS in 25min con Symfony CMF

  • 1. Un CMS in 25 minuti Come assemblare i componenti del Symfony CMF (e non solo) per creare qualcosa che funzioni
  • 2. Un anno fa Un CMS in 25 ore e una vita per capire cosa ho combinato Come assemblare i componenti del Symfony CMF (e non solo) per creare qualcosa che funzioni
  • 3. Un CMS in 30 sec SE Oggi ho capito cosa c’è dietro Come assemblare i componenti del Symfony CMF (e non solo) per creare qualcosa che funzioni
  • 4. Cosa non è il CMF
  • 5. Cosa è il CMF https://github.com/symfony-cmf
  • 8. composer.json "require": { "symfony-cmf/symfony-cmf": "1.1.*", "jackalope/jackalope-doctrine-dbal": "1.1.*", "sonata-project/doctrine-phpcr-admin-bundle": "1.1.*", "sonata-project/doctrine-orm-admin-bundle": "~2.2", "sonata-project/media-bundle": "~2.3@dev", "tilleuls/ckeditor-sonata-media-bundle": "dev-master", "egeloen/ckeditor-bundle": “~2.0" }
  • 9. Bundles ! • CoreBundle • RoutingBundle • MenuBundle • TreeBrowserBundle • BlockBundle ! • RoutingAutoBundle • MediaBundle • CreateBundle • SearchBundle • SeoBundle
  • 11.
  • 12. Read the source Luke • ContentBundle • SimpleCmsBundle • BlogBundle
  • 13. JCR The JSR-283 and 333 specification defines an API for a Content Repository (CR) PHPCR The PHP Content Repository Interfaces aims to provide that API in PHP
  • 14. doctrine/ DoctrinePHPCRBundle doctrine/phpcr-odm jackalope/jackalope midgard/phpcr Doctrine PHPCR ODM implementation layer SymfonyBundle PHPCR CR JCR-like implementation
  • 15. jackalope/jackalope-jackrabbit jackalope/jackalope-doctrine- dbal midgard has built-it transport layer jackalope/jackalope midgard/phpcr PHPCR Transport implementation Storage Jackrabbit MySQL, SQLite, Postgres MySQL, SQLite, Postgres PHPCR CR JCR-like implementation
  • 16. Jackrabbit Derby Oracle MySQL … Filesystem
  • 17. SfDay 2014 live webcam
  • 18. Contents cms! contents primo tortellini lasagne tagliatelle secondo abbacchio bagnacauda casadei menu primi secondi chi-siamo ! Struttura ad albero non solo per gli “articoli” ma anche per menu, rotte, …
  • 19. Esempio di articolo con annotazione PHPCR
  • 20. Find e remove di documenti
  • 22. Routing cmf_routing:" chain:" routers_by_id:" router.default: 200" cmf_routing.dynamic_router: 100"
  • 23. Routing cmf_routing:" dynamic:" generic_controller:oln.content.controller:contentAction" controllers_by_type:" pippo: ideato.controller:indexAction" controllers_by_class:" IdeatoMyBundleDocumentCategory:" " " " content.controller:categoryAction" IdeatoMyBundleDocumentArticle:" " " " content.controller:articleAction" templates_by_class:" IdeatoMyBundleDocumentPage:" " " " " IdeatoMyBundle:Default:content.html.twig
  • 24. Menù • Menu e MenuNode • possono essere collegati a documenti • possono essere delle rotte di sf (comprese di parametri) • possono essere dei link verso URI
  • 25. Menù $menusRoot = $manager->find(null, “/cms/menus");" $menu = new Menu();" $menu->setPosition($menusRoot, "main");" $manager->persist($menu);" ! $doc = $manager->find(null, “/cms/contents/mydoc“);" $menuNode = new MenuNode();" $menuNode->setPosition($menu, $doc->getName());" $menuNode->setLabel($doc->getTitle());" $menuNode->setContent($doc);" $manager->persist($menu);" $manager->flush();
  • 27.
  • 28.
  • 29.
  • 30. Concludendo • CMF è maturo • tanti piccoli componenti riutilizzabili • è possibile inserirlo su progetti Sf2 già realizzati • documentazione • ideato lo utilizza su progetti reali • viene utilizzato da eZPublish, Drupal 8, …
  • 32. Manuel Baldassarri! Partner & COO at Ideato ! Twitter K3a eMail mb@ideato.it https://joind.in/talk/view/12213
  • 33. • https://www.flickr.com/photos/clarkwestfield/ 2176617708 • https://www.flickr.com/photos/rodrigogalindez/ 4637637337