44
Pods + WP = CMS Sort of …

Wordcamp Fayetteville Pods Presentation (PDF)

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Wordcamp Fayetteville Pods Presentation (PDF)

Pods  +  WP  =  CMS  

Sort  of  …    

Page 2: Wordcamp Fayetteville Pods Presentation (PDF)

What  do  we  want  in  a  CMS?  

•  Flexible  –  Does  different  things    •  Robust  –  Does  things  well  

Page 3: Wordcamp Fayetteville Pods Presentation (PDF)

Is  Wordpress  a  CMS?  Yes  

•  Wordpress  is  really  good  at  publishing  one  kind  of  content:  the  Post  

•  Its  interface  is  easy  to  learn  and  easy  to  teach.    •  Theming  is  especially  powerful.  Design  community  

•  Plugins  and  custom  fields  provide  addiMonal  flexibility  on  a  post  by  post  basis.    

Page 4: Wordcamp Fayetteville Pods Presentation (PDF)

Is  Wordpress  a  CMS?  No    

•  Major  challenges  customizing  backend  UI  •  All  post  types  essenMally  the  same  

•  Custom  fields  difficult  to  work  with  in  complex  ways  

•  Scalability  issues  

Page 5: Wordcamp Fayetteville Pods Presentation (PDF)

So  what?  

•  Time  is  money  •  Consultants  need  to  maximize  funcMonality/Mme  equaMon.  

Page 6: Wordcamp Fayetteville Pods Presentation (PDF)

Custom  Fields  

•  Good  for  on  the  fly  customizaMon  •  Bad  for  complex  content  types  

Page 7: Wordcamp Fayetteville Pods Presentation (PDF)

Querying  Custom  Fields  

$args  =  “meta_key=airline_name&value=American”;  $args  =  “meta_key=arrives&meta_compare=>=&meta_value=DATE()”  

query_posts($args);  

Page 8: Wordcamp Fayetteville Pods Presentation (PDF)

MulMple  custom  fields?  

funcMon  get_post_meta_mulMple($metaDataList)  {  

 global  $wpdb;  

 $querystr  =  "SELECT  p.*  FROM  $wpdb-­‐>posts  AS  p  WHERE  p.ID  IN  (  ";  

 $querystr  .=  "SELECT  post_id  FROM  $wpdb-­‐>postmeta  WHERE  ";    $innerqry  =  array();    foreach($metaDataList  as  $key  =>  $value)  {  

   $innerqry[]  =  $wpdb-­‐>prepare(  "(meta_key  =  %s  AND  meta_value  =  %s)",  $key,  $value  );      }  

 $querystr  .=  implode("  OR  ",  $innerqry);  

 $querystr  .=  "  GROUP  BY  post_id  ";    $querystr  .=  "HAVING  count(*)  =  "  .  count($metaDataList);  

 $querystr  .=  ")  AND  p.post_status  =  'publish'  ";  

 $metaResults  =  $wpdb-­‐>get_results($querystr,  OBJECT);              return  $metaResults;  

}   Source:  hsp://Mnyurl.com/ldadam  

Page 9: Wordcamp Fayetteville Pods Presentation (PDF)

Scalability  

•  Most  wordpress  users  will  never  experience  performance  issues  because  the  number  pages  just  isn’t  enough  to  maser.    

•  But  consultants  sMll  need  to  be  concerned.    

Page 10: Wordcamp Fayetteville Pods Presentation (PDF)

Scalability  

•  All  posts/types  are  in  one  table.  •  All  custom  fields  are  in  longtext  format  which  means  they  can  store  up  to  4GB.  

•  Table  sizes  are  effecMvely  doubled  by  custom  fields  10,000  posts  with  10  cfs  each  is  like  having  100,000  rows.  Add  in  revisions  and  even  simple  queries  become  hogs.    

Page 11: Wordcamp Fayetteville Pods Presentation (PDF)

So  What  are/is  Pods?  

•  Not  a  plugin  …  really  •  Pods  =  Simple,  scalable,  CMS  soluMon  for  Wordpress.  

•  UlMmate  flexibility  with  being  too  Mme  intensive.    

•  Frontend/Backend  CustomizaMon  a  cinch.      

Page 12: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  Flight  List  

Page 13: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  Flight  List  

Page 14: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  Flight  List  

Page 15: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  Flight  List  

Page 16: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  Flight  List  

Page 17: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  Flight  List  

Page 18: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  Flight  List  

Page 19: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  Flight  List  

Page 20: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

Page 21: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

<?php  $flight  =  new  Pod(‘flight’);  $flight-­‐>findRecords(‘arrives  ASC’,  -­‐1);  echo  $flight-­‐>showTemplate(‘flight-­‐list’);  ?>  

Page 22: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

Page 23: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

{@field.column}  

Page 24: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

{@airline.name}  -­‐  {@name},  {@departs}  <br/>  

Page 25: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

hsp://www.yourdomain.com/flights/  

