Dev Symfony2 rapide avec un framework de contenu

42
DEV SF2 RAPIDE AVEC UN FRAMEWORK DE CONTENU

Transcript of Dev Symfony2 rapide avec un framework de contenu

Page 1: Dev Symfony2 rapide avec un framework de contenu

DEV SF2 RAPIDEAVEC UN FRAMEWORK DE

CONTENU

Page 2: Dev Symfony2 rapide avec un framework de contenu

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

POURQUOI DU DEVRAPIDE ?

ET POURQUOI LE WEB D'ABORD ?

Page 4: Dev Symfony2 rapide avec un framework de contenu

"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

"640K ought to be enough for anybody"

Bill Gates, jamais

Page 6: Dev Symfony2 rapide avec un framework de contenu

ET LES CMS ?

Page 7: Dev Symfony2 rapide avec un framework de contenu

LE WEB CHANGE...

Page 8: Dev Symfony2 rapide avec un framework de contenu

HEUREUSEMENT QUE...

Page 9: Dev Symfony2 rapide avec un framework de contenu

MAIS ET MON CMS ?

Page 10: Dev Symfony2 rapide avec un framework de contenu

PHP AUSSI A CHANGÉ

Page 11: Dev Symfony2 rapide avec un framework de contenu

FONDAMENTAUX

LE CONTENUVersions - Sécurité - Modèle flexible - Sémantique - i18n

Page 12: Dev Symfony2 rapide avec un framework de contenu

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

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

DE CMSÀ

CONTENT FRAMEWORK

Page 15: Dev Symfony2 rapide avec un framework de contenu

DU CONCRET

Page 16: Dev Symfony2 rapide avec un framework de contenu

EZ PUBLISHDOMAIN LANGUAGE

Page 17: Dev Symfony2 rapide avec un framework de contenu

REPOSITORY

Page 18: Dev Symfony2 rapide avec un framework de contenu

CONTENT TYPEEnsemble nommé de FIELD DEFINITION.

article, communiqué de presse, image, film...

Page 19: Dev Symfony2 rapide avec un framework de contenu

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

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

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

VERSIONEnsemble de FIELD correspondant aux DEFINITION du

CONTENT TYPE.

Peut avoir 1 à N langues

Page 23: Dev Symfony2 rapide avec un framework de contenu

LOCATIONUn emplacement d'un CONTENT dans l'arbre de contenu.

Page 24: Dev Symfony2 rapide avec un framework de contenu

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

AFFICHER DU CONTENU

Page 26: Dev Symfony2 rapide avec un framework de contenu

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

SUB-REQUEST{{ render( controller( "ez_content:viewLocation", {"locationId": 123, "viewType": "full"} )) }}

Page 28: Dev Symfony2 rapide avec un framework de contenu

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

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

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

API DU REPOSITORY

Page 32: Dev Symfony2 rapide avec un framework de contenu

PHPSERVICES

ContentService, LocationService, SectionService, UserService,SearchService...

VALUE OBJECTSContent, ContentCreateStruct, User, UrlAlias, SearchHit...

Page 33: Dev Symfony2 rapide avec un framework de contenu

// 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

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

GESTION UTILISATEURSMulti-utilisateurs, basé sur des rôles, extensible

(FOSUserBundle)

Page 36: Dev Symfony2 rapide avec un framework de contenu

CONTENU RICHEEditeur XML, transformation XSLT, format de saisie extensible

Page 37: Dev Symfony2 rapide avec un framework de contenu

CACHE HTTPCONTEXTUEL

$response->headers->set( 'X-Location-Id', $locationId );$response->setVary( 'X-User-Hash' );

Page 38: Dev Symfony2 rapide avec un framework de contenu

INTEGRATIONDBAL, PagerFanta, FOSUserBundle...

Page 39: Dev Symfony2 rapide avec un framework de contenu

EXTENSIBILITÉField Types, storage engines

Page 40: Dev Symfony2 rapide avec un framework de contenu

ET L'INTERFACE ?

Page 41: Dev Symfony2 rapide avec un framework de contenu

ON Y TRAVAILLE

(Avec YUI...)

Page 42: Dev Symfony2 rapide avec un framework de contenu

FINDES QUESTIONS ?

@bdunogier http://github.com/bdunogier

http://joind.in/talk/view/11958