SlideShare a Scribd company logo
1 of 47
Download to read offline
An	
  introduc+on	
  to	
  

Presented	
  by	
  Roel	
  Sint	
  
Agenda	
  
Content	
  
• 
• 
• 

Page	
  
Blocks	
  
Structure	
  

8	
  november	
  2013	
  

Management	
  

	
  
• 
• 
• 
• 

User	
  
Frontend	
  
Backend	
  
Publishing	
  
workflow	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

	
  
• 
• 
• 
• 

Framework	
  

Storage	
  
ContentBundle	
  
BlockBundle	
  
Rou+ng	
  
•  Component	
  
•  Bundle	
  
•  Auto	
  
•  Menu	
  
•  Core	
  
•  Create	
  
2	
  
Decoupled	
  CMS	
  

vs	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

3	
  
Create	
  a	
  CMS	
  
1. 
2. 
3. 
4. 
5. 
6. 
7. 
8. 
9. 

Install	
  Symfony	
  and	
  bootstrap	
  template	
  
Install	
  Cmf	
  
Add	
  fixtures	
  and	
  content	
  
Add	
  auto	
  rou+ng	
  
Update	
  templates	
  
Add	
  cache	
  
Add	
  backend	
  CMS	
  
Add	
  frontend	
  edi+ng	
  tool	
  
Add	
  media,	
  media	
  browser	
  and	
  imagine	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

4	
  
Step	
  1	
  –	
  install	
  Symfony	
  
•  Start	
  a	
  new	
  Symfony	
  project:	
  
–  php	
  composer.phar	
  create-­‐project	
  symfony/
framework-­‐standard-­‐edi+on	
  path/	
  

•  Add	
  twiXer	
  bootstrap	
  theme	
  
–  download	
  from	
  ini+alizr	
  project	
  

•  Implement	
  templates	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

5	
  
Step	
  1	
  -­‐	
  ini+alizr	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

6	
  
Step	
  1	
  -­‐	
  bootstrap	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

7	
  
Step	
  1	
  –	
  home	
  template	
  
Banner	
  	
  
block	
  

Homepage	
  	
  
blocks	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

8	
  
Step	
  1	
  –	
  page	
  template	
  
url	
  
main	
  menu	
  

breadcrumb	
  

submenu	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

9	
  
Step1	
  -­‐	
  AcmeMainBundle	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

10	
  
Step	
  2	
  –	
  install	
  cmf	
  

•  php	
  composer.phar	
  require	
  symfony-­‐cmf/symfony-­‐cmf	
  
•  1.0.*	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

11	
  
Step	
  2	
  –	
  AppKernel	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

12	
  
Step	
  2	
  –	
  config.yml	
  +	
  autoload	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

13	
  
Step	
  2	
  –	
  setup	
  database	
  
•  Setup:	
  

–  app/console	
  doctrine:database:create	
  
–  app/console	
  doctrine:phpcr:init:dbal	
  
–  app/console	
  doctrine:phpcr:repository:init	
  

•  Check	
  :	
  

–  app/console	
  doctrine:phpcr:node:dump	
  
–  also	
  the	
  database	
  

xml	
  

•  Storage	
  using	
  PHP	
  Content	
  Repository	
  
8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

14	
  
What	
  is	
  a	
  content	
  repository?	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

15	
  
PHPCR	
  using	
  Doctrine	
  ODM	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

16	
  
Step	
  3	
  –	
  add	
  fixtures	
  and	
  content	
  
•  php	
  composer.phar	
  require	
  doctrine/data-­‐fixtures	
  
–  1.0.0	
  

•  Add	
  page	
  document	
  
•  Create	
  pages	
  root	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

17	
  
Step	
  3	
  –	
  add	
  fixtures	
  and	
  content	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

18	
  
Step	
  3	
  –	
  add	
  fixtures	
  and	
  content	
  
•  Run:	
  
–  app/console	
  doctrine:phpcr:repository:init	
  
–  app/console	
  doctrine:phpcr:fixtures:load	
  

•  Check:	
  
–  app/console	
  doctrine:phpcr:node:dump	
  —props	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

19	
  
Step	
  3	
  –	
  add	
  fixtures	
  and	
  content	
  
•  Run:	
  
–  app/console	
  doctrine:phpcr:repository:init	
  
–  app/console	
  doctrine:phpcr:fixtures:load	
  

