Slide 1

Slide 1 text

Count to 10 and Say Yes JOHN HENRY DONOVAN Engine Summit 7th June 2011

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Introduction We have all been there. A client emails and makes an unreasonable feature request. Our first response after the explosion of expletives would be to say no. But let's count to 10 and rescue the situation.

Slide 4

Slide 4 text

Lateral thinking • For me personally, lateral thinking plays a big part when designing architecture for a clients web application/site • It's problem solving at it's lowest common denominator • In ExpressionEngine these problems present themselves all the time. I call it problem solving but it is really solution finding • Lateral thinking comes into play the more you become aware of the flexibility that EE has to offer. Your solution depends on the tools and knowledge you have at hand. It's about taking something you know and applying or seeing it in a different way. • Lets examine one of the most common over thought items in EE

Slide 5

Slide 5 text

{if news_image == "black"} {if:elseif news_image == "red"} {if:elseif news_image == "yellow"} {if:elseif news_image == "green"} {if:elseif news_image == "blue"} {if:else} {/if}

Slide 6

Slide 6 text

Slide 7

Slide 7 text

The Member Export Tool "We want to be able to export our members into Excel. Looking at them in EE is all well and good but I want the data available to our non-webeditors also. We have an a piece of software here in the office that we want to import our members into"

Slide 8

Slide 8 text

The Member Export Tool IMMEDIATE THOUGHTS • I just built you a whole website in ExpressionEngine, why do you need to do this?? • There must be an add-on that does what they want • Punt the cat down the stairs

Slide 9

Slide 9 text

The Member Export Tool LETS THINK ABOUT THIS • What are the exact reasons behind the client wanting this • There must be a gap in the workflow I created for them • It is something out of scope so lets do our best to make his flawless • Lets cover all angles • Lets turn this into a project that we can charge a client for and be happy with the outcome

Slide 10

Slide 10 text

The Member Export Tool SPEC • Export as a downloadable CSV file • Choose today's date • Choose a specific date • Choose a date range • Make it all template based • Protect it from the public

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

http://www.mydomain.com/member-export/index

Slide 14

Slide 14 text

Member Data Custom Export Tool $(function(){ $('input#range').daterangepicker( { text: 'My Range', dateStart: '2010-01-01', dateEnd: 'Today', dateFormat:'yy-mm-dd', rangeSplitter:'/', onClose: function(){ var actionDate="/member-export/exporter/"+$("input#range").val(); $("#export-tool").attr("action",actionDate); } } ); }); /member-export/index

Slide 15

Slide 15 text

{if logged_out}

Bugger off!

You must be a site administrator to view this page.

{if:else}

Member Data Custom Export Tool

{/if}

Slide 16

Slide 16 text

The Member Export Tool member-export exporter today specific date date range member-export.csv

Slide 17

Slide 17 text

{if segment_3 == "" AND segment_4 == ""}

Bugger off!

You must be a site administrator to view this page.

{/if} {if segment_3 == "{current_time format='%Y-%m-%d'}" AND segment_4 == ""} {embed="member-export/today" date1="{current_time format='Y-%m-%d'}"} {/if} {if segment_3 != "{current_time format='Y-%m-%d'}" AND segment_4 == "" AND segment_3 != ""} {embed="member-export/specific-date" date1="{segment_3}"} {/if} {if segment_3 != "" && segment_4 != ""} {embed="member-export/date-range" date1="{segment_3}" date2="{segment_4}"} {/if} /member-export/exporter

Slide 18

Slide 18 text

The Member Export Tool member-export exporter today specific date date range member-export.csv

Slide 19

Slide 19 text

{exp:ajw_export sql="SELECT m.member_id AS 'Website Member Id', date_format(from_unixtime(join_date), '%d/%m/%Y') AS 'Join Date', m.username AS 'Username', m.email AS 'Email', m.url AS 'URL', m_field_id_1 AS 'Subscribed to Newsletter' FROM exp_members AS m LEFT JOIN exp_member_data AS d ON d.member_id = m.member_id WHERE date_format(from_unixtime(join_date), '%d-%m-%Y')='{embed:date1}' ORDER BY m.member_id DESC" format="csv" filename="member-export.csv" } /member-export/today

Slide 20

Slide 20 text

{exp:ajw_export sql="SELECT m.member_id AS 'Website Member Id', date_format(from_unixtime(join_date), '%d/%m/%Y') AS 'Join Date', m.username AS 'Username', m.email AS 'Email', m.url AS 'URL', m_field_id_1 AS 'Subscribed to Newsletter' FROM exp_members AS m LEFT JOIN exp_member_data AS d ON d.member_id = m.member_id WHERE date_format(from_unixtime(join_date), '%d-%m-%Y')='{embed:date1}' ORDER BY m.member_id DESC" format="csv" filename="member-export.csv" } /member-export/specific-date

Slide 21

Slide 21 text

/member-export/date-range {exp:ajw_export sql="SELECT m.member_id AS 'Website Member Id', date_format(from_unixtime(join_date), '%d/%m/%Y') AS 'Join Date', m.username AS 'Username', m.email AS 'Email', m.url AS 'URL', m_field_id_1 AS 'Subscribed to Newsletter' FROM exp_members AS m LEFT JOIN exp_member_data AS d ON d.member_id = m.member_id WHERE date_format(from_unixtime(join_date), '%Y-%m-%d') BETWEEN '{embed:date1}' AND '{embed:date2}' ORDER BY m.member_id DESC" format="csv" filename="member-export.csv" }

Slide 22

Slide 22 text

http://www.mydomain.com/member-export/index

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

Screenshare time!

Slide 25

Slide 25 text

Thanks JOHN HENRY DONOVAN http://johnhenry.ie @johnhenry_ie