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

Drupal Development Tips

Drupal Development Tips

Any PHP developer can develop modules for Drupal, but like any system newcomers, will have a learning curve that must be overcome before the system makes sense. With Drupal playing the role of both a CMS as well as a generic application framework, you have the power to build complex applications as well as small modularized code. We'll look at tools and practices to make Drupal development easier like the devel module, SimpleTest unit testing, and moving components back and forth with the Features module.

MidwestPHP 2013

ctankersley

March 03, 2013
Tweet

More Decks by ctankersley

Other Decks in Technology

Transcript

  1. March  3rd,  2013   MidwestPHP   1  
    E-­‐mail:  [email protected]  
    Twitter:  @dragonmantank  
    App.net:  @ctankersley  
    http://joind.in/talk/view/8227  

    View Slide

  2. ¡  Chris  Tankersley  
    ¡  Doing  PHP  for  9  Years  
    ¡  Lots  of  projects  no  one  uses,  and  a  few  that  
    some  do  
    §  TL;DR  https://github.com/dragonmantank  
    ¡  Heavy  Drupal  Development  for  2  years  
    March  3rd,  2013   MidwestPHP   2  

    View Slide

  3. What  powers  your  site  
    March  3rd,  2013   MidwestPHP   3  

    View Slide

  4. ¡  Pre-­‐built  *AMP  Stack  
    ¡  Available  for  Drupal  6  or  7  
    ¡  Install  and  Ready  to  Go  
    March  3rd,  2013   MidwestPHP   4  
    Advantages  
    Disadvantages  
    ¡  Not  built  for  multiple  installs  
    ¡  Can’t  use  for  existing  sites  
    ¡  Only  for  Windows  and  Mac  

    View Slide

  5. ¡  Best  to  use  for  module  or  theme  
    development  
    ¡  I  don’t  like  it  for  full  site  development  
    March  3rd,  2013   MidwestPHP   5  

    View Slide

  6. ¡  Make  use  of  the  “Sites”  option  to  help  
    separate  work  
    ¡  On  Mac,  only  the  /sites/all/  folder  is  writable  
    §  Even  Sites  you  create  are  not  writable  
    ¡  Don’t  put  the  entire  stack  in  VC,  just  your  
    work  
    March  3rd,  2013   MidwestPHP   6  

    View Slide

  7. March  3rd,  2013   MidwestPHP   7  
    ¡  Full  server  to  run  code  
    ¡  Self  contained  and  can  be  replicated  
    ¡  Most  modern  machines  can  do  VM  
    Advantages  
    Disadvantages  
    ¡  Uses  more  resources  
    ¡  Easier  to  break  

    View Slide

  8. ¡  Best  to  use  for  full  site  development  
    ¡  Or  use  it  all  the  time,  it’s  nice  to  have  an  
    environment  you  control  
    March  3rd,  2013   MidwestPHP   8  

    View Slide

  9. ¡  Try  and  pick  a  distro  that  is  close  to  your  production  
    setup.  If  you  are  running  Redhat  in  production,  set  up  
    an  CentOS  box  
    ¡  Set  up  the  document  root  for  your  web  server  to  be  
    the  /vagrant  folder  (or  sub  folder,  depending  on  your  
    site  layout).  This  way  your  site  will  run  automatically.  
    ¡  If  you  are  running  CentOS  and  Apache,  disable  
    SELinux  so  that  Apache  will  use  the  /vagrant  folder  
    ¡  Don't  use  PHP  5.4  with  Drupal  7  or  lower  
    ¡  Make  sure  APC,  or  some  opcode  cache,  is  installed  
    ¡  Provide  lots  of  RAM,  at  least  1GB  
    March  3rd,  2013   MidwestPHP   9  

    View Slide

  10. ¡  Run  everything  off  of  your  local  machine!  
    ¡  Great  if  you  can  do  it,  I  like  vagrant  better  
    March  3rd,  2013   MidwestPHP   10  

    View Slide

  11. @grmpyprogrammer  will  track  you  down  if  you  don’t  
    March  3rd,  2013   MidwestPHP   11  

    View Slide

  12. Automatically  making  sure  your  code  works  
    March  3rd,  2013   MidwestPHP   12  

    View Slide

  13. ¡  Write  your  tests  before  you  code  
    ¡  Watch  it  fail  
    ¡  Write  code  to  make  your  tests  pass  
    ¡  Feel  better  
    March  3rd,  2013   MidwestPHP   13  

    View Slide

  14. ¡  Drupal  ships  with  SimpleTest  baked  in  
    ¡  Supports  unit  testing  and  functional  testing  
    ¡  Unit  tests  are  done  by  extending  
    DrupalUnitTestCase  
    ¡  Functional  tests  are  done  by  extending  
    DrupalWebTestCase  
    March  3rd,  2013   MidwestPHP   14  

    View Slide

  15. March  3rd,  2013   MidwestPHP   15  

    View Slide

  16. ¡  Unit  tests  do  not  bootstrap  Drupal,  so  are  
    very  quick  
    ¡  Functional  Tests  bootstrap  Drupal,  so  are  very  
    slow  
    March  3rd,  2013   MidwestPHP   16  

    View Slide

  17. ¡  The  test  runner  is  AJAX,  so  it  can  break  very  
    easily  
    ¡  Debugging  can  be  hard  since  extra  output  
    breaks  the  test  runner,  and  since  the  DB  is  
    destroyed  watchdog()  is  useless  
    §  You  can  use  $this-­‐>verbose(‘message’)  or  
    debug(‘message’)  though  
    March  3rd,  2013   MidwestPHP   17  

    View Slide

  18. Your  command  line  friend  
    March  3rd,  2013   MidwestPHP   18  

    View Slide

  19. Dump  your  database  to  an  SQL  file  
    $  drush  sql-­‐dump  -­‐-­‐result-­‐file=/PATH/TO/dump.sql  
     
    Back  up  the  entire  site  to  a  tarball  
    $  drush  archive-­‐dump  default  
     
    View  watchdog  entries  
    $  drush  watchdog-­‐list  
     
    Update  Drupal  and  modules  
    $  drush  pm-­‐update  
     
    Download  module  
    $  drush  pm-­‐download  [module_name]  
    March  3rd,  2013   MidwestPHP   19  

    View Slide

  20. I  couldn’t  think  of  a  good  tagline  that  should  go  here  
    March  3rd,  2013   MidwestPHP   20  

    View Slide

  21. ¡  Allows  you  to  quickly  back  up  the  DB  and  
    move  it  
    ¡  No  need  to  use  a  DB  GUI  
    ¡  Can  do  automatic  local  or  remote  backups  
    ¡  Useful  for  moving  databases  from  one  server  
    to  another  
    March  3rd,  2013   MidwestPHP   21  

    View Slide

  22. ¡  Exposes  a  lot  of  the  structure  of  Drupal  
    §  Things  like  nodes  can  be  clicked  through  to  see  
    their  object  structure  
    ¡  Can  auto-­‐generate  dummy  content  
    ¡  Better  debugging  output  
    §  dpm()  and  dvm()  for  pretty  output  
    §  dpr(),  kpr(),  and  dvr()  will  dump  to  the  page  
    header  
    March  3rd,  2013   MidwestPHP   22  

    View Slide

  23. ¡  Package  system  for  Drupal  
    ¡  Takes  a  lot  of  stuff  in  the  DB  and  makes  it  
    exportable  and  portable  via  code  
    ¡  Lot  of  stuff  works  out  of  the  box,  extra  
    modules  like  UUID,  boxes,  and  features_extra  
    pick  up  the  slack  
    ¡  ftools  makes  updating  features  easy  
    March  3rd,  2013   MidwestPHP   23  

    View Slide

  24. Understand  it  and  harness  its  power  
    March  3rd,  2013   MidwestPHP   24  

    View Slide

  25. ¡  Page  caching  for  full  output  caching  
    ¡  Block  caching  so  that  dynamic  content  can  
    still  update  if  it  needs  to  
    ¡  You  can  configure  how  long  to  cache  things  
    for  
    March  3rd,  2013   MidwestPHP   25  

    View Slide

  26. ¡  In  Full  Page  Caching,  most  of  the  PHP  isn’t  
    run  
    §  Effectively  turns  your  site  into  a  static  site  (kind  
    of)  
    ¡  With  block  caching,  not  all  blocks  will  cache.  
    What  and  when  to  cache  is  up  to  the  block  
    March  3rd,  2013   MidwestPHP   26  

    View Slide

  27. It’s  kind  of  like  nuclear  fusion,  but  without  all  the  explosions  
    March  3rd,  2013   MidwestPHP   27  

    View Slide

  28. ¡  Will  group  needed  JS  and  CSS  files  together,  
    reducing  the  number  of  HTTP  requests  
    ¡  Will  minify  CSS,  reducing  some  of  the  
    transmission  size  
    YOU  have  to  make  your  modules  take  
    advantage  of  it,  though  
    March  3rd,  2013   MidwestPHP   28  

    View Slide

  29. ¡  Let  Drupal  know  about  your  files  
    §  drupal_add_js()  
    §  drupal_add_css()  
    §  Add  the  files  to  your  .info  file  
    ¡  Don’t  just  add  JS  and  CSS  files  via    <br/>and  <style>  tags  in  your  theme  <br/>March  3rd,  2013   MidwestPHP   29  <br/>

    View Slide

  30. Really,  ask.    
    March  3rd,  2013   MidwestPHP   30  

    View Slide

  31. ¡  Acquia  Dev  Desktop  
    ¡  vagrant  
    ¡  Drupal  SimpleTest  
    ¡  drush  
    ¡  Backup  and  Migrate  
    ¡  Devel  
    ¡  Features  
    March  3rd,  2013   MidwestPHP   31  

    View Slide

  32. March  3rd,  2013   MidwestPHP   32  
    E-­‐mail:  [email protected]  
    Twitter:  @dragonmantank  
    App.net:  @ctankersley  
     
    http://joind.in/talk/view/8227  

    View Slide