•  Check:	
  
–  app/console	
  doctrine:phpcr:node:dump	
  —props	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

20	
  
Step	
  4	
  –	
  add	
  auto	
  rou+ng	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

21	
  
Step	
  4	
  –	
  add	
  auto	
  rou+ng	
  
•  php	
  composer.phar	
  require	
  symfony-­‐cmf/rou+ng-­‐auto-­‐bundle	
  
–  1.0.*@dev	
  

• 
• 
• 
• 

add	
  to	
  kernel	
  
add	
  rou+ng_auto.yml	
  
remove	
  routes	
  from	
  fixtures	
  
Run:	
  	
  
–  app/console	
  doctrine:phpcr:fixtures:load	
  

•  Check:	
  	
  
–  app/console	
  doctrine:phpcr:node:dump	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

22	
  
Step	
  4	
  –	
  add	
  auto	
  rou+ng	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

23	
  
Step	
  5	
  –	
  update	
  templates	
  
•  Homepage	
  
–  add	
  blocks	
  to	
  template	
  
–  add	
  fixtures	
  and	
  run:	
  
•  app/console	
  doctrine:phpcr:fixtures:load	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

24	
  
Step	
  5	
  –	
  update	
  templates	
  
•  Homepage	
  
–  add	
  blocks	
  to	
  template	
  
–  add	
  fixtures	
  and	
  run:	
  
•  app/console	
  doctrine:phpcr:fixtures:load	
  

Container	
  block	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

25	
  
Step	
  5	
  –	
  update	
  templates	
  
•  Page	
  template	
  
•  Use	
  knp_menu_render	
  for:	
  
–  Breadcrumb	
  
–  Main	
  menu	
  
–  Sub	
  menu	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

26	
  
Step	
  5	
  –	
  update	
  templates	
  
breadcrumb	
  

submenu	
  

content	
  
8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

27	
  
Step	
  5	
  –	
  update	
  templates	
  
AcmeMainBundle:Nav:breacrumbs.html.twig	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

28	
  
Step	
  6	
  –	
  add	
  cache	
  
•  php	
  composer.phar	
  require	
  liip/doctrine-­‐cache-­‐bundle	
  
–  1.0.*	
  

•  Add	
  to	
  kernel	
  
•  Update	
  config.yml	
  

•  Check	
  queries	
  in	
  the	
  webdebug	
  toolbar	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

29	
  
Step	
  7	
  –	
  backend	
  CMS	
  
•  php	
  composer.phar	
  require	
  sonata-­‐project/doctrine-­‐phpcr-­‐admin-­‐bundle	
  
–  1.0.*	
  

•  add	
  to	
  AppKernel	
  

•  run:	
  app/console	
  assets:install	
  web	
  —symlink	
  
•  secure	
  admin	
  in	
  security.yml	
  
8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

30	
  
Step	
  7	
  -­‐	
  config	
  
•  uncomment	
  framework.translator	
  
•  add	
  sonata	
  
•  add	
  routes	
  to	
  rou+ng.yml	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

31	
  
Step	
  7	
  -­‐	
  config	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

32	
  
Step	
  7	
  -­‐	
  config	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

33	
  
Step	
  7	
  -­‐	
  ckeditor	
  
•  php	
  composer.phar	
  require	
  trsteel/ckeditor-­‐bundle	
  
–  1.2.*	
  

•  add	
  to	
  AppKernel	
  
•  update	
  PageAdmin	
  to	
  use	
  ckeditor	
  field	
  
•  Run:	
  
–  app/console	
  assets:install	
  web	
  –symlink	
  
–  app/console	
  asse+c:dump	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

34	
  
Step	
  7	
  -­‐	
  ckeditor	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

35	
  
Step	
  7	
  –	
  Publish	
  workflow	
  
• 
• 
• 
• 
• 

Enable	
  publish	
  workflow	
  in	
  cmf_core	
  
Menu	
  
Page	
  
Blocks	
  
Hide	
  menu	
  when	
  page	
  is	
  not	
  published	
  
–  Custom	
  MenuContentVoter	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

36	
  
Step	
  7	
  –	
  backend	
  cms	
  

Hide	
  for	
  customers	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

37	
  
Step	
  7	
  –	
  backend	
  cms	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

38	
  
Step	
  7	
  –	
  backend	
  cms	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

