Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TYPO3 CMS Website templates as an extension

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

TYPO3 CMS Website templates as an extension

Introduction into using TYPO3 CMS Extensions for Website Templates to provide a central location for code & configuration while integration with tools like Sass, Gulp, PostCSS, Imagemin & Webpack.

Avatar for Morton Jonuschat

Morton Jonuschat

July 17, 2015
Tweet

More Decks by Morton Jonuschat

Other Decks in Programming

Transcript

  1. Morton  Jonuschat Full  Stack  Developer twi2er.com/yabawock github.com/yabawock Haltern  am  See,

     Germany Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 2
  2. Agenda Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 3

    Code Technical  stuff  and  best   prac?ces  from  daily  use. Integra+ons BaEeries  included… Basics Short  intro  to  TYPO3   Extension  structure
  3. What  problem  do  we  want  to  solve?   Websites  as

     a  TYPO3  CMS  extension Morton  Jonuschat 5
  4. Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 6 hEp:/

    /www.commitstrip.com/en/2015/04/13/coders-­‐are-­‐never-­‐sa?sfied/
  5. Simple  Times fileadmin └── template ├── index.html ├── logo.gif ├──

    main.html └── site.css Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 7
  6. Not  So  Simple  Times fileadmin └── template ├── index.html ├──

    index_2007.htm ├── logo.gif ├── logo_2007.gif ├── logo_small.gif ├── logo_wide.JPG ├── main_3cols.html ├── main.html ├── main_2cols.html ├── site.css └── site_2007.php Browser  dependent  CSS! Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 8
  7. Messy  Times fileadmin └── template ├── main │ ├── index.html

    │ ├── logo.jpg │ ├── main.html │ ├── site.css │ └── site.js └── site2 ├── index.html ├── logo.jpg ├── main_wide.html ├── site.js └── site2.css It  wasn’t  me!  I  only  worked     on  the  main  template! Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 9
  8. Structured  Chaos fileadmin └── templates ├── default │ ├── css

    │ ├── gfx │ ├── javascript │ ├── pages │ ├── plugins │ └── typoscript ├── site1 ├── ... └── site12 ├── css ├── gfx ├── javascript ├── pages ├── plugins └── typoscript Bigger  sites,  deeper  nes+ng,     more  problems! Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 10
  9. Preparing  to  fail! h-ps:/ /flic.kr/p/aJmvxc  -­‐  NZ  Defence  Force/Flickr,  CC-­‐BY

     2.0 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 11
  10. More  Reasons Extension fileadmin/ Accessible  through  file  module¹ No  access

     to  configura?on  for  users TYPO3  API  available File  based  configura?on Dependencies  (ext_emconf.php,  composer) Easy  deployment  &  distribu?on Version  control² Access  protec?on  for  config  files  (.htaccess)² Extensions  are  not  indexed  by  FAL ¹  Not  really  an  advantage   ²  Possible  but  difficult  for  fileadmin/ Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 12
  11. Basic  Structure site_package ├── Configuration │ ├── TypoScript │ └──

    .htaccess ├── Resources │ ├── Private │ │ ├── Layouts │ │ ├── Partials │ │ ├── Templates │ │ └── .htaccess │ └── Public │ ├── Images │ ├── JavaScripts │ └── StyleSheets ├── ext_emconf.php ├── ext_icon.png ├── ext_localconf.php └── ext_tables.php docs.typo3.org/typo3cms/CodingGuidelinesReference/FileSystemConven?ons/ExtensionDirectoryStructure/Index.html   Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 14
  12. Minimal  Boilerplate Define  extension  dependencies  (e.g.  css_styled_content) 1 Javascript 5

    Stylesheets 4 Page  Template  (using  FLUIDTEMPLATE) 3 Basic  TypoScript  setup  (Template  &  PageTS) 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 15
  13. Extension  Dependencies $EM_CONF[$_EXTKEY] = array( 'title' => 'Site Package Example',

    'description' => '', 'category' => 'templates', 'version' => '1.0.0', 'state' => 'stable', 'clearcacheonload' => 1, 'author' => 'Morton Jonuschat', 'author_email' => '[email protected]', 'author_company' => 'MoJo Code', 'constraints' => array( 'depends' => array( 'typo3' => '6.2.0-6.2.99', 'css_styled_content' => '6.2.0-6.2.99' ), 'conflicts' => array(), 'suggests' => array() ) ); sitepackage_starter/ext_emconf.php   Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 16
  14. PageTSconfig TCEFORM { pages { layout.disabled = 1 alias.disabled =

    1 } tt_content { header_layout { altLabels { 1 = H1 2 = H2 3 = H3 4 = H4 5 = H5 } removeItems = 0,6 } } } sitepackage_starter/Configura?on/PageTS/TCEFORM.txt   Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 17
  15. Register  Page  TSconfig if (!defined('TYPO3_MODE')) { die ('Access denied.'); }

    # \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig(
 # '<INCLUDE_TYPOSCRIPT: source="FILE:EXT:' . $_EXTKEY .
 # '/Configuration/PageTS/TCEFORM.txt">'
 # );
 sitepackage_starter/ext_localconf.php   Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 18
  16. Register  TypoScript  Template if (!defined('TYPO3_MODE')) { die ('Access denied.'); }

    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile( $_EXTKEY, 'Configuration/TypoScript', 'Site Package' ); sitepackage_starter/ext_tables.php   Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 19
  17. TypoScript  Constants page.template { # cat=sitepackage_starter/file; type=string; label=Frontend templates templateRootPath

    = EXT:sitepackage_starter/Resources/Private/Templates/ # cat=sitepackage_starter/file; type=string; label=Frontend partials partialRootPath = EXT:sitepackage_starter/Resources/Private/Partials/ # cat=sitepackage_starter/file; type=string; label=Frontend layouts layoutRootPath = EXT:sitepackage_starter/Resources/Private/Layouts/ } sitepackage_starter/Configura?on/TypoScript/constants.txt   Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 20
  18. TypoScript  Setup # Require TypoScript from dependencies <INCLUDE_TYPOSCRIPT: source="FILE:EXT:css_styled_content/static/setup.txt"> #

    PAGE - Templates page {
 10 = FLUIDTEMPLATE
 10 {
 layoutRootPath = {$page.template.layoutRootPath}
 partialRootPath = {$page.template.partialRootPath}
 
 file.stdWrap.cObject = CASE
 file.stdWrap.cObject {
 key.data = levelfield:-1, backend_layout_next_level, slide
 key.override.field = backend_layout
 
 default = TEXT
 default.value = {$page.template.templateRootPath}/Pages/Index.html
 }
 }
 } sitepackage_starter/Configura?on/TypoScript/setup.txt   Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 21
  19. TypoScript  Setup # PAGE - Content page {
 10 {


    variables {
 contentNormal < styles.content.get
 contentLeft < styles.content.getLeft
 contentRight < styles.content.getRight
 }
 }
 } sitepackage_starter/Configura?on/TypoScript/setup.txt   Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 22
  20. Include  CSS # PAGE - CSS page {
 includeCSS {


    styles = EXT:sitepackage_starter/Resources/Public/Css/styles.css
 } } sitepackage_starter/Configura?on/TypoScript/setup.txt   Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 23
  21. Include  JavaScripts # PAGE - JavaScripts page {
 includeJSLibs {


    jQuery = //ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
 jQuery { external = 1 excludeFromConcatenation = 1 disableCompression = 1 } } includeJSFooter {
 styles = EXT:sitepackage_starter/Resources/Public/JavaScript/site.js
 } } sitepackage_starter/Configura?on/TypoScript/setup.txt   Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 24
  22. Custom  ViewHelpers Need  a  dedicated  extension  for  autoloading  to  work

    1 Conven?on  is  to  put  them  into  Classes/ViewHelpers 3 A  site  package  is  a  TYPO3  CMS  extension 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 26
  23. Custom  ContentElements Try  to  re-­‐use  fields  provided  by  E_content  out

     of  the  box 1 Op?onally  add  them  to  the  New  Content  Element  Wizard 4 Avoid  instan?a?ng  a  full  Extbase  Controller  for  simple  elements       3 Can  use  custom  database  tables  if  required 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 27
  24. Backend  Layouts The  view  in  the  page  module  should  resemble

     the  Frontend  structure 1 Can  be  used  to  automa?cally  switch  the  Frontend  template 3 Need  a  „Provider“  to  avoid  requiring  a  database  record 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 28
  25. Grid  Elements Use  for  grid/columnar  output  when  Backend  Layouts  are

     not  flexible  enough 1 Grid  elements  can  be  configured  purely  by  TypoScript 3 Avoid  the  technical  debt,  see  if  custom  content  elements  or  backend  layouts  suffice 2 Watch  out  for  your  colPos  arguments! 4 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 29
  26. More  Components Hooks 1 Services 3 XClasses  for  other  Extensions

    2 User  Func?ons 4 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 30
  27. Best  PracXce Manage  and  version  all  front-­‐end  dependencies 1 Op?mize

     Images 5 Concatenate  and  minify  all  CSS/JS 4 Write  modular  Javascript 3 Pre-­‐  /  Postprocess  your  Stylesheets 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 32
  28. Integra5ng  the  tools  into  a  site  package… Websites  as  a

     TYPO3  CMS  extension Morton  Jonuschat 34
  29. The  SoluXon Bower Sass   +   PostCSS Webpack Imagemin

    Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 35
  30. Bowerize  Assets Keeping  frameworks,  libraries  and  assets  current  has  never

     been  easier 1 Copy  bowerized  assets  to  the  public  directory 4 Integrate  frameworks  and  libraries  into  the  processing  step 3 Don’t  use  bower  components  directly 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 36
  31. Pre-­‐Process  Stylesheets Lots  of  good  op?ons  besides  Sass 1 Define

     a  standard  and  s?ck  to  it 4 Choose  a  speedy  preprocessor 3 Choose  a  processor  that  supports  impor?ng  pure  CSS 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 37
  32. Post-­‐Process  Stylesheets Write  CSS  without  vendor  prefixes  -­‐  use  Autoprefixer

     to  add  them 1 Minify  CSS  for  produc?on 4 Include  source  maps  during  development 3 Inline  assets  using  base64  encoding 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 38
  33. Compile  JavaScripts Modern  JavaScript  consists  of  lots  of  modules  (and

     templates)    as  well  as  different  loaders 1 webpack  is  awesome  in  handling  this  mess   4 Some  dependencies  come  from  external  sources 3 Legacy  JavaScript  makes  a  lot  of  assump?ons  about  the  environment 2 …and  supports  babel  to  transpile  ES2015 5 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 39
  34. Minify  Images Lots  of  file  formats  to  take  into  account

    1 Performance  gains  can  be  HUGE! 4 Image  op?miza?on  is  SLOW! 3 Even  scalable  vector  graphics  need  op?miza?on 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 40
  35. Development  Mode Should  perform  minimum  amount  of  work  when  an

     asset  changes 1 …and  CONVENIENT 4 Needs  to  be  FAST… 3 Conven?on  over  Configura?on 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 42
  36. BrowserSync Effortless  integra?on  using  integrated  proxy 1 Remote  inspector 4

    Interac?on  sync 3 File  sync 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 43
  37. ProducXon  Mode Start  clean 1 Do  the  SLOW  stuff 4

    Fail  hard 3 Regenerate  every  asset 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 45
  38. Release  Procedure Bump  version 1 Create  ZIP  archive  for  extension

    3 Run  produc?on  build 2 Deploy 4 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 48
  39. $ gulp release One  final  command  (deploy  not  included) Websites

     as  a  TYPO3  CMS  extension Morton  Jonuschat 49
  40. Even  the  minimal  setup  is  a  win! Websites  as  a

     TYPO3  CMS  extension Morton  Jonuschat 52
  41. Resources File  system  conven?ons   hEp:/ /docs.typo3.org/typo3cms/CodingGuidelinesReference/FileSystemConven?ons/ 1 Bootstrap  Package

      hEps:/ /github.com/benjaminkoE/bootstrap_package 4 The  Anatomy  of  Sitepackages   hEps:/ /speakerdeck.com/benjaminkoE/the-­‐anatomy-­‐of-­‐typo3-­‐sitepackages 3 Extension  Architecture   hEp:/ /docs.typo3.org/typo3cms/CoreApiReference/ExtensionArchitecture/ 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 56 BackendLayout  Provider   hEps:/ /github.com/georgringer/belayout_fileprovider 5
  42. Licenses CC-­‐BY  2.0   hEps:/ /crea?vecommons.org/licenses/by/2.0/ 1 NASA  Copyright  Policy

      hEp:/ /www.jsc.nasa.gov/policies.html#Guidelines 3 CC-­‐BY-­‐SA  2.0   hEps:/ /crea?vecommons.org/licenses/by-­‐sa/2.0/ 2 Websites  as  a  TYPO3  CMS  extension Morton  Jonuschat 59 Entypo+  Icon  Package  (hEp:/ /www.entypo.com/),  licensed  CC-­‐BY-­‐SA  4.0   hEps:/ /crea?vecommons.org/licenses/by-­‐sa/4.0/ 4 Lato  Font  Family:  SIL  Open  Font  License  1.1   Source  Code  Pro  Font  Family:  Open  Font  License  (OFL) 5