SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
DEV SF2 RAPIDE 
AVEC UN FRAMEWORK DE 
CONTENU
VOTRE DÉVOUÉ 
Bertrand Dunogier (@bdunogier) 
Ingénieur lead extensibilité 
eZ Systems, 
eZ Publish, 
http://ez.no 
http://github.com/ezpublish-community
POURQUOI DU DEV 
RAPIDE ? 
ET POURQUOI LE WEB D'ABORD ?
"CONTENT IS KING" 
"Content is where I expect much of the real 
money will be made on the Internet, just as it was 
in broadcasting" 
Bill Gates, 1996
"640K ought to be enough for anybody" 
Bill Gates, jamais
ET LES CMS ?
LE WEB CHANGE...
HEUREUSEMENT QUE...
MAIS ET MON CMS ?
PHP AUSSI A CHANGÉ
FONDAMENTAUX 
LE CONTENU 
Versions - Sécurité - Modèle flexible - Sémantique - i18n
S'INTÉGRER 
ET NON 
S'IMPOSER 
composer create-project symfony/framework-standard-edition my_project 
cd my_project 
composer require ezsystems/ezpublish-kernel
INTÉGRER 
ET NON 
RÉINVENTER 
devenir 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 
...
DE CMS 
À 
CONTENT FRAMEWORK
DU CONCRET
EZ PUBLISH 
DOMAIN LANGUAGE
REPOSITORY
CONTENT TYPE 
Ensemble nommé de FIELD DEFINITION. 
article, communiqué de presse, image, film...
FIELD DEFINITION 
Champ 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
FIELD TYPE 
Plus 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...
CONTENT 
Une instance d'un CONTENT TYPE. 
Composé de une ou plusieurs VERSION, dont 0..1 publiée.
VERSION 
Ensemble de FIELD correspondant aux DEFINITION du 
CONTENT TYPE. 
Peut avoir 1 à N langues
LOCATION 
Un emplacement d'un CONTENT dans l'arbre de contenu.
CONTEXTE D'EXÉCUTION 
LE SITEACCESS 
Niveau supplémentaire de paramétrage, contextuel aux 
requêtes. 
ezpublish: 
siteaccess: 
default_siteaccess: main_site 
list: 
- site_fr 
- site_en 
match: 
MapHost: 
site.com: site_en 
site.fr: site_fr 
# m.site.com: mobile_site_en
AFFICHER DU 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-simplement 
http://site.com/Articles/Technology/Content-made-simple 
http://site.com/Articles/Technology/Kontentsu-o-kantan-ni 
seront dynamiquement routés vers 
controller( 
"ez_content:viewLocation", 
{"locationId": 123, "viewType": "full"} 
)
SUB-REQUEST 
{{ render( 
controller( 
"ez_content:viewLocation", 
{"locationId": 123, "viewType": "full"} 
) 
) }}
CHOIX AUTOMATIQUE 
DU TEMPLATE 
ezpublish: 
default: 
location_view: 
block: 
article: 
template: "AcmeBundle:full:article.html.twig" 
match: 
IdentifierContentType: [article]
OU DU CONTRÔLEUR 
ezpublish: 
mobile_site: 
content_view: 
full: 
article: 
template: "AcmeBundle:full:article.html.twig" 
match: 
IdentifierContentType: [article] 
controller: AcmeBundle:Default:viewLocation
FONCTIONS TWIG 
Nom 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') }}
API DU REPOSITORY
PHP 
SERVICES 
ContentService, LocationService, SectionService, UserService, 
SearchService... 
VALUE OBJECTS 
Content, ContentCreateStruct, User, UrlAlias, SearchHit...
// 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 );
REST 
HTTP/1.1 GET /api/ezp/v2/content/objects/64 
Host: site.com 
Accept: application/vnd.ez.api.Content+json 
HTTP/1.1 DELETE /api/ezp/v2/content/objects/64/versions/1 
Host: site.com
GESTION UTILISATEURS 
Multi-utilisateurs, basé sur des rôles, extensible 
(FOSUserBundle)
CONTENU RICHE 
Editeur XML, transformation XSLT, format de saisie extensible
CACHE HTTP 
CONTEXTUEL 
$response->headers->set( 'X-Location-Id', $locationId ); 
$response->setVary( 'X-User-Hash' );
INTEGRATION 
DBAL, PagerFanta, FOSUserBundle...
EXTENSIBILITÉ 
Field Types, storage engines
ET L'INTERFACE ?
ON Y TRAVAILLE 
(Avec YUI...)
FIN 
DES QUESTIONS ? 
@bdunogier http://github.com/bdunogier 
http://joind.in/talk/view/11958