39	
  
Step	
  8	
  –	
  frontend	
  edi+ng	
  
•  php	
  composer.phar	
  require	
  symfony-­‐cmf/create-­‐bundle	
  
–  1.0.*	
  

• 
• 
• 
• 

add	
  to	
  AppKernel	
  
update	
  config	
  
add	
  rdf-­‐mapping	
  
template:	
  

–  update	
  page	
  
–  add	
  stylesheets	
  and	
  javascript	
  

•  run:	
  

–  app/console	
  assets:install	
  web	
  –symlink	
  
–  app/console	
  asse+c:dump	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

40	
  
Step	
  8	
  –	
  frontend	
  edi+ng	
  

rdf	
  mapping	
  
page	
  template	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

41	
  
Step	
  8	
  –	
  frontend	
  edi+ng	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

42	
  
Step	
  9	
  -­‐	
  media	
  
•  add	
  to	
  composer.json:	
  

–  "symfony-­‐cmf/media-­‐bundle":	
  "1.0.*”	
  
–  "liip/imagine-­‐bundle":	
  "v0.16.0”	
  
–  "helios-­‐ag/fm-­‐elfinder-­‐bundle":	
  "1.4”	
  

•  run:	
  	
  

–  composer	
  update	
  symfony-­‐cmf/media-­‐bundle	
  liip/
imagine-­‐bundle	
  helios-­‐ag/fm-­‐elfinder-­‐bundle	
  
–  app/console	
  doctrine:phpcr:repository:init	
  

•  add	
  ROLE_CAN_UPLOAD_FILE	
  to	
  security.yml	
  
•  update	
  config:	
  
–  configure	
  image	
  upload	
  url	
  and	
  file	
  browse	
  url	
  
–  liip	
  imagine	
  filters	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

43	
  
Step	
  9	
  -­‐	
  media	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

44	
  
Where	
  do	
  I	
  …	
  ?	
  
• 
• 
• 
• 

Book	
  documenta+on:	
  general	
  explana+on	
  
Bundle	
  documenta+on:	
  reference	
  for	
  features	
  
Cookbooks	
  
Configura+on	
  
–  Reference	
  sec+on	
  symfony.com	
  
–  Run:	
  

•  app/console	
  config:dump-­‐reference	
  CmfCoreBundle	
  
•  app/console	
  router:debug	
  
•  app/console	
  container:debug	
  

–  Code:	
  
• 
• 
• 
• 

8	
  november	
  2013	
  

vendorsymfony-­‐cmf	
  
DependencyInjec+onConfigura+on	
  
DependencyInjec+on[name]Extension	
  
Resourcesconfig	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

45	
  
Links	
  
•  github.com/rmsint/cmf-­‐intro	
  
•  homepage	
  cmf.symfony.com	
  
•  doctrine-­‐project.org	
  for	
  PHPCR-­‐ODM	
  
•  See	
  also	
  cookbook	
  Crea+ng	
  a	
  Basic	
  CMS	
  
•  slides.liip.ch/sta+c/2012-­‐05-­‐18_symfony-­‐speed.html	
  
•  ask	
  ques+ons	
  on	
  irc:	
  #symfony-­‐cmf	
  
8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

46	
  
Conclusion	
  
• 
• 
• 
• 
• 

toolbox	
  to	
  create	
  your	
  own	
  CMS	
  
code	
  reuse	
  exis+ng	
  projects	
  
many	
  steps	
  because	
  everything	
  is	
  decoupled	
  
different	
  CMS	
  for	
  different	
  purpose	
  possible	
  
automate	
  steps	
  for	
  produc+on	
  
–  create	
  installa+ons	
  
•  blog	
  
•  cms	
  

8	
  november	
  2013	
  

Roel	
  Sint	
  -­‐	
  github.com/rmsint/cmf-­‐intro	
  

47	
  

More Related Content

What's hot

Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ...
 Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ... Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ...
Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ...HighSolutions Sp. z o.o.
 
CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...
CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...
CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...Ortus Solutions, Corp
 
#3 Hanoi Magento Meetup - Part 2: Scalable Magento Development With Containers
#3 Hanoi Magento Meetup - Part 2: Scalable Magento Development With Containers#3 Hanoi Magento Meetup - Part 2: Scalable Magento Development With Containers
#3 Hanoi Magento Meetup - Part 2: Scalable Magento Development With ContainersHanoi MagentoMeetup
 
