death of a themer - frontend united - 14 april 2013

156

Upload: matt-fielding

Post on 19-May-2015

1.754 views

Category:

Technology


0 download

DESCRIPTION

"Death of a themer" was presented by James Panton and myself at Frontend United on 14th April 2013. This was a revised and extended talk of the same name presented by James at DrupalCamp London on 2nd March 2013. http://www.slideshare.net/therealmcjim/death-of-a-themer-drupal-camplondon2013 Themers are the magicians who transform what Drupal wants to do into what the designer wants it to do. They work alongside developers and site builders and are usually hammering out CSS files, overriding templates, writing theme functions and scratching their heads. The thing is — and whisper this if possible redundancy concerns you — we can bypass the themer entirely. With some simple configuration, a site builder can get Drupal to output exactly the semantic, lightweight markup that any modern front-end designer would be proud of. The designer can be left alone to write the most appropriate HTML, CSS and JS, while the site builder need only choose a couple of options when putting together content types, views and panels to make Drupal behave. A friendly developer may have to lend a hand every now and then, but that’s it. You can get rid of the themer altogether. This is an extended version of a session James did recently but will take a closer look at the tools and workflow we created and the design principles that initially drove us to this approach.

TRANSCRIPT

Page 1: Death of a Themer - Frontend United - 14 April 2013
Page 2: Death of a Themer - Frontend United - 14 April 2013

Hello, we’re James and Matt

@mcjim and @MattFielding

from Code Enigma

Page 3: Death of a Themer - Frontend United - 14 April 2013
Page 4: Death of a Themer - Frontend United - 14 April 2013

developer

site builder

themer

designer

Page 5: Death of a Themer - Frontend United - 14 April 2013
Page 6: Death of a Themer - Frontend United - 14 April 2013
Page 7: Death of a Themer - Frontend United - 14 April 2013

developer

site builder

themer

designer

Page 8: Death of a Themer - Frontend United - 14 April 2013

developer

site builder

themer (deceased)

designer

Page 9: Death of a Themer - Frontend United - 14 April 2013

the life of a themer

Page 10: Death of a Themer - Frontend United - 14 April 2013

overworked

the life of a themer

Page 11: Death of a Themer - Frontend United - 14 April 2013

overworked angry

the life of a themer

Page 12: Death of a Themer - Frontend United - 14 April 2013

overworked angry frustrated

the life of a themer

Page 13: Death of a Themer - Frontend United - 14 April 2013

overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff overriding stuff

Page 14: Death of a Themer - Frontend United - 14 April 2013

hap

pin

ess

time

the theming curve

Page 15: Death of a Themer - Frontend United - 14 April 2013

Murder Investigation

Page 16: Death of a Themer - Frontend United - 14 April 2013

developer

site builder

designer

whodunnit?

Page 17: Death of a Themer - Frontend United - 14 April 2013

the developer?

whodunnit?

Page 18: Death of a Themer - Frontend United - 14 April 2013

“...to be honest, I never really saw the themer.We worked on different floors.”

official statement

Page 19: Death of a Themer - Frontend United - 14 April 2013

the designer?

whodunnit?

Page 20: Death of a Themer - Frontend United - 14 April 2013

excluded

Page 21: Death of a Themer - Frontend United - 14 April 2013

15 columns, why? arrgghh $£@^£$%

Page 22: Death of a Themer - Frontend United - 14 April 2013

“...there was a clash between my personal design principles and practices and his methods”

official statement

Page 23: Death of a Themer - Frontend United - 14 April 2013

what did he mean bydesign principlesand practices?

Page 24: Death of a Themer - Frontend United - 14 April 2013

Text

they are guides for the way we approach problems and craft our methods

design principles

Page 25: Death of a Themer - Frontend United - 14 April 2013

here are 3 to start us off

Page 26: Death of a Themer - Frontend United - 14 April 2013

minimise waste

waste is any activity where no value is produced

Page 27: Death of a Themer - Frontend United - 14 April 2013