Page 26: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

hsp://www.yourdomain.com/flights/?airline=2  

Page 27: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

<?php  $flight  =  new  Pod(‘flight’);  $flight-­‐>findRecords(‘arrives  ASC’,  -­‐1);  echo  $flight-­‐>getFilters(‘airline’,  ‘Filter’);  echo  $flight-­‐>showTemplate(‘flight-­‐list’);  ?>  

Page 28: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

Page 29: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

<?php  $form  =  new  Pod('flight');  echo  $form-­‐>publicForm();  ?>  

Page 30: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

Page 31: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

<?php  $form  =  new  Pod('flight');  echo  $form-­‐>publicForm();  ?>  

<?php  $form  =  new  Pod('flight');  $fields  =  array('name','arrive','depart');  echo  $form-­‐>publicForm($fields);  ?>  

Page 32: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

Page 33: Wordcamp Fayetteville Pods Presentation (PDF)

Example:  TemplaMng  

Page 34: Wordcamp Fayetteville Pods Presentation (PDF)

Showcase  

Page 35: Wordcamp Fayetteville Pods Presentation (PDF)

MulMple  custom  fields?  

funcMon  get_post_meta_mulMple($metaDataList)  {  

 global  $wpdb;  

 $querystr  =  "SELECT  p.*  FROM  $wpdb-­‐>posts  AS  p  WHERE  p.ID  IN  (  ";  

 $querystr  .=  "SELECT  post_id  FROM  $wpdb-­‐>postmeta  WHERE  ";    $innerqry  =  array();    foreach($metaDataList  as  $key  =>  $value)  {  

   $innerqry[]  =  $wpdb-­‐>prepare(  "(meta_key  =  %s  AND  meta_value  =  %s)",  $key,  $value  );      }  

 $querystr  .=  implode("  OR  ",  $innerqry);  

 $querystr  .=  "  GROUP  BY  post_id  ";    $querystr  .=  "HAVING  count(*)  =  "  .  count($metaDataList);  

 $querystr  .=  ")  AND  p.post_status  =  'publish'  ";  

 $metaResults  =  $wpdb-­‐>get_results($querystr,  OBJECT);              return  $metaResults;  

}   Source:  hsp://Mnyurl.com/ldadam  

Page 36: Wordcamp Fayetteville Pods Presentation (PDF)

Showcase  

<?php  $di  =  new  Pod('distress_index');  $di-­‐>findRecords('name  DESC',  -­‐1,  "t.un  >  6.00  AND  t.cpi  <  2.00");  echo  $di-­‐>showTemplate('distress_data_table');  ?>  

Page 37: Wordcamp Fayetteville Pods Presentation (PDF)

Scalability  

•  Using  Custom  Fields:  – 600  rows  x  6  custom  fields  =  3600  table  rows  

•  Using  Pods:  – 600  table  rows  

Page 38: Wordcamp Fayetteville Pods Presentation (PDF)

Showcase  

Page 39: Wordcamp Fayetteville Pods Presentation (PDF)

What  about  Custom  Taxonomies/Post  Types?    

•  Wordpress  argues  that  custom  taxonomies  and  the  introducMon  of  post  types  alleviates  the  need  for  excessive  use  of  custom  fields.    

•  But  this  only  increases  the  scalability  slightly,  there  are  sMll  problems  for  large  sites.    

Page 40: Wordcamp Fayetteville Pods Presentation (PDF)

Pods-­‐nosis  NegaMve?    

•  Because  pods  data  is  saved  in  separate  tables,  standard  Wordpress  post  features  are  not  available.  (i.e.  comments/akismet)  

•  Wordpress  does  not  currently  endorse  the  pods  cms  strategy  and  instead  is  pushing  the  “one  post  type  fits  all  strategy”.  

•  Pods  community  is  considerably  smaller  than  the  wordpress  community.    

Page 41: Wordcamp Fayetteville Pods Presentation (PDF)

Why  use  pods?    

•  Learn  one  plugin,  build  anything  you  want.  •  Your  site  has  lots  of  relaMonships  between  types  of  content.  

•  Scalability  is  a  concern.    •  Truly  custom,  customizaMon  

Page 42: Wordcamp Fayetteville Pods Presentation (PDF)

Summary    

•  There  is  no  RIGHT  way  to  use  Wordpress  as  a  CMS.  

•  Pods  is  a  tool  for  developers,  not  users.    •  Pods  is  the  most  flexible/scalable  CMS  opDon  currently  available  for  Wordpress.    

Page 43: Wordcamp Fayetteville Pods Presentation (PDF)

More  info?  

•  www.podscms.org    •  www.mikevanwinkle.com    

•  @podscms,  @mpvanwinkle  

Page 44: Wordcamp Fayetteville Pods Presentation (PDF)

A  QuesMon?  

•  Should  Wordpress.org  abandon  it’s  own  asempts  to  make  WP  a  CMS?  Can  WP  be  everything  to  everyone?