MyCPAN (Frozen Perl 2008 Lightning Talk)
MyCPAN (Frozen Perl 2008 Lightning Talk)MyCPAN (Frozen Perl 2008 Lightning Talk)
MyCPAN (Frozen Perl 2008 Lightning Talk)brian d foy
 
MyCPAN ( LA.pm, September 2007 )
MyCPAN ( LA.pm, September 2007 )MyCPAN ( LA.pm, September 2007 )
MyCPAN ( LA.pm, September 2007 )brian d foy
 
Composer | PHP Dependency Manager
Composer | PHP Dependency ManagerComposer | PHP Dependency Manager
Composer | PHP Dependency ManagerUjjwal Ojha
 
Symfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim RomanovskySymfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim Romanovskyphp-user-group-minsk
 
BackPAN Archeology
BackPAN ArcheologyBackPAN Archeology
BackPAN Archeologybrian d foy
 
Ruby projects of interest for DevOps
Ruby projects of interest for DevOpsRuby projects of interest for DevOps
Ruby projects of interest for DevOpsRicardo Sanchez
 
Docker for Developers - PNWPHP 2016 Workshop
Docker for Developers - PNWPHP 2016 WorkshopDocker for Developers - PNWPHP 2016 Workshop
Docker for Developers - PNWPHP 2016 WorkshopChris Tankersley
 
Vagrant for Virtualized Development
Vagrant for Virtualized DevelopmentVagrant for Virtualized Development
Vagrant for Virtualized DevelopmentAdam Culp
 
Deploying Foreman in Enterprise Environments
Deploying Foreman in Enterprise EnvironmentsDeploying Foreman in Enterprise Environments
Deploying Foreman in Enterprise Environmentsinovex GmbH
 
Cowboy rabbit-websockets
Cowboy rabbit-websocketsCowboy rabbit-websockets
Cowboy rabbit-websocketsWade Mealing
 
Failing at Scale - PNWPHP 2016
Failing at Scale - PNWPHP 2016Failing at Scale - PNWPHP 2016
Failing at Scale - PNWPHP 2016Chris Tankersley
 

What's hot (20)

Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ...
 Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ... Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ...
Laravel Poznań Meetup #12 - "Speed up web API with Laravel and Swoole using ...
 
CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...
CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...
CBDW2014- Intro to CommandBox; The ColdFusion CLI, Package Manager, and REPL ...
 
#3 Hanoi Magento Meetup - Part 2: Scalable Magento Development With Containers
#3 Hanoi Magento Meetup - Part 2: Scalable Magento Development With Containers#3 Hanoi Magento Meetup - Part 2: Scalable Magento Development With Containers
#3 Hanoi Magento Meetup - Part 2: Scalable Magento Development With Containers
 
MyCPAN (Frozen Perl 2008 Lightning Talk)
MyCPAN (Frozen Perl 2008 Lightning Talk)MyCPAN (Frozen Perl 2008 Lightning Talk)
MyCPAN (Frozen Perl 2008 Lightning Talk)
 
MyCPAN ( LA.pm, September 2007 )
MyCPAN ( LA.pm, September 2007 )MyCPAN ( LA.pm, September 2007 )
MyCPAN ( LA.pm, September 2007 )
 
OpenCms Days 2016: Keynote - Introducing OpenCms 10.5
OpenCms Days 2016:   Keynote - Introducing OpenCms 10.5OpenCms Days 2016:   Keynote - Introducing OpenCms 10.5
OpenCms Days 2016: Keynote - Introducing OpenCms 10.5
 
Composer | PHP Dependency Manager
Composer | PHP Dependency ManagerComposer | PHP Dependency Manager
Composer | PHP Dependency Manager
 
Symfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim RomanovskySymfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim Romanovsky
 
BackPAN Archeology
BackPAN ArcheologyBackPAN Archeology
BackPAN Archeology
 
Vmth project
Vmth projectVmth project
Vmth project
 
Ruby projects of interest for DevOps
Ruby projects of interest for DevOpsRuby projects of interest for DevOps
Ruby projects of interest for DevOps
 
Docker for Developers - PNWPHP 2016 Workshop
Docker for Developers - PNWPHP 2016 WorkshopDocker for Developers - PNWPHP 2016 Workshop
Docker for Developers - PNWPHP 2016 Workshop
 
