an introduction to the symfony cmf - creating a cms on top of symfony

Post on 17-Jun-2015

4.922 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

See https://github.com/rmsint/cmf-intro for the code.

TRANSCRIPT

An  introduc+on  to  

Presented  by  Roel  Sint  

Agenda  

8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   2  

Content  •  Page  •  Blocks  •  Structure  

Management    •  User  •  Frontend  •  Backend  •  Publishing  

workflow  

Framework    •  Storage  •  ContentBundle  •  BlockBundle  •  Rou+ng  

•  Component  •  Bundle  •  Auto  

•  Menu  •  Core  •  Create  

Decoupled  CMS  

8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   3  

vs  

Create  a  CMS  1.  Install  Symfony  and  bootstrap  template  2.  Install  Cmf  3.  Add  fixtures  and  content  4.  Add  auto  rou+ng  5.  Update  templates  6.  Add  cache  7.  Add  backend  CMS  8.  Add  frontend  edi+ng  tool  9.  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  

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

Banner    block  

Homepage    blocks  

Step  1  –  page  template  

8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   9  

url  

breadcrumb  

main  menu  

submenu  

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  

•  Storage  using  PHP  Content  Repository  

8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   14  

xml  

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  

8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   25  

Container  block  

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  

8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   27  

breadcrumb  

submenu  

content  

Step  5  –  update  templates  

8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   28  

AcmeMainBundle:Nav:breacrumbs.html.twig  

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  

8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   37  

Hide  for  customers  

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  

8  november  2013   Roel  Sint  -­‐  github.com/rmsint/cmf-­‐intro   41  

page  template  

rdf  mapping  

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:  •  vendor\symfony-­‐cmf  •  DependencyInjec+on\Configura+on  •  DependencyInjec+on\[name]Extension  •  Resources\config  

8  november  2013   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  

top related