dev symfony2 rapide avec un framework de contenu
TRANSCRIPT
![Page 1: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/1.jpg)
DEV SF2 RAPIDEAVEC UN FRAMEWORK DE
CONTENU
![Page 2: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/2.jpg)
VOTRE DÉVOUÉBertrand Dunogier (@bdunogier)Ingénieur lead extensibilitéeZ Systems, eZ Publish,
http://ez.nohttp://github.com/ezpublish-community
![Page 3: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/3.jpg)
POURQUOI DU DEVRAPIDE ?
ET POURQUOI LE WEB D'ABORD ?
![Page 4: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/4.jpg)
"CONTENT IS KING""Content is where I expect much of the real
money will be made on the Internet, just as it wasin broadcasting"
Bill Gates, 1996
![Page 5: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/5.jpg)
"640K ought to be enough for anybody"
Bill Gates, jamais
![Page 6: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/6.jpg)
ET LES CMS ?
![Page 7: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/7.jpg)
LE WEB CHANGE...
![Page 8: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/8.jpg)
HEUREUSEMENT QUE...
![Page 9: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/9.jpg)
MAIS ET MON CMS ?
![Page 10: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/10.jpg)
PHP AUSSI A CHANGÉ
![Page 11: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/11.jpg)
FONDAMENTAUX
LE CONTENUVersions - Sécurité - Modèle flexible - Sémantique - i18n
![Page 12: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/12.jpg)
S'INTÉGRERET NON
S'IMPOSERcomposer create-project symfony/framework-standard-edition my_project
cd my_project
composer require ezsystems/ezpublish-kernel
![Page 13: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/13.jpg)
INTÉGRERET NON
RÉINVENTERdevenir un élément d'un ensemble et non une fin en soi.
composer require white-october/pagerfanta-bundle 1.0.*composer require whiteoctober/breadcrumbs-bundle ~1.0.1...
![Page 14: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/14.jpg)
DE CMSÀ
CONTENT FRAMEWORK
![Page 15: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/15.jpg)
DU CONCRET
![Page 16: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/16.jpg)
EZ PUBLISHDOMAIN LANGUAGE
![Page 17: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/17.jpg)
REPOSITORY
![Page 18: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/18.jpg)
CONTENT TYPEEnsemble nommé de FIELD DEFINITION.
article, communiqué de presse, image, film...
![Page 19: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/19.jpg)
FIELD DEFINITIONChamp nommé référençant un FIELD TYPE.
titre, fichier, réalisateur, année de sortie, affiche, diamètre...
Traduisible ou non, a ses options propres
![Page 20: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/20.jpg)
FIELD TYPEPlus petite entité de stockage de données. A ses propres
templates d'affichage et d'édition.
ligne de texte, texte riche, relation, adresse email, localisation, case àcocher...
![Page 21: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/21.jpg)
CONTENTUne instance d'un CONTENT TYPE.
Composé de une ou plusieurs VERSION, dont 0..1 publiée.
![Page 22: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/22.jpg)
VERSIONEnsemble de FIELD correspondant aux DEFINITION du
CONTENT TYPE.
Peut avoir 1 à N langues
![Page 23: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/23.jpg)
LOCATIONUn emplacement d'un CONTENT dans l'arbre de contenu.
![Page 24: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/24.jpg)
CONTEXTE D'EXÉCUTIONLE SITEACCESS
Niveau supplémentaire de paramétrage, contextuel auxrequêtes.
ezpublish: siteaccess: default_siteaccess: main_site list: - site_fr - site_en match: Map\Host: site.com: site_en site.fr: site_fr # m.site.com: mobile_site_en
![Page 25: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/25.jpg)
AFFICHER DU CONTENU
![Page 26: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/26.jpg)
ROUTES DYNAMIQUES- Root location - Articles [dossier] - Technologie (fr) ou Technology (en) [catégorie] - Le contenu, simplement [article, location #123]
http://site.fr/Articles/Technologie/Le-contenu-simplementhttp://site.com/Articles/Technology/Content-made-simplehttp://site.com/Articles/Technology/Kontentsu-o-kantan-ni
seront dynamiquement routés verscontroller( "ez_content:viewLocation", {"locationId": 123, "viewType": "full"})
![Page 27: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/27.jpg)
SUB-REQUEST{{ render( controller( "ez_content:viewLocation", {"locationId": 123, "viewType": "full"} )) }}
![Page 28: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/28.jpg)
CHOIX AUTOMATIQUEDU TEMPLATE
ezpublish: default: location_view: block: article: template: "AcmeBundle:full:article.html.twig" match: Identifier\ContentType: [article]
![Page 29: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/29.jpg)
OU DU CONTRÔLEURezpublish: mobile_site: content_view: full: article: template: "AcmeBundle:full:article.html.twig" match: Identifier\ContentType: [article] controller: AcmeBundle:Default:viewLocation
![Page 30: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/30.jpg)
FONCTIONS TWIGNom d'un CONTENT dans la langue en cours
{{ ez_content_name(content) }}
Valeur du FIELD body en allemand{{ ez_field_value(content, 'body', 'ger-DE' ) }}
Rendu HTML du FIELD titre, via son template{{ ez_render_field(content, 'titre') }}
Tester si le FIELD titre est vide{{ ez_is_field_empty(content, 'titre') }}
![Page 31: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/31.jpg)
API DU REPOSITORY
![Page 32: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/32.jpg)
PHPSERVICES
ContentService, LocationService, SectionService, UserService,SearchService...
VALUE OBJECTSContent, ContentCreateStruct, User, UrlAlias, SearchHit...
![Page 33: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/33.jpg)
// charger$contentService = $container->get( 'ezpublish.api.service.content' );$content = $contentService->loadContent( 42 );
// créer$struct = $contentService->newContentCreateStruct( $contentTypeService->loadContentType( 'article' ));$struct->fields['titre']['fre-FR'] = 'Le contenu, simplement';$struct->fields['titre']['eng-GB'] = 'Content made simple';$struct->fields['titre']['jpn-JP'] = 'コンテンツ、ちょうど';
$content = $contentService->createContent( $struct );$contentService->publishVersion( $content, 1 );
![Page 34: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/34.jpg)
RESTHTTP/1.1 GET /api/ezp/v2/content/objects/64Host: site.comAccept: application/vnd.ez.api.Content+json
HTTP/1.1 DELETE /api/ezp/v2/content/objects/64/versions/1Host: site.com
![Page 35: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/35.jpg)
GESTION UTILISATEURSMulti-utilisateurs, basé sur des rôles, extensible
(FOSUserBundle)
![Page 36: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/36.jpg)
CONTENU RICHEEditeur XML, transformation XSLT, format de saisie extensible
![Page 37: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/37.jpg)
CACHE HTTPCONTEXTUEL
$response->headers->set( 'X-Location-Id', $locationId );$response->setVary( 'X-User-Hash' );
![Page 38: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/38.jpg)
INTEGRATIONDBAL, PagerFanta, FOSUserBundle...
![Page 39: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/39.jpg)
EXTENSIBILITÉField Types, storage engines
![Page 40: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/40.jpg)
ET L'INTERFACE ?
![Page 41: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/41.jpg)
ON Y TRAVAILLE
(Avec YUI...)
![Page 42: Dev Symfony2 rapide avec un framework de contenu](https://reader033.vdocuments.mx/reader033/viewer/2022042717/55d57921bb61ebae2f8b4619/html5/thumbnails/42.jpg)
FINDES QUESTIONS ?
@bdunogier http://github.com/bdunogier
http://joind.in/talk/view/11958