use the best tools

pick the tools that fit your workflow

Page 28: Death of a Themer - Frontend United - 14 April 2013

PreprocessorsSass - CSS preprocessingLess - similar to SassStylus - a good but less popular preprocessorSusy/Singularity/ZenGrids/GridSet - grid system generatorsCompass - add-on functionality for Sass like vertical rhythm, sprites, css3 etcBourbon - Similar to Compass much to their dismayToolkit - A few nice extras to have - https://github.com/Snugug/toolkitCSS FrameworksSMACSS - styleguide/framework for developing css that is both modular and scalableOOCSS - object oriented CSS - more strict than smacssStyleguide generationKSS - uses comments in files to generate a styleguide - http://warpspire.com/posts/kss/Typecast - quick way to generate styles for typeClarify - http://www.clarify.ioStyle-Sites - https://github.com/snugug/style-sitesBrowsersChrome - Supports Sass in the web inspector - needs sass debugging turned on Canary - Same as above but also supports source mapsSafari - can use the desktop web inspector on the remote iphone/ipad site

Static page generatorsHammer for Mac http://hammerformac.com/Middleman - a bit more complex - requires command line http://middlemanapp.com/CodeKit - http://incident57.com/codekit/index.phpMixture.io http://mixture.io/Serve - Riby gem https://github.com/gummesson/serveTesting Live ReloadGuard - command line tool, faster than live-reloadAdobe Edge Inspect - http://html.adobe.com/edge/inspect/Mixture.io - http://mixture.io/Virtual Box with Windows XP and snapshots with IE6, IE7, IE8Lots of devicesTypographytypecast - http://typecast.com/ - can preview fastColourKuler - https://kuler.adobe.com/Colour Lovers - http://www.colourlovers.com/Color Scheme Designer - http://colorschemedesigner.com/http://color.hailpixel.com/Static image prototypingInvisionApp - very slick - http://invisionapp.com/Shipment - nice dropbox integration - http://blog.shipmentapp.com/

Browser ExtentionsWeb Inspector - needs sass debugging turned on and experimental modeSpeed TracerYSlowAdobe edge InspectLive ReloadVisual design and layoutFireworks - for working out Photoshop - mainly for image manipulationInDesign - some very useful tools for wireframesIllustrator - creating SVG files and illustrationsUXPin - http://uxpin.com/Useful websites and guidesHTML5 Please - http://html5please.com/Javascript Compression Tool - http://jscompress.comCompass - http://compass-style.org/examples/compass/HTML 5 Outliner - http://gsnedders.html5.org/outliner/Fontello - Icon Font generator - http://fontello.com/http://responsivepx.com/http://css3gen.com/button-generator/Sharing and experimenting with codeDabblet - http://dabblet.com/JS Fiddle - http://jsfiddle.net/CodePen - http://codepen.io/Practical tipsStart with pens and paper

Page 29: Death of a Themer - Frontend United - 14 April 2013

add – don’t remove

only include what we want and need

Page 30: Death of a Themer - Frontend United - 14 April 2013

Text

design principles are used as guides to inform the decisions we make as designers – primarily the

practices we use to design

design practices

Page 31: Death of a Themer - Frontend United - 14 April 2013

work with real content

content strategy and modeling should come before design

Page 32: Death of a Themer - Frontend United - 14 April 2013

get to code quickly

doing so also minimises a lot of waste

Page 33: Death of a Themer - Frontend United - 14 April 2013

design a process for each job

each project is different, so designa unique process for each

Page 34: Death of a Themer - Frontend United - 14 April 2013

what happens if we follow these design principles and

practices

Page 35: Death of a Themer - Frontend United - 14 April 2013

static html

Page 36: Death of a Themer - Frontend United - 14 April 2013

pure and honest

Page 37: Death of a Themer - Frontend United - 14 April 2013

these principles and practices can be applied by any

designer/frontend developer

Page 38: Death of a Themer - Frontend United - 14 April 2013