Contenu connexe

Tendances

eZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introductioneZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introductionRoland Benedetti
 
Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Guillaume Sautereau
 
Optimiser les performances dans Wordpress
Optimiser les performances dans WordpressOptimiser les performances dans Wordpress
Optimiser les performances dans WordpressNicolas Juen
 
Création de themes WordPress
Création de themes WordPressCréation de themes WordPress
Création de themes WordPressChi Nacim
 
Apache camel et les entreprise integration patterns
Apache camel et les entreprise integration patternsApache camel et les entreprise integration patterns
Apache camel et les entreprise integration patternsOuadie LAHDIOUI
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
Creation de-themes-wp
Creation de-themes-wpCreation de-themes-wp
Creation de-themes-wpChi Nacim
 
64 conneries que font les référenceurs avec WordPress
64 conneries que font les référenceurs avec WordPress64 conneries que font les référenceurs avec WordPress
64 conneries que font les référenceurs avec WordPressAurélien Denis
 
Le meilleur pour votre site WordPress
Le meilleur pour votre site WordPressLe meilleur pour votre site WordPress
Le meilleur pour votre site WordPressAurélien Denis
 
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...pierredargham
 
WordPress en tant que CMS
WordPress en tant que CMSWordPress en tant que CMS
WordPress en tant que CMSChi Nacim
 
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Microsoft
 
Introduction à Wordpress
Introduction à WordpressIntroduction à Wordpress
Introduction à WordpressChris Gaillard
 
Bien débuter dans la conception d'un thème WordPress
Bien débuter dans la conception d'un thème WordPressBien débuter dans la conception d'un thème WordPress
Bien débuter dans la conception d'un thème WordPressAurélien Denis
 
Kiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetKiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetDevclic
 
Présentation symfony epita
Présentation symfony epitaPrésentation symfony epita
Présentation symfony epitaNoel GUILBERT
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesNoel GUILBERT
 

Tendances (20)

eZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introductioneZ Publish Platform 5.2 - Webinaire d'introduction
eZ Publish Platform 5.2 - Webinaire d'introduction
 
Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010Présentation de CakePHP, 22/04/2010
Présentation de CakePHP, 22/04/2010
 
Optimiser les performances dans Wordpress
Optimiser les performances dans WordpressOptimiser les performances dans Wordpress
Optimiser les performances dans Wordpress
 
Création de themes WordPress
Création de themes WordPressCréation de themes WordPress
Création de themes WordPress
 
WordPress
WordPressWordPress
WordPress
 
Apache camel et les entreprise integration patterns
Apache camel et les entreprise integration patternsApache camel et les entreprise integration patterns
Apache camel et les entreprise integration patterns
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Creation de-themes-wp
Creation de-themes-wpCreation de-themes-wp
Creation de-themes-wp
 
64 conneries que font les référenceurs avec WordPress
64 conneries que font les référenceurs avec WordPress64 conneries que font les référenceurs avec WordPress
64 conneries que font les référenceurs avec WordPress
 
Le meilleur pour votre site WordPress
Le meilleur pour votre site WordPressLe meilleur pour votre site WordPress
Le meilleur pour votre site WordPress
 
Tp1 wp etud
Tp1 wp etudTp1 wp etud
Tp1 wp etud
 
Php & My Sql
Php & My SqlPhp & My Sql
Php & My Sql
 
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
Pensez Web-Performances avec WordPress - Une conférence de Julien Oger et Pie...
 
