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  
  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  
  3. ¡  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  
  4. ¡  Best  to  use  for  module  or  theme   development

      ¡  I  don’t  like  it  for  full  site  development   March  3rd,  2013   MidwestPHP   5  
  5. ¡  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  
  6. 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  
  7. ¡  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  
  8. ¡  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  
  9. ¡  Run  everything  off  of  your  local  machine!   ¡ 

    Great  if  you  can  do  it,  I  like  vagrant  better   March  3rd,  2013   MidwestPHP   10  
  10. ¡  Write  your  tests  before  you  code   ¡  Watch

     it  fail   ¡  Write  code  to  make  your  tests  pass   ¡  Feel  better   March  3rd,  2013   MidwestPHP   13  
  11. ¡  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  
  12. ¡  Unit  tests  do  not  bootstrap  Drupal,  so  are  

    very  quick   ¡  Functional  Tests  bootstrap  Drupal,  so  are  very   slow   March  3rd,  2013   MidwestPHP   16  
  13. ¡  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  
  14. 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  
  15. I  couldn’t  think  of  a  good  tagline  that  should  go

     here   March  3rd,  2013   MidwestPHP   20  
  16. ¡  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  
  17. ¡  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  
  18. ¡  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  
  19. ¡  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  
  20. ¡  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  
  21. It’s  kind  of  like  nuclear  fusion,  but  without  all  the

     explosions   March  3rd,  2013   MidwestPHP   27  
  22. ¡  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  
  23. ¡  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  <script>   and  <style>  tags  in  your  theme   March  3rd,  2013   MidwestPHP   29  
  24. ¡  Acquia  Dev  Desktop   ¡  vagrant   ¡  Drupal

     SimpleTest   ¡  drush   ¡  Backup  and  Migrate   ¡  Devel   ¡  Features   March  3rd,  2013   MidwestPHP   31  
  25. March  3rd,  2013   MidwestPHP   32   E-­‐mail:  [email protected]

      Twitter:  @dragonmantank   App.net:  @ctankersley     http://joind.in/talk/view/8227