what problems doesthis cause us?

Page 39: Death of a Themer - Frontend United - 14 April 2013

traditional Drupal workflow

Page 40: Death of a Themer - Frontend United - 14 April 2013

traditional Drupal workflow

Page 41: Death of a Themer - Frontend United - 14 April 2013

traditional Drupal workflow

angry viking god themerdrowning in a sea of divs

Page 42: Death of a Themer - Frontend United - 14 April 2013

“...there was a clash between my personal design principles and practices and his methods”

official statement

Page 43: Death of a Themer - Frontend United - 14 April 2013

Murder Investigation

Page 44: Death of a Themer - Frontend United - 14 April 2013

the site builder?

whodunnit?

Page 45: Death of a Themer - Frontend United - 14 April 2013

“...I always got on really well with the themer. Hadn’t seen him much since he went on holiday, though.”

official statement

Page 46: Death of a Themer - Frontend United - 14 April 2013

so, what happened when the themer went on holiday?

Page 47: Death of a Themer - Frontend United - 14 April 2013

designer, site-builder and developer were left to cope

without a themer

Page 48: Death of a Themer - Frontend United - 14 April 2013

developer and site-builder came up with a plan…

Page 49: Death of a Themer - Frontend United - 14 April 2013

they knew the designer was frustrated and wanted to try

new methods of working

Page 50: Death of a Themer - Frontend United - 14 April 2013

so, they let the designerdo what he wanted…

Page 51: Death of a Themer - Frontend United - 14 April 2013

…and figured out a way of getting Drupal to output that without the help of a themer

Page 52: Death of a Themer - Frontend United - 14 April 2013

theming without a themer

STEP ONE

Page 53: Death of a Themer - Frontend United - 14 April 2013

the designer builtprototypes in HTML

Page 54: Death of a Themer - Frontend United - 14 April 2013

designer handedHTML, CSS and JS

over to the site builder

Page 55: Death of a Themer - Frontend United - 14 April 2013
Page 56: Death of a Themer - Frontend United - 14 April 2013
Page 57: Death of a Themer - Frontend United - 14 April 2013

CSS and JS wasplaced in the theme*

*can be created there in the first place

HTML was used asa markup guide

Page 58: Death of a Themer - Frontend United - 14 April 2013

theming without a themer

STEP TWO

Page 59: Death of a Themer - Frontend United - 14 April 2013

the developer setone or two things upfor the site builder

Page 60: Death of a Themer - Frontend United - 14 April 2013

required code

Page 61: Death of a Themer - Frontend United - 14 April 2013

a basic theme

Page 62: Death of a Themer - Frontend United - 14 April 2013

base theme?

Page 63: Death of a Themer - Frontend United - 14 April 2013
Page 64: Death of a Themer - Frontend United - 14 April 2013

<div id="page-wrapper"><div id="page">

<div id="header"><div class="section clearfix">

<?php if ($logo): ?> <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home" id="logo"> <img src="<?php print $logo; ?>" alt="<?php print t('Home'); ?>" /> </a> <?php endif; ?>

<?php if ($site_name || $site_slogan): ?> <div id="name-and-slogan"> <?php if ($site_name): ?> <?php if ($title): ?> <div id="site-name"><strong> <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a> </strong></div> <?php else: /* Use h1 when the content title is empty */ ?> <h1 id="site-name"> <a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a> </h1> <?php endif; ?> <?php endif; ?>

<?php if ($site_slogan): ?> <div id="site-slogan"><?php print $site_slogan; ?></div> <?php endif; ?> </div> <!-- /#name-and-slogan --> <?php endif; ?>

<?php print render($page['header']); ?>

</div></div> <!-- /.section, /#header -->

<?php if ($main_menu || $secondary_menu): ?> <div id="navigation"><div class="section"> <?php print theme('links__system_main_menu', array('links' => $main_menu, 'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Main menu'))); ?> <?php print theme('links__system_secondary_menu', array('links' => $secondary_menu, 'attributes' => array('id' => 'secondary-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Secondary menu'))); ?> </div></div> <!-- /.section, /#navigation --> <?php endif; ?>