Vagrant for Virtualized Development
Vagrant for Virtualized DevelopmentVagrant for Virtualized Development
Vagrant for Virtualized Development
 
Beyond Puppet
Beyond PuppetBeyond Puppet
Beyond Puppet
 
Deploying Foreman in Enterprise Environments
Deploying Foreman in Enterprise EnvironmentsDeploying Foreman in Enterprise Environments
Deploying Foreman in Enterprise Environments
 
It gilde 20150209
It gilde 20150209It gilde 20150209
It gilde 20150209
 
Cowboy rabbit-websockets
Cowboy rabbit-websocketsCowboy rabbit-websockets
Cowboy rabbit-websockets
 
Websocket 101 in Python
Websocket 101 in PythonWebsocket 101 in Python
Websocket 101 in Python
 
Failing at Scale - PNWPHP 2016
Failing at Scale - PNWPHP 2016Failing at Scale - PNWPHP 2016
Failing at Scale - PNWPHP 2016
 
OpenCms Days 2013 - Site Management Tool
OpenCms Days 2013 - Site Management ToolOpenCms Days 2013 - Site Management Tool
OpenCms Days 2013 - Site Management Tool
 

Similar to An introduction to the Symfony CMF - creating a CMS on top of Symfony

Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer John Riviello
 
Webkit/chromium contribution process
Webkit/chromium contribution processWebkit/chromium contribution process
Webkit/chromium contribution processNAVER LABS
 
Digital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meetingDigital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meetingHenry Schreiner
 
Open up your platform with Open Source and GitHub
Open up your platform with Open Source and GitHubOpen up your platform with Open Source and GitHub
Open up your platform with Open Source and GitHubScott Graham
 
Rails入門與新人實戰經驗分享
Rails入門與新人實戰經驗分享Rails入門與新人實戰經驗分享
Rails入門與新人實戰經驗分享wildjcrt
 
Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024Henry Schreiner
 
Intro to Github Actions @likecoin
Intro to Github Actions @likecoinIntro to Github Actions @likecoin
Intro to Github Actions @likecoinWilliam Chong
 
EuroPython 2014 - How we switched our 800+ projects from Apache to uWSGI
EuroPython 2014 - How we switched our 800+ projects from Apache to uWSGIEuroPython 2014 - How we switched our 800+ projects from Apache to uWSGI
EuroPython 2014 - How we switched our 800+ projects from Apache to uWSGIMax Tepkeev
 
Composer JSON kills make files
Composer JSON kills make filesComposer JSON kills make files
Composer JSON kills make filesropsu
 
DevOps of Python applications using OpenShift (Italian version)
DevOps of Python applications using OpenShift (Italian version)DevOps of Python applications using OpenShift (Italian version)
DevOps of Python applications using OpenShift (Italian version)Francesco Fiore
 
CodeIgniter Lab
CodeIgniter LabCodeIgniter Lab
CodeIgniter LabLeo Nguyen
 
Princeton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance ToolingPrinceton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance ToolingHenry Schreiner
 
DWX 2022 - DevSecOps mit GitHub
DWX 2022 - DevSecOps mit GitHubDWX 2022 - DevSecOps mit GitHub
DWX 2022 - DevSecOps mit GitHubMarc Müller
 
ASP.NET 5 on the Raspberry PI 2
ASP.NET 5 on the Raspberry PI 2ASP.NET 5 on the Raspberry PI 2
ASP.NET 5 on the Raspberry PI 2Jürgen Gutsch
 
Freelancer Weapons of mass productivity
Freelancer Weapons of mass productivityFreelancer Weapons of mass productivity
Freelancer Weapons of mass productivityGregg Coppen
 
Software Quality Assurance Tooling 2023
Software Quality Assurance Tooling 2023Software Quality Assurance Tooling 2023
Software Quality Assurance Tooling 2023Henry Schreiner
 
Build a RESTful API with the Serverless Framework
Build a RESTful API with the Serverless FrameworkBuild a RESTful API with the Serverless Framework
Build a RESTful API with the Serverless Frameworkmasahitojp
 
Composer & Drupal
Composer & DrupalComposer & Drupal
Composer & Drupaldrubb
 
Build Your First SharePoint Framework Webpart
Build Your First SharePoint Framework WebpartBuild Your First SharePoint Framework Webpart
Build Your First SharePoint Framework WebpartEric Overfield
 