WordPress en tant que CMS
WordPress en tant que CMSWordPress en tant que CMS
WordPress en tant que CMS
 
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
 
Introduction à Wordpress
Introduction à WordpressIntroduction à Wordpress
Introduction à Wordpress
 
Bien débuter dans la conception d'un thème WordPress
Bien débuter dans la conception d'un thème WordPressBien débuter dans la conception d'un thème WordPress
Bien débuter dans la conception d'un thème WordPress
 
Kiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internetKiwiparty 2011 - Optimisation des sites internet
Kiwiparty 2011 - Optimisation des sites internet
 
Présentation symfony epita
Présentation symfony epitaPrésentation symfony epita
Présentation symfony epita
 
Symfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiquesSymfony2: 30 astuces et bonnes pratiques
Symfony2: 30 astuces et bonnes pratiques
 

Similaire à Dev Symfony2 rapide avec un framework de contenu

Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Smile I.T is open
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab ElasticsearchDavid Pilato
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Jérôme Petazzoni
 
BreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureBreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureNicolas Georgeault
 
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Gregory Renard
 
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Gregory Renard
 
Formation Efficy CRM - Technical training
Formation Efficy CRM - Technical trainingFormation Efficy CRM - Technical training
Formation Efficy CRM - Technical trainingEfficy CRM
 
Concilier accessibilité et SEO
Concilier accessibilité et SEOConcilier accessibilité et SEO
Concilier accessibilité et SEOSébastien Delorme
 
Accessibilité et SEO - Sébastien Delorme - SEO Campus 2010
Accessibilité et SEO - Sébastien Delorme - SEO Campus 2010Accessibilité et SEO - Sébastien Delorme - SEO Campus 2010
Accessibilité et SEO - Sébastien Delorme - SEO Campus 2010SEO CAMP
 
Exposé open embedded
Exposé open embeddedExposé open embedded
Exposé open embeddedAyoub Rouzi
 
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Gregory Renard
 
Les stratégies de localisation d'une application Flex
Les stratégies de localisation d'une application FlexLes stratégies de localisation d'une application Flex
Les stratégies de localisation d'une application Flexdavid deraedt
 
Les stratégies de localisation d'une application Flex
Les stratégies de localisation d'une application FlexLes stratégies de localisation d'une application Flex
Les stratégies de localisation d'une application Flexdavid deraedt
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
Document Object Model ( DOM)
Document Object Model ( DOM)Document Object Model ( DOM)
Document Object Model ( DOM)Abdelouahed Abdou
 
TYPO3, le CMS de référence au gouvernement québécois
TYPO3, le CMS de référence au gouvernement québécoisTYPO3, le CMS de référence au gouvernement québécois
TYPO3, le CMS de référence au gouvernement québécoisYannick Pavard
 
ElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementMohamed hedi Abidi
 

Similaire à Dev Symfony2 rapide avec un framework de contenu (20)

Présentation eZ publish
Présentation eZ publishPrésentation eZ publish
Présentation eZ publish
 
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
 
Hands on lab Elasticsearch
Hands on lab ElasticsearchHands on lab Elasticsearch
Hands on lab Elasticsearch
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
BreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec AzureBreizhCamp - Drupal7 dans le cloud avec Azure
BreizhCamp - Drupal7 dans le cloud avec Azure
 
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
 
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
 
L'avenir de LAMP
L'avenir de LAMPL'avenir de LAMP
L'avenir de LAMP
 
Formation Efficy CRM - Technical training
Formation Efficy CRM - Technical trainingFormation Efficy CRM - Technical training
Formation Efficy CRM - Technical training
 
Concilier accessibilité et SEO
Concilier accessibilité et SEOConcilier accessibilité et SEO
Concilier accessibilité et SEO
 
Accessibilité et SEO - Sébastien Delorme - SEO Campus 2010
Accessibilité et SEO - Sébastien Delorme - SEO Campus 2010Accessibilité et SEO - Sébastien Delorme - SEO Campus 2010
Accessibilité et SEO - Sébastien Delorme - SEO Campus 2010
 