<?php if ($breadcrumb): ?> <div id="breadcrumb"><?php print $breadcrumb; ?></div> <?php endif; ?>

<?php print $messages; ?>

<div id="main-wrapper"><div id="main" class="clearfix">

<div id="content" class="column"><div class="section"> <?php if ($page['highlighted']): ?><div id="highlighted"><?php print render($page['highlighted']); ?></div><?php endif; ?> <a id="main-content"></a> <?php print render($title_prefix); ?> <?php if ($title): ?><h1 class="title" id="page-title"><?php print $title; ?></h1><?php endif; ?> <?php print render($title_suffix); ?> <?php if ($tabs): ?><div class="tabs"><?php print render($tabs); ?></div><?php endif; ?> <?php print render($page['help']); ?> <?php if ($action_links): ?><ul class="action-links"><?php print render($action_links); ?></ul><?php endif; ?> <?php print render($page['content']); ?> <?php print $feed_icons; ?> </div></div> <!-- /.section, /#content -->

<?php if ($page['sidebar_first']): ?> <div id="sidebar-first" class="column sidebar"><div class="section"> <?php print render($page['sidebar_first']); ?> </div></div> <!-- /.section, /#sidebar-first --> <?php endif; ?>

<?php if ($page['sidebar_second']): ?> <div id="sidebar-second" class="column sidebar"><div class="section"> <?php print render($page['sidebar_second']); ?> </div></div> <!-- /.section, /#sidebar-second --> <?php endif; ?>

</div></div> <!-- /#main, /#main-wrapper -->

<div id="footer"><div class="section"> <?php print render($page['footer']); ?> </div></div> <!-- /.section, /#footer -->

</div></div> <!-- /#page, /#page-wrapper -->

Page 65: Death of a Themer - Frontend United - 14 April 2013

<div id="page-wrapper"><div id="page"><div id="header"><div class="section clearfix"><?php if ($logo): ?><a href="<?php print $front_page;

?>" title="<?php print t('Home'); ?>" rel="home" id="logo"><img src="<?php print $logo; ?>" alt="<?php print t('Home'); ?>" /></a><?php

endif; ?><?php if ($site_name || $site_slogan): ?><div id="name-and-slogan"><?php if ($site_name): ?><?php if ($title): ?><div id="site-

name"><strong><a href="<?php print $front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name;

?></span></a></strong></div><?php else: /* Use h1 when the content title is empty */ ?><h1 id="site-name"><a href="<?php print

$front_page; ?>" title="<?php print t('Home'); ?>" rel="home"><span><?php print $site_name; ?></span></a></h1><?php endif; ?><?php

endif; ?><?php if ($site_slogan): ?><div id="site-slogan"><?php print $site_slogan; ?></div><?php endif; ?></div> <!-- /#name-and-slogan

--><?php endif; ?><?php print render($page['header']); ?></div></div> <!-- /.section, /#header --><?php if ($main_menu ||

$secondary_menu): ?><div id="navigation"><div class="section"><?php print theme('links__system_main_menu', array('links' => $main_menu,

'attributes' => array('id' => 'main-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Main menu'))); ?><?php print

theme('links__system_secondary_menu', array('links' => $secondary_menu, 'attributes' => array('id' => 'secondary-menu', 'class' =>

array('links', 'inline', 'clearfix')), 'heading' => t('Secondary menu'))); ?></div></div> <!-- /.section, /#navigation --><?php endif; ?

><?php if ($breadcrumb): ?><div id="breadcrumb"><?php print $breadcrumb; ?></div><?php endif; ?><?php print $messages; ?><div id="main-

wrapper"><div id="main" class="clearfix"><div id="content" class="column"><div class="section"><?php if ($page['highlighted']): ?><div