Similar to An introduction to the Symfony CMF - creating a CMS on top of Symfony (20)

Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer Workshop: Introduction to Web Components & Polymer
Workshop: Introduction to Web Components & Polymer
 
Webkit/chromium contribution process
Webkit/chromium contribution processWebkit/chromium contribution process
Webkit/chromium contribution process
 
Digital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meetingDigital RSE: automated code quality checks - RSE group meeting
Digital RSE: automated code quality checks - RSE group meeting
 
Open up your platform with Open Source and GitHub
Open up your platform with Open Source and GitHubOpen up your platform with Open Source and GitHub
Open up your platform with Open Source and GitHub
 
Rails入門與新人實戰經驗分享
Rails入門與新人實戰經驗分享Rails入門與新人實戰經驗分享
Rails入門與新人實戰經驗分享
 
Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024Software Quality Assurance Tooling - Wintersession 2024
Software Quality Assurance Tooling - Wintersession 2024
 
Intro to Github Actions @likecoin
Intro to Github Actions @likecoinIntro to Github Actions @likecoin
Intro to Github Actions @likecoin
 
CI/CD with Github Actions
CI/CD with Github ActionsCI/CD with Github Actions
CI/CD with Github Actions
 
EuroPython 2014 - How we switched our 800+ projects from Apache to uWSGI
EuroPython 2014 - How we switched our 800+ projects from Apache to uWSGIEuroPython 2014 - How we switched our 800+ projects from Apache to uWSGI
EuroPython 2014 - How we switched our 800+ projects from Apache to uWSGI
 
Composer JSON kills make files
Composer JSON kills make filesComposer JSON kills make files
Composer JSON kills make files
 
DevOps of Python applications using OpenShift (Italian version)
DevOps of Python applications using OpenShift (Italian version)DevOps of Python applications using OpenShift (Italian version)
DevOps of Python applications using OpenShift (Italian version)
 
CodeIgniter Lab
CodeIgniter LabCodeIgniter Lab
CodeIgniter Lab
 
Princeton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance ToolingPrinceton Wintersession: Software Quality Assurance Tooling
Princeton Wintersession: Software Quality Assurance Tooling
 
DWX 2022 - DevSecOps mit GitHub
DWX 2022 - DevSecOps mit GitHubDWX 2022 - DevSecOps mit GitHub
DWX 2022 - DevSecOps mit GitHub
 
ASP.NET 5 on the Raspberry PI 2
ASP.NET 5 on the Raspberry PI 2ASP.NET 5 on the Raspberry PI 2
ASP.NET 5 on the Raspberry PI 2
 
Freelancer Weapons of mass productivity
Freelancer Weapons of mass productivityFreelancer Weapons of mass productivity
Freelancer Weapons of mass productivity
 
Software Quality Assurance Tooling 2023
Software Quality Assurance Tooling 2023Software Quality Assurance Tooling 2023
Software Quality Assurance Tooling 2023
 
Build a RESTful API with the Serverless Framework
Build a RESTful API with the Serverless FrameworkBuild a RESTful API with the Serverless Framework
Build a RESTful API with the Serverless Framework
 
Composer & Drupal
Composer & DrupalComposer & Drupal
Composer & Drupal
 
Build Your First SharePoint Framework Webpart
Build Your First SharePoint Framework WebpartBuild Your First SharePoint Framework Webpart
Build Your First SharePoint Framework Webpart
 

Recently uploaded

Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsHyundai Motor Group
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetEnjoy Anytime
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 

Recently uploaded (20)

Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter RoadsSnow Chain-Integrated Tire for a Safe Drive on Winter Roads
Snow Chain-Integrated Tire for a Safe Drive on Winter Roads
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your BudgetHyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
Hyderabad Call Girls Khairatabad ✨ 7001305949 ✨ Cheap Price Your Budget
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 

