Overview ofDrupal’s Theming System
Theming WordPressA “pull” system
http://www.f l ickr .com/photos/13879801@N00/96609354/
Theming DrupalA prep and “push” system
Source : http://www.f l ickr .com/photos/sebbisuperstar/2470560831
Flow of Themed Content
Rendered PageLogo
Primary Links
Search Block
View (block)
Login block
Navigation menu
Rendered Page
Region
Node
Node
Node
Primary Links
Logo: Site information
Pager
Menu or Secondary Links
Menu
Footer: Site information
Block
Block
● page.tpl.php● $primary_links● $secondary_links● $logo● $footer_message
● node.tpl.php● block.tpl.php
Which means...
● Drupal uses Theme Engines to style available content independently of the module layer.
● The most commonly used engine is PHPtemplate which is a “prepare and push” system, this differs from WordPress’s “pull” system.
● Complete Web pages of rendered HTML are compiled from different sources in the theme.
● Design for individual Drupal page elements, not the whole page.
Creating Your First Theme
My Steps for Creating a Theme
0. Create Wireframes
1. Colour palate + grid + imagination + GiMP.
2. Choose a Base Theme. Create a sub-theme.
3. Rebuild the Design Files in Drupal(slice + convert).
4. Launch MVT.
5. Theme by UX, not by module or tpl.php.
Step 0: Wireframes + Specs
Creating Front Page Shapes
Creating Content Page Shapes
Warning!Promotion of
Non-free softwarein the next slide
Drupal Components for BalsamiqCreated by Top Notch Themes
Available from:http://mockupstogo.net/drupal-cms-components
No, Balsamiq is not open source.
Step 1: Grid + colour palate + imagination + GiMP.
Establish the Framework
1.Grid layout: 960.gs templates
2.Colour palate: colourlovers.com, colorschemedesigner.com
3.Page elements: see wireframes and site specs
Creating a Basic Design
1.Background: texture, image, colour
2.Place page elements: see wireframes and specs
3.Decorate: texture, flourishes, illustration, photography
4.Typography and font selection
5.Edges and borders: page, block
6.Lists: indents, margins, padding
7.Actions: default, hover, active, .active
Decorating and Designing
If that last slide offended you go watch
http://sf2010.drupal.org/conference/sessions/ stop-decorating-and-start-designing
while I carry on with my decorator lesson for those of us who don’t poop designs for breakfast.
Optimize your Design Files
● Theme by element: node, teaser, blocks, breadcrumbs, pager, site name, shopping cart.
● Sort layers into element-related folders.● Use Web fonts in your design.● Use the 960.gs grid templates.● Create colour palates.● Use a style guide.
Background with Texture
Creating Front Page Shapes
Grid and Blocks
Creating Front Page Shapes
Page Elements
Change Palate
Change Palate (again)
http://www.scribb leoneverything .com/prints/type-o-f i le/-preorder-so-you-need-a-typeface-poster/prod_260.html
Fill in the Blanks
Step 2: Choose a Base Theme. Create a sub-theme.
Base Themes
● A base theme is a collection of defaults that you can adjust in your own theme. It is not meant to be used as-is. It is meant to be a foundation of adjustable assumptions.
● DO NOT HACK THE BASE THEME. Use it like a library--reference it, do not hack it.
● Criteria for choosing a base theme: CSS grid framework (or overall layout), SEO, accessibility, additional helper functions, quality of documentation.
Lazy Base Theme: 960.gs
www.drupal.org/project/ninesixty
Super Lazy Base Theme:
Fusion
www.drupal.org/project/fusion
Ultra Powerful Base Theme: Zen
www.drupal.org/project/zen
Step 3: Rebuild the Design Filesin Drupal.
<html goes here>
Copy the page.tpl.php from your base theme and/or use:http://api.drupal.org/api/drupal/modules--system--page.tpl.php/6/source
Repeat for page-front.tpl.php
Step 4: Launch YourMinimum Viable Theme
Apply the MVT to a Prototype site
● Work with real data.● Alter as much as possible from within the
Drupal UI. Use ImageCache, CCK and Views.● Compare the prototype site frequently against
your wireframes. Try to make them match.
Uploading your MVTheme
● Base theme: /sites/all/themes
● Your theme: /sites/domainname.com/themes
● Enabling the theme: ?q=/admin/build/themes
● Clear Drupal’s cache● When in doubt, clear Drupal’s cache again.
Step 5: Theme the Rest by UX
Themer Module
You’re a Themer!
http://www.f l ickr .com/photos/14150482@N02/2526889807/
Sharing Your Designs
● Licensing: GPL the “codey bits.”● Creating a project on drupal.org (and also
http://themegarden.org/drupal6/)● Selling your themes
(www.topnotchthemes.com)
My Steps for Creating a Theme
0. Create Wireframes
1. Colour palate + grid + imagination + GiMP.
2. Choose a Base Theme. Create a sub-theme.
3. Rebuild the Design Files in Drupal(slice + convert).
4. Launch MVT.
5. Theme by UX, not by module or tpl.php.
It’s too hard.Show me how!
Pink sherbert photography http ://www.f l ickr .com/photos/pinksherbet/3372060864/
Advanced, Extra Stuff
$node object
$node>nid$node>body$node>content['body'][#value]
node.tpl.php (theme: fusion)<?php// $Id: node.tpl.php,v 1.1.2.2 2009/11/11 05:26:25 sociotech Exp $?>
<div id="node<?php print $node>nid; ?>" class="node <?php print $node_classes; ?>"> <div class="inner"> <?php print $picture ?> <?php if ($page == 0): ?> <h2 class="title"><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2> <?php endif; ?> <?php if ($submitted): ?> <div class="meta"> <span class="submitted"><?php print $submitted ?></span> </div> <?php endif; ?> <?php if ($node_top && !$teaser): ?> <div id="nodetop" class="nodetop row nested"> <div id="nodetopinner" class="nodetopinner inner"> <?php print $node_top; ?> </div><! /nodetopinner > </div><! /nodetop > <?php endif; ?>
<div class="content clearfix"> <?php print $content ?> </div> <?php if ($terms): ?> <div class="terms"> <?php print $terms; ?> </div> <?php endif;?> <?php if ($links): ?> <div class="links"> <?php print $links; ?> </div> <?php endif; ?> </div><! /inner >
<?php if ($node_bottom && !$teaser): ?> <div id="nodebottom" class="nodebottom row nested"> <div id="nodebottominner" class="nodebottominner inner"> <?php print $node_bottom; ?> </div><! /nodebottominner > </div><! /nodebottom > <?php endif; ?></div><! /node<?php print $node>nid; ?> >
tpl.php files to override styles
● Individual template files make up a whole page (see the handout).
● tpl.php files include: page.tpl.php, node.tpl.php, node-contenttype.tpl.php, comment.tpl.php
● Look at the source of a tpl.php file to find variables that can be moved and altered.
● Use the Devel + Themer Modules● Alter variable contents with
http://drupal.org/node/223430● See also: api.drupal.org
Create Your Theme
1.Make a new folder (start with letters).
2.Add to it a text file named foldername.info
3.Copy the sample settings from the handout into your .info file.
Your Theme’s .info filename = My First Themedescription = Featuring multiple ponyfriendly regions.core = 6.xengine = phptemplatebase theme = ninesixty
; Add ponyfriendly regions, CSS and Javascript filesregions[shetland] = Left sidebar, column 1stylesheets[all][] = my_theme_styles.cssscripts[] = myscript.js
How to use a Base theme
● Download the base theme and read its documentation.
● Create a new theme folder which references your chosen base theme in the .info file.
● Change only what’s needed. Your sub-theme is the diff from the original base theme.