id="highlighted"><?php print render($page['highlighted']); ?></div><?php endif; ?><a id="main-content"></a><?php print

render($title_prefix); ?><?php if ($title): ?><h1 class="title" id="page-title"><?php print $title; ?></h1><?php endif; ?><?php print

render($title_suffix); ?><?php if ($tabs): ?><div class="tabs"><?php print render($tabs); ?></div><?php endif; ?><?php print

render($page['help']); ?><?php if ($action_links): ?><ul class="action-links"><?php print render($action_links); ?></ul><?php endif; ?><?

php print render($page['content']); ?><?php print $feed_icons; ?></div></div> <!-- /.section, /#content --><?php if

($page['sidebar_first']): ?><div id="sidebar-first" class="column sidebar"><div class="section"><?php print

render($page['sidebar_first']); ?></div></div> <!-- /.section, /#sidebar-first --><?php endif; ?><?php if ($page['sidebar_second']): ?

><div id="sidebar-second" class="column sidebar"><div class="section"><?php print render($page['sidebar_second']); ?></div></div>

<!-- /.section, /#sidebar-second --><?php endif; ?></div></div> <!-- /#main, /#main-wrapper --><div id="footer"><div class="section"><?php

print render($page['footer']); ?></div></div> <!-- /.section, /#footer --></div></div> <!-- /#page, /#page-wrapper -->

Page 66: Death of a Themer - Frontend United - 14 April 2013

<?php

print $content;

Page 67: Death of a Themer - Frontend United - 14 April 2013

<?php

print $content;

Page 68: Death of a Themer - Frontend United - 14 April 2013

<div id="<?php print $block_html_id; ?>" class="<?php print $classes; ?>"<?php print $attributes; ?>> <?php print

render($title_prefix); ?><?php if ($block->subject): ?> <h2<?php print $title_attributes; ?>><?php print $block->subject ?></h2><?php

endif;?> <?php print render($title_suffix); ?> <div class="content"<?php print $content_attributes; ?>> <?php print $content ?>

</div></div><?php

print $content;

Page 69: Death of a Themer - Frontend United - 14 April 2013

<?php

print $content;

Page 70: Death of a Themer - Frontend United - 14 April 2013

<?php

print $content;

Page 71: Death of a Themer - Frontend United - 14 April 2013
Page 72: Death of a Themer - Frontend United - 14 April 2013

a panels layout or two

Page 73: Death of a Themer - Frontend United - 14 April 2013
Page 74: Death of a Themer - Frontend United - 14 April 2013

/** * Implements hook_ctools_plugin_api(). */function ce_panels_ctools_plugin_api($module, $api) { if ($module == 'panels' && $api == 'styles') { return array('version' => 2.0); } if ($module == 'page_manager' && $api == 'pages_default') { return array('version' => 1); } if ($module == "panels_mini" && $api == "panels_default") { return array("version" => "1"); }}

/** * Implements hook_ctools_plugin_directory() */function ce_panels_ctools_plugin_directory($module, $plugin) { if ($module == 'page_manager' || $module == 'panels' || $module == 'ctools') { return $plugin; }}

Page 75: Death of a Themer - Frontend United - 14 April 2013

<?php/** * @file * Layout definition for Code Enigma one column layout. */

/** * Panel layout definition. */$plugin = array( 'title' => t('Code Enigma One Column'), 'category' => t('Code Enigma'), 'icon' => 'ce_one_column.png', 'theme' => 'ce_one_column', 'regions' => array( 'content' => t('Content'), ),);

Page 76: Death of a Themer - Frontend United - 14 April 2013

<?php/** * @file * Layout template for Code Enigma one column layout. * * Regions: * - content */

if (isset($content['content'])) { print $content['content'];}

Page 77: Death of a Themer - Frontend United - 14 April 2013

a method for turning off all supplied CSS and JS

Page 78: Death of a Themer - Frontend United - 14 April 2013
Page 79: Death of a Themer - Frontend United - 14 April 2013

