Wordcamp Fayetteville Pods Presentation (PPTX)

44
Pods + WP = CMS Sort of …

description

This is @mpvanwinkle's presentation on WP PodsCMS from wordcamp fayetteville, more info here: http://www.mikevanwinkle.com/?p=478

Transcript of Wordcamp Fayetteville Pods Presentation (PPTX)

Page 1: Wordcamp Fayetteville Pods Presentation (PPTX)

Pods + WP = CMSSort of …

Page 2: Wordcamp Fayetteville Pods Presentation (PPTX)

What do we want in a CMS?

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

Page 3: Wordcamp Fayetteville Pods Presentation (PPTX)

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 additional

flexibility on a post by post basis.

Page 4: Wordcamp Fayetteville Pods Presentation (PPTX)

Is Wordpress a CMS? No

• Major challenges customizing backend UI• All post types essentially the same• Custom fields difficult to work with in complex

ways• Scalability issues

Page 5: Wordcamp Fayetteville Pods Presentation (PPTX)

So what?

• Time is money• Consultants need to maximize

functionality/time equation.

Page 6: Wordcamp Fayetteville Pods Presentation (PPTX)

Custom Fields

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

Page 7: Wordcamp Fayetteville Pods Presentation (PPTX)

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 (PPTX)

Multiple custom fields?

function get_post_meta_multiple($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: http://tinyurl.com/ldadam

Page 9: Wordcamp Fayetteville Pods Presentation (PPTX)

Scalability

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

• But consultants still need to be concerned.

Page 10: Wordcamp Fayetteville Pods Presentation (PPTX)

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 effectively 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 (PPTX)

So What are/is Pods?

• Not a plugin … really• Pods = Simple, scalable, CMS solution for

Wordpress.• Ultimate flexibility with being too time

intensive. • Frontend/Backend Customization a cinch.

Page 12: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Flight List

Page 13: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Flight List

Page 14: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Flight List

Page 15: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Flight List

Page 16: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Flight List

Page 17: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Flight List

Page 18: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Flight List

Page 19: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Flight List

Page 20: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Templating

Page 21: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Templating

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

Page 22: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Templating

Page 23: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Templating

{@field.column}

Page 24: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Templating

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

Page 25: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Templatinghttp://www.yourdomain.com/flights/

Page 26: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Templatinghttp://www.yourdomain.com/flights/?airline=2

Page 27: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Templating

<?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 (PPTX)

Example: Templating

Page 29: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Templating

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

Page 30: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Templating

Page 31: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Templating

<?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 (PPTX)

Example: Templating

Page 33: Wordcamp Fayetteville Pods Presentation (PPTX)

Example: Templating

Page 34: Wordcamp Fayetteville Pods Presentation (PPTX)

Showcase

Page 35: Wordcamp Fayetteville Pods Presentation (PPTX)

Multiple custom fields?

function get_post_meta_multiple($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: http://tinyurl.com/ldadam

Page 36: Wordcamp Fayetteville Pods Presentation (PPTX)

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 (PPTX)

Scalability

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

• Using Pods:– 600 table rows

Page 38: Wordcamp Fayetteville Pods Presentation (PPTX)

Showcase

Page 39: Wordcamp Fayetteville Pods Presentation (PPTX)

What about Custom Taxonomies/Post Types?

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

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

Page 40: Wordcamp Fayetteville Pods Presentation (PPTX)

Pods-nosis Negative?

• 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 (PPTX)

Why use pods?

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

types of content.• Scalability is a concern. • Truly custom, customization

Page 42: Wordcamp Fayetteville Pods Presentation (PPTX)

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 option

currently available for Wordpress.

Page 43: Wordcamp Fayetteville Pods Presentation (PPTX)

More info?

• www.podscms.org• www.mikevanwinkle.com• @podscms, @mpvanwinkle

Page 44: Wordcamp Fayetteville Pods Presentation (PPTX)

A Question?

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