An introduction to the Symfony CMF - creating a CMS on top of Symfony

  • 1. An  introduc+on  to   Presented  by  Roel  Sint  
  • 2. Agenda   Content   •  •  •  Page   Blocks   Structure   8  november  2013   Management     •  •  •  •  User   Frontend   Backend   Publishing   workflow   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro     •  •  •  •  Framework   Storage   ContentBundle   BlockBundle   Rou+ng   •  Component   •  Bundle   •  Auto   •  Menu   •  Core   •  Create   2  
  • 3. Decoupled  CMS   vs   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   3  
  • 4. Create  a  CMS   1.  2.  3.  4.  5.  6.  7.  8.  9.  Install  Symfony  and  bootstrap  template   Install  Cmf   Add  fixtures  and  content   Add  auto  rou+ng   Update  templates   Add  cache   Add  backend  CMS   Add  frontend  edi+ng  tool   Add  media,  media  browser  and  imagine   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   4  
  • 5. Step  1  –  install  Symfony   •  Start  a  new  Symfony  project:   –  php  composer.phar  create-­‐project  symfony/ framework-­‐standard-­‐edi+on  path/   •  Add  twiXer  bootstrap  theme   –  download  from  ini+alizr  project   •  Implement  templates   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   5  
  • 6. Step  1  -­‐  ini+alizr   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   6  
  • 7. Step  1  -­‐  bootstrap   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   7  
  • 8. Step  1  –  home  template   Banner     block   Homepage     blocks   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   8  
  • 9. Step  1  –  page  template   url   main  menu   breadcrumb   submenu   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   9  
  • 10. Step1  -­‐  AcmeMainBundle   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   10  
  • 11. Step  2  –  install  cmf   •  php  composer.phar  require  symfony-­‐cmf/symfony-­‐cmf   •  1.0.*   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   11  
  • 12. Step  2  –  AppKernel   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   12  
  • 13. Step  2  –  config.yml  +  autoload   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   13  
  • 14. Step  2  –  setup  database   •  Setup:   –  app/console  doctrine:database:create   –  app/console  doctrine:phpcr:init:dbal   –  app/console  doctrine:phpcr:repository:init   •  Check  :   –  app/console  doctrine:phpcr:node:dump   –  also  the  database   xml   •  Storage  using  PHP  Content  Repository   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   14  
  • 15. What  is  a  content  repository?   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   15  
  • 16. PHPCR  using  Doctrine  ODM   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   16  
  • 17. Step  3  –  add  fixtures  and  content   •  php  composer.phar  require  doctrine/data-­‐fixtures   –  1.0.0   •  Add  page  document   •  Create  pages  root   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   17  
  • 18. Step  3  –  add  fixtures  and  content   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   18  
  • 19. Step  3  –  add  fixtures  and  content   •  Run:   –  app/console  doctrine:phpcr:repository:init   –  app/console  doctrine:phpcr:fixtures:load   •  Check:   –  app/console  doctrine:phpcr:node:dump  —props   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   19  
  • 20. Step  3  –  add  fixtures  and  content   •  Run:   –  app/console  doctrine:phpcr:repository:init   –  app/console  doctrine:phpcr:fixtures:load   •  Check:   –  app/console  doctrine:phpcr:node:dump  —props   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   20  
  • 21. Step  4  –  add  auto  rou+ng   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   21  
  • 22. Step  4  –  add  auto  rou+ng   •  php  composer.phar  require  symfony-­‐cmf/rou+ng-­‐auto-­‐bundle   –  1.0.*@dev   •  •  •  •  add  to  kernel   add  rou+ng_auto.yml   remove  routes  from  fixtures   Run:     –  app/console  doctrine:phpcr:fixtures:load   •  Check:     –  app/console  doctrine:phpcr:node:dump   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   22  
  • 23. Step  4  –  add  auto  rou+ng   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   23  
  • 24. Step  5  –  update  templates   •  Homepage   –  add  blocks  to  template   –  add  fixtures  and  run:   •  app/console  doctrine:phpcr:fixtures:load   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   24  
  • 25. Step  5  –  update  templates   •  Homepage   –  add  blocks  to  template   –  add  fixtures  and  run:   •  app/console  doctrine:phpcr:fixtures:load   Container  block   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   25  
  • 26. Step  5  –  update  templates   •  Page  template   •  Use  knp_menu_render  for:   –  Breadcrumb   –  Main  menu   –  Sub  menu   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   26  
  • 27. Step  5  –  update  templates   breadcrumb   submenu   content   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   27  
  • 28. Step  5  –  update  templates   AcmeMainBundle:Nav:breacrumbs.html.twig   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   28  
  • 29. Step  6  –  add  cache   •  php  composer.phar  require  liip/doctrine-­‐cache-­‐bundle   –  1.0.*   •  Add  to  kernel   •  Update  config.yml   •  Check  queries  in  the  webdebug  toolbar   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   29  
  • 30. Step  7  –  backend  CMS   •  php  composer.phar  require  sonata-­‐project/doctrine-­‐phpcr-­‐admin-­‐bundle   –  1.0.*   •  add  to  AppKernel   •  run:  app/console  assets:install  web  —symlink   •  secure  admin  in  security.yml   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   30  
  • 31. Step  7  -­‐  config   •  uncomment  framework.translator   •  add  sonata   •  add  routes  to  rou+ng.yml   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   31  
  • 32. Step  7  -­‐  config   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   32  
  • 33. Step  7  -­‐  config   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   33  
  • 34. Step  7  -­‐  ckeditor   •  php  composer.phar  require  trsteel/ckeditor-­‐bundle   –  1.2.*   •  add  to  AppKernel   •  update  PageAdmin  to  use  ckeditor  field   •  Run:   –  app/console  assets:install  web  –symlink   –  app/console  asse+c:dump   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   34  
  • 35. Step  7  -­‐  ckeditor   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   35  
  • 36. Step  7  –  Publish  workflow   •  •  •  •  •  Enable  publish  workflow  in  cmf_core   Menu   Page   Blocks   Hide  menu  when  page  is  not  published   –  Custom  MenuContentVoter   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   36  
  • 37. Step  7  –  backend  cms   Hide  for  customers   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   37  
  • 38. Step  7  –  backend  cms   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   38  
  • 39. Step  7  –  backend  cms   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   39  
  • 40. Step  8  –  frontend  edi+ng   •  php  composer.phar  require  symfony-­‐cmf/create-­‐bundle   –  1.0.*   •  •  •  •  add  to  AppKernel   update  config   add  rdf-­‐mapping   template:   –  update  page   –  add  stylesheets  and  javascript   •  run:   –  app/console  assets:install  web  –symlink   –  app/console  asse+c:dump   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   40  
  • 41. Step  8  –  frontend  edi+ng   rdf  mapping   page  template   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   41  
  • 42. Step  8  –  frontend  edi+ng   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   42  
  • 43. Step  9  -­‐  media   •  add  to  composer.json:   –  "symfony-­‐cmf/media-­‐bundle":  "1.0.*”   –  "liip/imagine-­‐bundle":  "v0.16.0”   –  "helios-­‐ag/fm-­‐elfinder-­‐bundle":  "1.4”   •  run:     –  composer  update  symfony-­‐cmf/media-­‐bundle  liip/ imagine-­‐bundle  helios-­‐ag/fm-­‐elfinder-­‐bundle   –  app/console  doctrine:phpcr:repository:init   •  add  ROLE_CAN_UPLOAD_FILE  to  security.yml   •  update  config:   –  configure  image  upload  url  and  file  browse  url   –  liip  imagine  filters   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   43  
  • 44. Step  9  -­‐  media   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   44  
  • 45. Where  do  I  …  ?   •  •  •  •  Book  documenta+on:  general  explana+on   Bundle  documenta+on:  reference  for  features   Cookbooks   Configura+on   –  Reference  sec+on  symfony.com   –  Run:   •  app/console  config:dump-­‐reference  CmfCoreBundle   •  app/console  router:debug   •  app/console  container:debug   –  Code:   •  •  •  •  8  november  2013   vendorsymfony-­‐cmf   DependencyInjec+onConfigura+on   DependencyInjec+on[name]Extension   Resourcesconfig   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   45  
  • 46. Links   •  github.com/rmsint/cmf-­‐intro   •  homepage  cmf.symfony.com   •  doctrine-­‐project.org  for  PHPCR-­‐ODM   •  See  also  cookbook  Crea+ng  a  Basic  CMS   •  slides.liip.ch/sta+c/2012-­‐05-­‐18_symfony-­‐speed.html   •  ask  ques+ons  on  irc:  #symfony-­‐cmf   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   46  
  • 47. Conclusion   •  •  •  •  •  toolbox  to  create  your  own  CMS   code  reuse  exis+ng  projects   many  steps  because  everything  is  decoupled   different  CMS  for  different  purpose  possible   automate  steps  for  produc+on   –  create  installa+ons   •  blog   •  cms   8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   47