/** * Implements hook_js_alter(). */function mytheme_js_alter(&$js) { if (user_is_anonymous()) { $path_to_theme = path_to_theme(); $allowed_js = array( 'settings', 'misc/jquery.js', 'sites/all/modules/contrib/google_analytics/googleanalytics.js', ); foreach ($js as $key => $script) { if (!is_numeric($key) && !in_array($key, $allowed_js) && strpos($key, $path_to_theme) === FALSE) { unset($js[$key]); } } }}

Page 80: Death of a Themer - Frontend United - 14 April 2013

theming without a themer

STEP THREE

Page 81: Death of a Themer - Frontend United - 14 April 2013

add a few modules

Page 82: Death of a Themer - Frontend United - 14 April 2013

display suitesemantic views

panelspanels everywhere semantic panels*

*using a forked version atmhttp://drupal.org/sandbox/mcjim/1899120

Page 83: Death of a Themer - Frontend United - 14 April 2013

display suite

Page 84: Death of a Themer - Frontend United - 14 April 2013

control over fieldand node markup

Page 85: Death of a Themer - Frontend United - 14 April 2013
Page 86: Death of a Themer - Frontend United - 14 April 2013
Page 87: Death of a Themer - Frontend United - 14 April 2013
Page 88: Death of a Themer - Frontend United - 14 April 2013
Page 89: Death of a Themer - Frontend United - 14 April 2013

<img width="120" height="289" alt="useful alt text, ta"

src="/files/my_image.jpg" />

Page 90: Death of a Themer - Frontend United - 14 April 2013

<div class="field field-name-field-image field-type-image

field-label-hidden">

<div class="field-items">

<div class="field-item even">

<img width="120" height="289" alt="useful alt text, ta"

src="/files/my_image.jpg">

</div>

</div>

</div>

Page 91: Death of a Themer - Frontend United - 14 April 2013
Page 92: Death of a Themer - Frontend United - 14 April 2013
Page 93: Death of a Themer - Frontend United - 14 April 2013
Page 94: Death of a Themer - Frontend United - 14 April 2013

view modes

Page 95: Death of a Themer - Frontend United - 14 April 2013
Page 96: Death of a Themer - Frontend United - 14 April 2013

semantic views

Page 97: Death of a Themer - Frontend United - 14 April 2013
Page 98: Death of a Themer - Frontend United - 14 April 2013
Page 99: Death of a Themer - Frontend United - 14 April 2013
Page 100: Death of a Themer - Frontend United - 14 April 2013
Page 101: Death of a Themer - Frontend United - 14 April 2013

panelspanels everywhere semantic panels

Page 102: Death of a Themer - Frontend United - 14 April 2013

an interface for wrapping content with markup

Page 103: Death of a Themer - Frontend United - 14 April 2013

CONTENT<MARKUP> </MARKUP>

Page 104: Death of a Themer - Frontend United - 14 April 2013

CONTENT<MARKUP> </MARKUP>

Page 105: Death of a Themer - Frontend United - 14 April 2013

doesn't panels addloads* of divs?

*seriously, loads

Page 106: Death of a Themer - Frontend United - 14 April 2013

<?php/** * @file * Layout template for Code Enigma one column layout. * * Regions: * - content */

if (isset($content['content'])) { print $content['content'];}

Page 107: Death of a Themer - Frontend United - 14 April 2013
Page 108: Death of a Themer - Frontend United - 14 April 2013
Page 109: Death of a Themer - Frontend United - 14 April 2013
Page 110: Death of a Themer - Frontend United - 14 April 2013
Page 111: Death of a Themer - Frontend United - 14 April 2013
Page 112: Death of a Themer - Frontend United - 14 April 2013

what do we end up with?

