Post on 01-Jul-2015
description
Un CMS in 25 minutiCome assemblare i componenti del Symfony CMF
(e non solo) per creare qualcosa che funzioni
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 anno fa
Un CMS in 30 sec SE
ho capito cosa c’è dietroCome assemblare i componenti del Symfony CMF
(e non solo) per creare qualcosa che funzioni
Oggi
Cosa non è il 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 layerSymfonyBundle
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
Jackrabbit
MySQL, SQLite, Postgres
Storage
MySQL, SQLite, Postgres
PHPCR CR JCR-like
implementation
Jackrabbit
Derby
Oracle
Filesystem
MySQL
…
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"
Routingcmf_routing:" dynamic:" generic_controller:oln.content.controller:contentAction" controllers_by_type:" pippo: ideato.controller:indexAction" controllers_by_class:" Ideato\MyBundle\Document\Category:"" " " content.controller:categoryAction" Ideato\MyBundle\Document\Article:"" " " content.controller:articleAction" templates_by_class:" Ideato\MyBundle\Document\Page:"" " " " 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!
https://joind.in/talk/view/12213
Manuel Baldassarri!Partner & COO at Ideato
!
Twitter K3a eMail mb@ideato.it
• https://www.flickr.com/photos/clarkwestfield/2176617708
• https://www.flickr.com/photos/rodrigogalindez/4637637337