Exposé open embedded
Exposé open embeddedExposé open embedded
Exposé open embedded
 
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
Visual Basic 9.0 – Visual Studio 2008 Quoi De Neuf 2.0
 
Les stratégies de localisation d'une application Flex
Les stratégies de localisation d'une application FlexLes stratégies de localisation d'une application Flex
Les stratégies de localisation d'une application Flex
 
Les stratégies de localisation d'une application Flex
Les stratégies de localisation d'une application FlexLes stratégies de localisation d'une application Flex
Les stratégies de localisation d'une application Flex
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Document Object Model ( DOM)
Document Object Model ( DOM)Document Object Model ( DOM)
Document Object Model ( DOM)
 
TYPO3, le CMS de référence au gouvernement québécois
TYPO3, le CMS de référence au gouvernement québécoisTYPO3, le CMS de référence au gouvernement québécois
TYPO3, le CMS de référence au gouvernement québécois
 
ElasticSearch : Architecture et Développement
ElasticSearch : Architecture et DéveloppementElasticSearch : Architecture et Développement
ElasticSearch : Architecture et Développement
 

Plus de Bertrand Dunogier

The eZ Platform view layer – eZ Conference 2016
The eZ Platform view layer – eZ Conference 2016The eZ Platform view layer – eZ Conference 2016
The eZ Platform view layer – eZ Conference 2016Bertrand Dunogier
 
Discover eZ Publish: why you have to know this product
Discover eZ Publish: why you have to know this productDiscover eZ Publish: why you have to know this product
Discover eZ Publish: why you have to know this productBertrand Dunogier
 
eZ Publish cluster unleashed revisited
eZ Publish cluster unleashed revisitedeZ Publish cluster unleashed revisited
eZ Publish cluster unleashed revisitedBertrand Dunogier
 
eZ Publish Cluster Unleashed
eZ Publish Cluster UnleashedeZ Publish Cluster Unleashed
eZ Publish Cluster UnleashedBertrand Dunogier
 
eZ Publish Asynchronous Content Publishing
eZ Publish Asynchronous Content PublishingeZ Publish Asynchronous Content Publishing
eZ Publish Asynchronous Content PublishingBertrand Dunogier
 

Plus de Bertrand Dunogier (8)

The eZ Platform Query Field
The eZ Platform Query FieldThe eZ Platform Query Field
The eZ Platform Query Field
 
The eZ Platform view layer – eZ Conference 2016
The eZ Platform view layer – eZ Conference 2016The eZ Platform view layer – eZ Conference 2016
The eZ Platform view layer – eZ Conference 2016
 
Discover eZ Publish: why you have to know this product
Discover eZ Publish: why you have to know this productDiscover eZ Publish: why you have to know this product
Discover eZ Publish: why you have to know this product
 
eZ Publish cluster unleashed revisited
eZ Publish cluster unleashed revisitedeZ Publish cluster unleashed revisited
eZ Publish cluster unleashed revisited
 
eZ Publish REST API v2
eZ Publish REST API v2eZ Publish REST API v2
eZ Publish REST API v2
 
E zsc2012 rest-api-v2
E zsc2012 rest-api-v2E zsc2012 rest-api-v2
E zsc2012 rest-api-v2
 
eZ Publish Cluster Unleashed
eZ Publish Cluster UnleashedeZ Publish Cluster Unleashed
eZ Publish Cluster Unleashed
 
eZ Publish Asynchronous Content Publishing
eZ Publish Asynchronous Content PublishingeZ Publish Asynchronous Content Publishing
eZ Publish Asynchronous Content Publishing
 