Page 113: Death of a Themer - Frontend United - 14 April 2013
Page 114: Death of a Themer - Frontend United - 14 April 2013
Page 115: Death of a Themer - Frontend United - 14 April 2013
Page 116: Death of a Themer - Frontend United - 14 April 2013
Page 117: Death of a Themer - Frontend United - 14 April 2013
Page 118: Death of a Themer - Frontend United - 14 April 2013
Page 119: Death of a Themer - Frontend United - 14 April 2013
Page 120: Death of a Themer - Frontend United - 14 April 2013

a real example

Page 121: Death of a Themer - Frontend United - 14 April 2013
Page 122: Death of a Themer - Frontend United - 14 April 2013

some rules

Page 123: Death of a Themer - Frontend United - 14 April 2013

never write a .tpl.php

Page 124: Death of a Themer - Frontend United - 14 April 2013

never write a .tpl.phpunless you really have to

Page 125: Death of a Themer - Frontend United - 14 April 2013

start by outputting no markup at all

Page 126: Death of a Themer - Frontend United - 14 April 2013

add markup via the UI

Page 127: Death of a Themer - Frontend United - 14 April 2013

think carefully about where you add your layout classes

Page 128: Death of a Themer - Frontend United - 14 April 2013

use Features andzero-touch deployment

Page 129: Death of a Themer - Frontend United - 14 April 2013

Murder Investigation

Page 130: Death of a Themer - Frontend United - 14 April 2013

was it a team effort?

whodunnit?

Page 131: Death of a Themer - Frontend United - 14 April 2013

whodunnit?

Page 132: Death of a Themer - Frontend United - 14 April 2013

was it a team effort?

whodunnit?

Page 133: Death of a Themer - Frontend United - 14 April 2013

project manager

the PM did it

Page 134: Death of a Themer - Frontend United - 14 April 2013

what have we learnedfrom this sorry tale?

Page 135: Death of a Themer - Frontend United - 14 April 2013

design driven

Page 136: Death of a Themer - Frontend United - 14 April 2013

give higher priority to the frontend

let designers take advantage of the best tools to improve speed

and reduce waste

group design & frontend dev

Page 137: Death of a Themer - Frontend United - 14 April 2013

team structure

Page 138: Death of a Themer - Frontend United - 14 April 2013

traditional Drupal workflow

Page 139: Death of a Themer - Frontend United - 14 April 2013

new Drupal workflow

Page 140: Death of a Themer - Frontend United - 14 April 2013

new Drupal workflow

Page 141: Death of a Themer - Frontend United - 14 April 2013

split team effort evenly in sprints – creates a closer

working relationship across team disciplines

open up opportunities for contractors from outside

of Drupal

Page 142: Death of a Themer - Frontend United - 14 April 2013

consistency

Page 143: Death of a Themer - Frontend United - 14 April 2013

remove a layer of complexity for

site builders

markup is managed in UI only

Page 144: Death of a Themer - Frontend United - 14 April 2013

dictate

Page 145: Death of a Themer - Frontend United - 14 April 2013

reverse traditional drupal working methods

take an uncompromising approach to your markup

don’t let Drupal tell you what it should be – you show it who’s

boss

Page 146: Death of a Themer - Frontend United - 14 April 2013

thank you!

Page 147: Death of a Themer - Frontend United - 14 April 2013

epilogue

what happened to the team?

Page 148: Death of a Themer - Frontend United - 14 April 2013

the designer was happy

Page 149: Death of a Themer - Frontend United - 14 April 2013

site builder had an easy life

Page 150: Death of a Themer - Frontend United - 14 April 2013

sprints were productive

Page 151: Death of a Themer - Frontend United - 14 April 2013

the themer SURVIVED and adopted a new identity as a frontend developer

Page 152: Death of a Themer - Frontend United - 14 April 2013

which was a great fit for the team

Page 153: Death of a Themer - Frontend United - 14 April 2013

there were trust issues with the PM so he moved on

Page 154: Death of a Themer - Frontend United - 14 April 2013

the end

Page 155: Death of a Themer - Frontend United - 14 April 2013

questions?

Page 156: Death of a Themer - Frontend United - 14 April 2013

exit

@MattFielding@mcjim