Dev Symfony2 rapide avec un framework de contenu

  • 1. DEV SF2 RAPIDE AVEC UN FRAMEWORK DE CONTENU
  • 2. VOTRE DÉVOUÉ Bertrand Dunogier (@bdunogier) Ingénieur lead extensibilité eZ Systems, eZ Publish, http://ez.no http://github.com/ezpublish-community
  • 3. POURQUOI DU DEV RAPIDE ? ET POURQUOI LE WEB D'ABORD ?
  • 4. "CONTENT IS KING" "Content is where I expect much of the real money will be made on the Internet, just as it was in broadcasting" Bill Gates, 1996
  • 5. "640K ought to be enough for anybody" Bill Gates, jamais
  • 9. MAIS ET MON CMS ?
  • 10. PHP AUSSI A CHANGÉ
  • 11. FONDAMENTAUX LE CONTENU Versions - Sécurité - Modèle flexible - Sémantique - i18n
  • 12. S'INTÉGRER ET NON S'IMPOSER composer create-project symfony/framework-standard-edition my_project cd my_project composer require ezsystems/ezpublish-kernel
  • 13. INTÉGRER ET NON RÉINVENTER devenir 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 ...
  • 14. DE CMS À CONTENT FRAMEWORK
  • 16. EZ PUBLISH DOMAIN LANGUAGE
  • 18. CONTENT TYPE Ensemble nommé de FIELD DEFINITION. article, communiqué de presse, image, film...
  • 19. FIELD DEFINITION Champ 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
  • 20. FIELD TYPE Plus 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...
  • 21. CONTENT Une instance d'un CONTENT TYPE. Composé de une ou plusieurs VERSION, dont 0..1 publiée.
  • 22. VERSION Ensemble de FIELD correspondant aux DEFINITION du CONTENT TYPE. Peut avoir 1 à N langues
  • 23. LOCATION Un emplacement d'un CONTENT dans l'arbre de contenu.
  • 24. CONTEXTE D'EXÉCUTION LE SITEACCESS Niveau supplémentaire de paramétrage, contextuel aux requêtes. ezpublish: siteaccess: default_siteaccess: main_site list: - site_fr - site_en match: MapHost: site.com: site_en site.fr: site_fr # m.site.com: mobile_site_en
  • 26. 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-simplement http://site.com/Articles/Technology/Content-made-simple http://site.com/Articles/Technology/Kontentsu-o-kantan-ni seront dynamiquement routés vers controller( "ez_content:viewLocation", {"locationId": 123, "viewType": "full"} )
  • 27. SUB-REQUEST {{ render( controller( "ez_content:viewLocation", {"locationId": 123, "viewType": "full"} ) ) }}
  • 28. CHOIX AUTOMATIQUE DU TEMPLATE ezpublish: default: location_view: block: article: template: "AcmeBundle:full:article.html.twig" match: IdentifierContentType: [article]
  • 29. OU DU CONTRÔLEUR ezpublish: mobile_site: content_view: full: article: template: "AcmeBundle:full:article.html.twig" match: IdentifierContentType: [article] controller: AcmeBundle:Default:viewLocation
  • 30. FONCTIONS TWIG Nom 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') }}
  • 32. PHP SERVICES ContentService, LocationService, SectionService, UserService, SearchService... VALUE OBJECTS Content, ContentCreateStruct, User, UrlAlias, SearchHit...
  • 33. // 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 );
  • 34. REST HTTP/1.1 GET /api/ezp/v2/content/objects/64 Host: site.com Accept: application/vnd.ez.api.Content+json HTTP/1.1 DELETE /api/ezp/v2/content/objects/64/versions/1 Host: site.com
  • 35. GESTION UTILISATEURS Multi-utilisateurs, basé sur des rôles, extensible (FOSUserBundle)
  • 36. CONTENU RICHE Editeur XML, transformation XSLT, format de saisie extensible
  • 37. CACHE HTTP CONTEXTUEL $response->headers->set( 'X-Location-Id', $locationId ); $response->setVary( 'X-User-Hash' );
  • 38. INTEGRATION DBAL, PagerFanta, FOSUserBundle...
  • 39. EXTENSIBILITÉ Field Types, storage engines
  • 41. ON Y TRAVAILLE (Avec YUI...)
  • 42. FIN DES QUESTIONS ? @bdunogier http://github.com/bdunogier http://joind.in/talk/view/11958