SlideShare uma empresa Scribd logo
1 de 205
Baixar para ler offline
Drupal Theming
Krimson
Hans Rossel en Jan-Yves Vanhaverbeke
17/8/2011 en 14/9/2011




Hans Rossel - hans.rossel@koba.be
Theme Documentation
• Theme guide: http://drupal.org/theme-guide/6-7
• Update modules: http://drupal.org/update/modules/6/7
• Update themes: http://drupal.org/update/theme/6/7
• Theme Forum: http://drupal.org/forum/3
• Theme layer: http://drupal.org/node/933976
• #drupal-themes on irc.freenode.net
• http://lists.drupal.org/mailman/listinfo/themes
Hulpmiddelen

• Firefox: Firebug, webdeveloper toolbar,
    pixelperfect, xrefresh, colorzilla, webaim
• Devel en devel_themer
Voorbereiding
Wireframes      Photoshop design
Schermformaten
Standaard 1024x768
•   Favorieten open?
•   Bovenmenu aftrekken
•   Toolbar
•   Laptop widescreen
•   Mobile, nieuwere 1152x… >500 verschillende formaten
•   Verschillen mac/pc
•   Verschillen IE en Firefox

Responsive Webdesign:
    http://www.alistapart.com/articles/responsive-web-design/

• Oude methode: javascript styleswitcher
• Nieuw: media queries
Drupal 7 core Themes: Appearance
Theme folder




Core: /themes
Contrib: /sites/all/themes
Custom: /sites/default/themes
 (tenzij bij multisite dan idem contrib)
Soorten themes


• Core
• Contrib
• Custom
• Starter/base
• Admin
• Html5
SUBTHEME
   EEN THEME
  OP BASIS VAN
EEN ANDER THEME
Subtheme
van een bestaand theme

                             .info file:

                           Toevoegen:
                  base theme = garland of bartik


  Opgelet: Pas nooit rechtstreeks een core of ander theme aan.
  Voordeel om via base theme te werken is dat je updates van het
                 base theme kunt implementeren.

Starter themes zoals Zen en Fusion zijn specifiek ontwikkeld om als
                  base theme gebruikt te worden.
Starter Themes
•   http://drupal.org/project/zen
•   www.drupal.org/project/fusion
•   www.drupal.org/project/adaptivetheme (html 5)
•   www.drupal.org/project/omega (html 5)
•   http://drupal.org/project/framework


Speciaal: clean html code
•   http://drupal.org/project/mothership: clean html
•   http://drupal.org/project/stark: drupal default markup
ZEN Theme
●   www.drupal.org/project/zen
●   Net als Garland gebaseerd op de
    http://www.positioniseverything.net/articles/jello.html
     Jello Mold techniek: negatieve marges
●   Voordelen
    ● Enorm    goede documentatie in comments
    ● Extra   functies (theme settings, block editing)
    ● Perfect   full option hackable via subtheme
Handleiding: http://drupal.org/node/226507
Mooie code, lelijk theme
Een Zen subtheme - #226507

1.Kopieer STARTERKIT en hernoem het
2..info: mijntheme.info + verwijzingen
3.CSS
  1.layout-liquid.css of layout-fixed.css → layout.css
  2.zen.css → mijntheme.css
  3.Optie: html-elements.css + ;weghalen uit .info file
4.Kopieer tpl.php files indien gewenst
CSS Framework Starter Themes
css frameworks zijn erg handig om snel complexe layouts te maken die standard compliant
      zijn. Bekende voorbeelden zijn www.blueprintcss.org en www.960.gs. Ze bestaan uit
      een reset css, rapid prototyping grid css en css voor standaard elementen. Bij Drupal
      vind je de volgende themes die hierop gebaseerd zijn:

• http://drupal.org/project/fusion + skinr
  (bijvoorbeeld acquia marina theme of Acquia
  prosper shopping cart theme)
• http://drupal.org/project/blueprint
• http://drupal.org/project/ninesixty
• http://drupal.org/project/ninesixtyfluid
Admin Themes
Nu er erg wordt gewerkt aan het verbeteren van de User Experience en Usability van
     Drupal zijn er recent heel wat mooie admin themes beschikbaar. Ze zijn bedoeld als
     theme voor de backend van Drupal en je stelt ze in als beheertemplate. Zo krijg je
     een perfecte scheiding tussen backend en frontend.

•    http://drupal.org/project/admin (module!)
        – Rubik: icons: http://code.developmentseed.org/rubik
        – Tao base theme:http://code.developmentseed.org/tao
•    http://drupal.org/project/rootcandy
•    http://drupal.org/project/seven (backport van d7 theme)
Ontwerp je eigen subtheme

template.php: theme function overrides die voor
  alle themes van belang zijn
Overnemen zaken van andere starter themes:


• Zen theme: body classes
• Zen theme: tabs en messages
• Tao: css reset
Standaardstijlen
EEN DRUPAL 7 THEME
  “FROM SCRATCH”
Theme CSS
• Drupal voegt heel wat html met id's en classes toe. Probeer
   zoveel mogelijk met css op te lossen. De html wijzigen van
   Drupal is een stuk moeilijker.
• Werk je html/css template niet volledig in detail af.
   Afwerking css van blokken, zoekbox, menu's hou je best
   voor nadat je de template in Drupal hebt gebracht
• Name collision: Drupal voegt html toe met .menu,
   .content, .links, .block. Gebruik die classes niet in je eigen
   template anders krijg je een conflict.
HTML/css Prototype
www.styleshout.com / www.oswd.org




                     vectorlover html/css prototype
                  http://www.styleshout.com/free-templates.php?page=2
.
Theme files

.info (definition file)
screenshot.png
Css, js, images
page.tpl.php, node.tpl.php:
• html met dynamische (php) stukken
template.php: (geavanceerde) php code
Regions
 regions[header] = Header
 regions[help] = Help (d6:$help)
 regions[page_top] = Page top (d6:$closure)
 regions[page_bottom] = Page bottom (d6:$closure)
 regions[highlight] = Highlighted (d6:$mission)
 regions[featured] = Featured
 regions[content] = Content (d7:main page content is block!)
 regions[sidebar_first] = Sidebar first (d6:left)
 regions[sidebar_second] = Sidebar second (d6:right)
 regions[footer] = Footer (d6:$footer_message)

 In D7: regions_hidden[] = naam van de regio die je wil verbergen in de blocks
    overview page (default zijn verborgen page_top en page_bottom)

 Blocks overview page: Demonstrate Block regions
Theme folder



        Maak folder: sites/default/themes/vectorlover

  Voeg je index.html, css, images van je statische template toe
.info file
Maak een vectorlover.info file


name = vectorlover

description = A very nice theme

(package nooit gebruiken: Core themes hebben hier “core” in D7 zodat de update manager
   ze kan herkennen)

version = 1.0

core = 7.x

engine = phptemplate

stylesheets[all][] = css/vectorlover.css

stylesheets[all][] = css/custom.css

scripts[] = scripts/scripts.js
Template files
• /modules/system
     – html.tpl.php : Bevat DOCTYPE, <head> met RDFa, page_top en
         page_bottom regions en de content region waarin
         page.tpl.php wordt geprint. Meestal ga je html.tpl.php niet
         overnemen in je eigen theme. Zie ook
         http://api.drupal.org/api/function/template_preprocess_html/7
          om variabelen hiervan aan te passen.
     – page.tpl.php: <body> van index.html

• Hernoem index.html naar page.tpl.php en verwijder
    alles behalve wat tussen de <body> tags zit
Theme activeren
• screenshot.png toevoegen (294px × 219px)
• Appearance tab: theme activeren
• Telkens je een nieuw tpl.php bestand toevoegd aan een theme: clear
     theme registry
      – Clear cache button bij Performance settings
      – D7: drupal_theme_rebuild() in template.php (opgelet! Achteraf
          uitschakelen of serieuse problemen met performance)
      – Vinkje “Rebuild Theme Registry on every page” bij bepaalde themes
Theme Registry

http://drupal.org/node/173880
De theme registry moet leeggemaakt worden
 telkens als je een template file toevoegt (niet
 bij activatie theme)
• Via Prestatie > Clear cache (alle cache!)
• Via admin_menu of devel module link
• Via drush cc (optie 2)
Functie clear theme registry

Wordt best conditioneel toegevoegd via een
 setting voor het theme. Performance
 problemen indien dit blij live site vergeten
 wordt uit te schakelen
 // Rebuild .info data.

 system_rebuild_theme_data();

 // Rebuild theme registry.

 drupal_theme_rebuild();
Dynamische content
copiëren en plakken
First sidebar (zijkolom
regio)




• Alle regio's die je definieert in je .info
    bestand moeten geprint worden in
    html.tpl.php en page.tpl.php om hun juiste
    plaats op de pagina te bekomen.
Main menu (hoofdnavigatie)



• To meet Web Content Accessibility Guidelines (WCAG)
    requirements, HTML headings should be used before all
    content sections, which includes lists of links such as
    menus. The headers ensure that there is a quick way for
    assistive technology users to browse through the content
Variabelen

• Heel wat beschikbare variabelen
• Bekijken via devel of print_r($vars) in template
• Definitie van de variabelen in
   includes/theme.inc en de respectievelijke
   modules
THEME AANPASSEN OP MAAT
CSS in Drupal themes

• Vermijd overlapping van css classes door .content,
    .menu, .links, .block niet te gebruiken
• Drupal heeft reeds enorm veel classes en id's
    voorgedefinieerd, oa body classes die al heel wat
    context leveren om te stylen
• Via bepaalde modules kunnen extra css classes
    toegevoegd worden via de interface: views, ds, ...
Css aanpassen

• Stylesheet toevoegen in (sub) theme via .info
    file
• drupal_add_css om (conditioneel) css toe te
    voegen via template.php of een module
• hook_css_alter om css aan te passen
Css toevoegen via .info
; Add a style sheet for all media
stylesheets[all][] = theStyle.css


; Add a style sheet for screen and projection media
stylesheets[screen, projection][] = theScreenProjectionStyle.css


; Add a style sheet for print media
stylesheets[print][] = thePrintStyle.css
Media queries

.info file
stylesheets[screen and (max-width: 600px)][] = screen-600.css



In css bestand:
@media screen and (max-device-width: 600px) {
    //aanpassingen voor kleine toestellen
}
.element-invisible in Bartik
Accessibility: Css clip

Probleem: hide content except for screen-readers
• display:none maakt de content onzichtbaar voor screen-readers
• Negative text-indent heeft problemen met RTL talen

.element-invisible {
  clip:rect(1px, 1px, 1px, 1px);
  position:absolute !important;
}
Achtergrond:http://adaptivethemes.com/using-css-clip-as-an-accessible-method-of-hiding-content
drupal_add_css
• http://api.drupal.org/api/drupal/includes--common.inc/function/drupal_add_css/7

• drupal_add_css(path_to_theme() . '/css/ie/ie-7.css', array('group' =>
     CSS_THEME, 'weight' => 115, 'browsers' => array('IE' => 'lte IE 7', '!IE' =>
     FALSE), 'preprocess' => FALSE));
• drupal_add_css(drupal_get_path('module', 'dashboard') . '/dashboard.css');
Verwijzen naar actieve theme

• In template $directory
• path_to_theme()
• drupal_get_path('theme', 'bartik')
Reset css

• Nodig? http://css-class.com/test/css/defaults/UA-style-sheet-defaults.htm
• Reset.css + base.css
• Alternatief: normalize.css, initial.css, html5
    boilerplate
• Dient eerst te komen
drupal_add_css(path_to_theme() . '/css/reset.css', array('group' => CSS_SYSTEM - 1,
   'preprocess' => FALSE));
IE css
       template.php (example Bartik theme)

   Gebruik: functie abc_preprocess_html(&$vars)
IE css via module
• Issue: in .info file? Zie http://drupal.org/node/522006
• Via module: http://drupal.org/project/conditional_styles

       – stylesheets-conditional[lt IE 7][all][] = ie6-and-
           below.css
       – stylesheets-conditional[IE 9][all][] = ie9.css
       – stylesheets-conditional[IE][print][] = ie-print.css
Hook_css_alter


http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_css_alter/7

<?php
function abc_css_alter(&$css) {
  // Remove defaults.css file.
  unset($css[drupal_get_path('module', 'system') .
   '/defaults.css']);
}
?>
hook_css_alter
Remove multiple css files
<?php

function THEMENAME_css_alter(&$css) {

    $exclude = array(

     'misc/vertical-tabs.css' => FALSE,

     'modules/aggregator/aggregator.css' => FALSE,

     'sites/all/modules/date/date_popup/themes/datepicker.1.7.css' => FALSE,

     'misc/ui/jquery.ui.theme.css' => FALSE,

    );

    $css = array_diff_key($css, $exclude);

}

?>
Override css
/**

* Implements hook_css_alter().

*/

function seven_css_alter(&$css) {

    // Use Seven's vertical tabs style instead of the default one.

    if (isset($css['misc/vertical-tabs.css'])) {

        $css['misc/vertical-tabs.css']['data'] = drupal_get_path('theme', 'seven') . '/vertical-tabs.css';

    }

    if (isset($css['misc/vertical-tabs-rtl.css'])) {

        $css['misc/vertical-tabs-rtl.css']['data'] = drupal_get_path('theme', 'seven') . '/vertical-tabs-rtl.css';

    }

    // Use Seven's jQuery UI theme style instead of the default one.

    if (isset($css['misc/ui/jquery.ui.theme.css'])) {

        $css['misc/ui/jquery.ui.theme.css']['data'] = drupal_get_path('theme', 'seven') . '/jquery.ui.theme.css';

    }

}
HTML Aanpassen

• Via .tpl.php file: template file aanpassen of
    dupliceren in een template suggestion
• Via theme_ functie in template.php: function
    override
• Via preprocess en process functies in
    template.php: variabelen aanpassen
tpl.php files in d7
HTML wijzigen
Template overrides

• Copieer om het even welk tpl.php bestand dat je vindt in een
    module naar je de map van je theme
• Doe aanpassingen in de html naar wens
• Maak de cache (theme registry) leeg


Voorbeeld:
search-result.tpl.php in /modules/search
page.tpl.php
Frontpage page--front.tpl.php


Vermijd zoveel mogelijk meerdere page.tpl.php templates te hebben.
  Gebruik css of preprocess variabelen in template.php.

Op pad (url geen alias)
page--node-edit.tpl.php of page--node-add.tpl.php > page--node-1.tpl.php > page--node.tpl.php > page.tpl.php
page--blog.tpl.php, page--viewpagename.tpl.php, page--admin.tpl.php, page--admin-build-block.tpl.php, page--
   civicrm.tpl.php, page--googlemap.tpl.php


Nieuw in D7: % integer wildcard
   page--user.tpl.php > page--user--%.tpl.php > page--user--1.tpl.php
node.tpl.php

Copieer de originele node.tpl.php van /modules/node
Per content type
node--blog.tpl.php
node--forum.tpl.php
node--page.tpl.php
node--ccknews-content-type.tpl.php


D6: Opgelet: je moet steeds een gewoon node.tpl.php bestand hebben in je theme folder als
  je het wil overriden. In D7 deze bug is opgelost.
Block template files
block.tpl.php

block.tpl.php
block--region.tpl.php
block--module.tpl.php
Block--module--delta.tpl.php
Belangrijkste andere tpl.php
●                        ● region.tpl.php
                         ● maintainance-page.tpl.php
●   In /modules/system
                         ● html.tpl.php




●In /modules/node        ● node.tpl.php
●In /modules/field       ● field.tpl.php


●In                      ● comment.tpl.php


/modules/comment

●   In /modules/block    ●   Block.tpl.php
Theme hook suggestions
function abc_preprocess_page(&$vars, $hook) {
    print_r($vars['theme_hook_suggestions']);
}


Array (
     [0] => page__node
     [1] => page__node__%
     [2] => page__node__1
)
Theme function overrides
HTML wijzigen via
Theme overrides

Als er geen tpl.php beschikbaar is, dan zit de html in een theme_
   functie
• Zoek de theme_functie in je module of via api.drupal.org,
    api.lullabot.com of http://drupalcontrib.org (contrib)
• Copieer en plak de functie in template.php en vervang theme_ met
    naamvanjetheme_ (niet meer phptemplate_ zoals in D6)
• Pas de html aan naar wens
theme_breadcrumb()
theme_breadcrumb()
BASIS THEME FUNCTIES
Themeable functions

Handige functies voor links, lijsten, …
    – http://api.drupal.org/api/group/themeable/6
L functie: een link maken
●   http://api.drupal.org/api/drupal/includes--common.inc/function
●   Vorm: l($text, $path, $options = array());
●   Eenvoudig voorbeeld
l(t('klik hier'), “node/1”);
●   Voorbeeld uit blog module
l(t('View recent blog entries'), "blog/$user->uid",
  array('attributes' => array('title' => t("Read @username's latest
  blog entries.", array('@username' => $user->name)))));
theme_item_list: een lijst
●   http://api.drupal.org/api/function/theme_item_list/6
●   Vorm: theme_item_list($items = array(), $title = NULL, $type
    = 'ul', $attributes = NULL)
●   Voorbeeld
    <?php
    $items = array('jan','piet','joris');
    print theme('item_list', $items, NULL, 'ul', array('class' =>
    'mijn-lijst', 'id' => 'de-lijst'))
    ?>
theme_links
●   http://api.drupal.org/api/function/theme_links/6
●   Vorm: theme_links($links, $attributes = array('class' =>
    'links'))
●   Voorbeeld
    theme('links', $primary_links, array('class' => 'links primary-
    links', 'id' => 'primary'))
Preprocess en process
       functies
Template.php
Drupal paden, classes voor css


  Standaard: node/nid

  Opvragen via:
  http://api.drupal.org/api/drupal/includes--bootstrap.inc/

  Voorbeeld
   
     Drupal path: node/11
   
     <?php print arg(0); ?> geeft node
   
     <?php print arg(1); ?> geeft 11

<?php if (arg(2) == 'edit') { echo $content; }
Node controleren

function themename_preprocess_page(&$variables) {
      $variables['ifnode'] = ( (arg(0) == 'node') &&
    is_numeric(arg(1)) ) && (arg(2) != 'edit' || arg(2) !=
    'delete');
}
hook_preprocess_html
hook_preprocess_html
hook_preprocess_html
hook_html_head_alter()
hook_html_head_alter()
hook_html_head_alter()
hook_html_head_alter()
hook_preprocess_page
hook_preprocess_page
hook_preprocess_page
Nieuwsbrief tpl.php


/*
 * Newsletter: make separate template files for html and page if
   node type is nieuwsbrief
 */
function vai_preprocess_page(&$variables) {
  if ($variables['node']->type == 'nieuwsbrief') {
    $variables['theme_hook_suggestions'][] =
   'page__nieuwsbrief';
  }
}
hook_preprocess_page
hook_preprocess_node
hook_preprocess_node
hook_preprocess_node
hook_preprocess_node
hook_preprocess_node
hook_preprocess_node
hook_process_node
hook_preprocess_block()
Theme hook suggestions voor
block
in hook_preprocess_block
Block admin pagina
function seven_preprocess_block_admin_display_form(&$vars) {

    // List of modules which are allowed on the block page

    $show = array(

        'block',

    );

    // Scan through each disabled block entry and remove ones that aren't needed.

    foreach ($vars['block_listing']['-1'] as $key => $disabled) {

        $type = explode('_', $key);

        if (!in_array($type[0], $show)) {

            unset($vars['block_listing']['-1'][$key]);

        }

    }

}
URL Aliassen opvragen
Zie:
   http://api.drupal.org/api/drupal/includes--path.inc/function/drupal_get_path_alias/7
    en http://www.php.net/manual/en/reserved.variables.get.php

<?php
 // $_GET['q'] geeft node/nid en explode() splitst de string op bij '/' en plaatst de
   stukken in een array
 $path_pieces = explode('/', drupal_get_path_alias($_GET['q']));

 // dus als het pad is /abc/def, $path_pieces is dan Array ( [0] => abc, [1] => def )
 // Dus, $path_pieces[0] geeft 'abc'
 print $path_pieces[0];
?>

Mogelijkheden:
• Via preprocess toevoegen aan body classes
Render API
Render API

• $page array bevat regios, blokken, ...: flexibel
    spelen met content via hook_page_alter()
• Meer info
      – http://www.archive.org/details/ExplorethegloryofDrupal7simprovedren
      – http://www.archive.org/details/PageRenderDrillDownInDrupal7
Render api &
hook_page_alter
http://api.drupal.org/api/function/hook_page_alter/7




 • Naar voorbeeld van de FormAPI: meer
    flexibiliteit en mogelijkheid om zaken te
    wijzigen in regios en blokken net voor de
    pagina gerenderd wordt, hele page is 1
    array
Render() toepassingen
• Voorbeelden
      – Regio's en blokken wijzigen met module
             • Voorbeeld: een blok dupliceren in een tweede regio
             • Node links in een sidebar tonen
             • Banner ad toevoegen aan comment listing
      – Volgorde van elementen wijzigen


• Bekijken
      – Devel module: show page array
      – print_r($page);


•
function
abc_page_alter(&$page) {
hook_page_alter
THEME SWITCHING
Theme switching in settings.php

theme_default: Defines the default theme for
  this site.
- $conf['theme_default'] = 'garland';

A custom theme can be set for the offline page.
- $conf['maintenance_theme'] = 'bartik';
Theme wisselen volgens url

In settings.php
// if the url is an administration page
if (strpos($_GET['q'], 'admin') === 0) {
    $conf['theme_default'] = 'garland';
}
Mobile theme


$parts = explode('.', $_SERVER['HTTP_HOST']);
if ($parts[0] == 'mobile') {
    $GLOBALS['theme_default'] = 'mobile';
}
IE6 theme

$user_agent = $_SERVER['HTTP_USER_AGENT'];
 if($user_agent) {
  if ((strpos($user_agent, 'MSIE 6.0')) &&
 (strpos($_GET['q'], 'user') === 0)){
         $conf['theme_default'] = 'garland';
     }
 }
Theme Key module

• Heel flexibele module voor het wisselen theme
   onder bepaalde voorwaarden
    – Tijd: speciaal theme voor bepaalde dagen
    – User: ander theme voor user of rol
    – Browser: ander theme voor IE6
    – Mobile theme, Mobilekey module
• http://kalki.de/en/howto/themekey-tutorials.htm
Mobile themes

• App
    – Titanium/phonegap via html5,css3,js
• Aparte site
    – Multisite installatie
    – Mobile tools module: mobile rol, ...
    – Jquery mobile: touch optimized framework
    – Detectie: Browscap en wurfl
• Responsive design: flexible images
THEME SETTINGS
Theme settings

• Drupal.org: http://drupal.org/node/177868
• Op admin/appearance/settings/themeName
   kunnen voor het theme extra settings worden
   voorzien
• Voordeel: hergebruik in andere themes =>
    gebruiken in base theme
Rebuild Theme Registry
Default settings in .info file
• settings[abc_breadcrumb] = yes
• settings[abc_breadcrumb_separator] = ' › '
• settings[abc_rebuild_registry] = 0
hook_form_system_theme_setti
ngs_alter
• Is een hook_FORM_ID_alter implementatie
• Gebruikt in theme-settings.php
theme-settings.php
THEME SECURITY
Theme security

• check_plain()
• check_url()
• check_markup()
• filter_xss_admin
drupal_set_title($node->title); // Incorrect
drupal_set_title(check_plain($node->title)); // Correct
Front end Performance
Front-end performance

• Css en js aggregatie
• Image styles, smush.it
• Css sprites
• drupal_add_css en drupal_add_js: selectief css
    en js toevoegen
• Yslow en Google PageSpeed
• http://wimleers.com/article/improving-drupals-pa
Views Theming
Voorbeeld: Views slideshow

• http://drupal.org/project/views_slideshow
• Toepassing:
    – Fotogalerij
    – Dynamic Display block
Views templates

•   Basistemplates in de views module folder
•   Theme Information link in de view zelf geeft suggesties
    voor tpl.php files specifiek voor deze view
•   Theme developer via Devel module: bekijken suggesties
    live
•   Er zijn ook theme_ functies beschikbaar voor views, maar
    handiger via tpl.php
Een view beïnvloeden

1) Met de template files views-view.tpl.php
(opvragen via de “information link”)
2) Met een hook vb
hook_views_admin_links_alter
3) Tijdens het embedden van de view $view-
>hide_admin_links
Views embedden met module

• http://drupal.org/project/viewfield
• http://drupal.org/project/insert_view
Eenvoudig views embedden


<?php echo views_embed_view('most_recent_post', 'default'); ?
  >
<?php echo views_embed_view('nieuws', 'block_1'); ?>
<?php print views_embed_view('calendar',
  'calendar_block_1'); ?>
Views embedden alternatief
$view = views_get_view($view_name);
 $view->set_arguments(array(0 => 'all', 1 => 'typeb'));    // if you have args
 $view->set_items_per_page(0);      // Aantal resultaten
 print $view->execute_display(0, $args);     // default view, include $args
param if using
Geavanceerd embedden via
blok
<?php

$view = views_get_view('Publicaties');

//print '<pre>';

//print_r($view);

//print '</pre>';

$view->set_display('block_1');

$view->display_handler->set_option('items_per_page', 2);

$view->set_arguments(args...);

$title = $view->get_title();

$output = $view->preview();

print '<h2>' . $title . '</h2>';

print $output;

?>
FIELDS THEMING
Theming fields
Individuele velden kunnen gethemed worden via field.tpl.php


• field.tpl.php
• field--field-type.tpl.php
• field--field-name.tpl.php
• field--content-type.tpl.php
• field--field-name--content-type.tpl.php
Theme image styles



http://api.drupal.org/api/drupal/modules--image--image.module/functio


print theme('image_style', array( 'path' =>
  $field_gallery_image['de'][0]['uri'], 'style_name' =>
  'gallery_thumbnail'));
Theme image styles

Probleem/bug: width/height van images
http://drupal.org/node/908282
http://drupal.org/node/1129642

Manueel hoogtes specifieren
theme('image_style', array('style_name' => 'desthumb', 'path' =>
  $image0path, 'getsize' => TRUE, 'attributes' => array('class' =>
  'thumb', 'width' => '150', 'height' => '162')));

Tijdelijke workaround:
http://api.drupal.org/api/drupal/modules--image--image.module/functio
FORMS THEMING
Form theming




Het themen van forms kan via hook_FORM_ID_alter()

Er zijn ook enkele modules die je kunnen helpen een pak zaken
    zonder code te doen: Display Suite, Panels,
    Nodeformcolumns
hook_FORM_ID_alter


/**
 * Implements hook_form_ID_alter().
 */
function abc_form_comment_form_alter(&$form, &$form_state) {
  // dpm($form);
  $form['notify_settings']['notify_type']['#prefix'] = '<div
   class="container-inline clearfix">';
  $form['notify_settings']['notify_type']['#suffix'] = '</div>';
}
hook_FORM_ID_alter


/**
 * Implements hook_form_ID_alter().
 */
function abc_form_user_login_block_alter(&$form,
   &$form_state) {
  $form['links']['#prefix'] = '<div class="login-links container-inline
   clearfix">';
  $form['links']['#suffix'] = '</div>';
}
HTML5 en CSS3
Nieuwe mogelijkheden

• Vereenvoudigde html (niet meer xml
    gebaseerd)
• Nieuwe structuurelementen:
    <header><footer><section><article><nav><asi
    de>
• Nieuwe formelementen: input type=email, url,
    date, time, month, week, number, range,
    search, tel, color. Voordeel: er kan een
    gebruiksvriendelijke widget worden voorzien
Nieuwe mogelijkheden

• Video: <video>
• Canvas: http://canvaspaint.org
• Data storage: localstorage 5MB en web sql
   database api
• Offline: cache manifest
• Drag and drop (js)
• Location api (js, niet echt html5)
CSS3
• Voor oudere versies -moz en -webkit nodig. IE soms complexe
    eigen filter
• transition:background-color .5s;
• transition:z-index .5s, opacity .5s;
• border-radius:3px;
• box-shadow:inset rgba(0,0,0,.75) 0px 0px 10px;
• Text-shadow
• Gradients: http://www.colorzilla.com/gradient-editor/
CSS3 demos

• http://www.css3generator.com/
• http://webdesignerwall.com/trends/css3-examples
• http://webdesignerwall.com/trends/47-amazing-cs
•
HTML5 en CSS3 support

• Browser support
    http://www.findmebyip.com/litmus/
•
Drupal html5 themes

• Omega
• Adaptivetheme
• Zen v5
GRID SYSTEMS
Grid systemen

Probleemstelling
    –Gelijke en eenduidige marges
    –Pagina opdeelbaar in 2,3,4,5 kolommen
      met gelijke marges


Zelf berekenen
    –http://gridulator.com/
Grid systemen

http://www.smashingmagazine.com/2008/05/29/applying-divine-prop

CSS      Frameworks
•http://en.wikipedia.org/wiki/List_of_CSS_frameworks
•http://960.gs: 960px met 12 of 16 kolommen en 20px margin
•http://www.blueprintcss.org: 950px met 24 kolommen en 10px margin
•YAML: http://www.yaml.de/en
•YUI Grids: http://developer.yahoo.com/yui/grids
Voordelen
• Vertrekken van vaste basiscode (wiel niet heruitvinden)
• Browser compatibiliteit: Herbruikbaarheid css en hacks voor IE6 (en zelfs IE5,
  maar als zelfs msn.com die niet meer respecteert...)
• Professionele grid structuur
• Flexibele voorgedefinieerde classes voor basiselementen: lijsten, tabellen, forms
• Sneller werken, rapid prototyping (ipv wireframing) opstellen van mock-ups
• Clean code
• Klein <5kb
• Iphone viewport is 960px
Nadelen
• Jij en iedereen die aan de site werkt moet
  het framework kennen
• Er is code die je niet gebruikt
• Beperkingen in design
 ◦ De xhtml layout zou moeten gebaseerd zijn op
   het design, niet omgekeerd
 ◦ Fixed width vb 960px, voor 1280px schermen
   wil je soms 960px + extra niet belangrijke
   kolom (reclame)
Samenstelling
reset.css

typography.css

grid.css

ie.css

print.css

forms.css
Reset: Tripoli & compressie
* {margin:0; padding:0;}: traag
Eric Meyer:
    http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded

Tripoli: http://devkick.com/lab/tripoli/
•   Compatibel met Windows: IE5, IE5.5, IE6, IE7, IE8, Opera 8, Opera 9, Safari, Firefox 2,
    Firefox 3, OS X: IE5, Firefox 2, Firefox 3, Safari 2, Safari 3, Camino
Blueprint
• Framework:           http://blueprintcss.org
• Tools:
  ◦ http://kematzy.com/blueprint-generator
  ◦ http://code.google.com/p/blueprintcss/wiki/Tools

• Plugins
  ◦ In core: Fancy Type, RTL (right-to-left text and column layout support), Buttons,
    Link Icons (bestandstypes, external, ...)
  ◦ Tabs:http://github.com/Montoya/blueprint-plugin---tabs/tree/master
  ◦ Liquid: http://github.com/Montoya/blueprint-plugin---liquidgrid/tree/master

  ◦
      Silk icons: http://github.com/Montoya/blueprint-plugin---silksprite/tree/master


  Voorbeeld:                http://nettuts.com/tutorials/html-css-techniques/a-closer-look-at-the-blueprint-css-framework/
960.gs
• http://960.gs
• Ook fluid: http://www.designinfluences.com/fluid960gs
• En elastic
  http://csswizardry.com/typogridphy
• Uitgewerkt voorbeeld:
  http://nettuts.com/tutorials/html-css-techniques/prototyping-with-the-grid-960-css-framework
Drupal

• Verschillende starter themes gebruiken 960.gs
    ◦ http://drupal.org/project/ninesixty
    ◦ http://drupal.org/project/fusion
RESPONSIVE DESIGN
CSS3 MEDIA QUERIES
Responsive design

• Layout aanpassen aan schermformaat
• http://www.alistapart.com/articles/responsive-we
• Basisprincipes
    – Procentueel werken (elastic layout)
    – Media queries
    – Fluid images
    – Aantal kolommen verminderen bij kleinere
       schermen
Css3: Media queries


<link rel="stylesheet" type="text/css"

    media="screen and (max-device-width: 480px) and (resolution: 163dpi)"

    href="shetland.css" />



@media screen and (max-width: 600px) {

    .footer {

        float: none;

        width: auto;

    }

}
Browser support

• Safari 3+, Chrome, Firefox 3.5+, IE9 en
    Opera 7+
• Javascript oplossingen
    – http://plugins.jquery.com/project/MediaQueries
    – http://code.google.com/p/css3-mediaqueries-js/
    – https://github.com/scottjehl/Respond
Fluid images

• Schaalbare afbeeldingen
• http://www.alistapart.com/articles/fluid-images/
• Verkleinen:
    http://drupal.org/project/responsive_images
img {
    max-width: 100%;
}
Responsive grid layouts

• Grids hebben voor en nadelen bij responsive
   design
• Adapt.js: http://adapt.960.gs
• Rethinking css grids (toekomstige
    layouttechnieken):
    http://www.markboulton.co.uk/journal/commen
IE en responsive design

• Afbeeldingen: bicubic resize
• respond.js
• http://www.ie6countdown.com En
    http://www.theie7countdown.com
• Geen IE6 support in core themes van Drupal 8
SPECIALE LETTERTYPES
Speciale lettertypes

• Webfonts: Arial, Verdana,
    – Css: font-family: Arial, Helvetica, sans-serif;
    – Css: font-family: Times New Roman, Times, serif


• Speciale fonts
    – Zijn niet aanwezig op elke computer
    – Fontbedrijven terughoudend omwille van
        licenties
Webfonts – Websafe fonts
Veiligste fonts

•   Arial / Helvetica

•   Times New Roman / Times

•   Courier New / Courier



Ander cross platform

•   Verdana

•   Georgia

•   Comic Sans MS

•   Trebuchet MS

•   Arial Black

•   ImpactPalatino

•   Garamond

•   Bookman

•   Avant Garde
Replacement technieken

• Speciale fonts
    – Via een image: moet alt tekst hebben voor
        toegankelijkheid, niet dynamisch vanuit cms
    – Flash
    – Javascript
    – Css
Flash: Sifr
   – Flash: Sifr
           • http://www.mikeindustries.com/blog/sifr
           • http://www.sifrgenerator.com/wizard.html
           • http://drupal.org/project/sifr
   – Opmerkingen
           • Toegankelijkheid is in orde vermits er in de code gewoon html <h1>
               etc wordt gebruikt
           • Browser moet Flash ondersteunen (iphone/ipad niet)
           • Ad-blockers kunnen de weergave blokkeren
           • Traag: behoorlijk wat Flash, css en js code te genereren, enkel voor
               titels, niet voor volle tekst
           • Letters niet heel zuivere randen
Javascript: Cufon
• Via javascript: Cufon

       – http://cufon.shoqolate.com/generate
       – http://drupal.org/project/cufon


• Opmerkingen

       – Heel goed opletten met welke lettertekens je toelaat, teveel is nadelig
           voor performantie, te weinig laat letters met accenten niet verschijnen
       – Internet Explorer is traag in javascript dus traag in Cufon
       – Hoe meer lettertypes je gebruikt hoe meer javascript moet geladen
           worden per pagina
       – Lettertypes niet heel zuivere randen
Css @font-face
• Geïntroduceerd in 1998, pas ondersteund door alle browsers in 2010 wegens
     licentieproblemen.
• Gratis fonts

       – http://www.google.com/webfonts
       – http://www.fontsquirrel.com
       – http://www.theleagueofmoveabletype.com/
• Formaten:

       – Ttf: True Type, standaard desktop formaat
       – Woff: Web Open Font Format, zou moeten de standaard worden
       – Eot: Embedded Open Type, ttf verpakt in DRM, enkele Microsoft
       – Svg: Scalable Vector Graphics, oudere iphones
Css: gebruik
Internet Explorer

@font-face {

    font-family: MyKievit;

    src: url(/fonts/KievitWebPro-Medium.eot);

{



Firefox

@font-face {

    font-family: MyKievit;

    src: url(/fonts/KievitWebPro-Medium.woff) format('woff');

{



body { font-family: MyKievit, Arial, sans-serif; }
Browser support

Formaat       Firefox       Chrome       IE 6-8       IE9           Safari       IOS         Android
              3.6+          6+                                      3.1+                     2.2
EOT
                                              x             x
TTF
                   x            x                                       x         X (>4.2)      x
SVG
                                x                                                 X (<4.2)
WOFF
                   x            x                           x
 •    Bron: http://www.webfonts.info/wiki/index.php?title=@font-face_browser_support
@font-face kits
• Bevat

          – Eot, woff, ttf, svg


• Waar?

          – Gratis

                     • www.fontsquirrel.com/fontface
                     • www.fontsquirrel.com/fontface/generator
          – Betalend:

                     • http://www.fontspring.com/fontface: als kit
                     • www.typekit.com, www.fonts.com, www.fontslive.com, www.fontdeck.com,
                         www.web-type.com: als abonnement, hosted service, licencing ok, eenvoudig
                         codesnippet compatibel met alle browsers, goedkoper want enkel webdeel
                         van font gekocht, betalen per pageviews of per font.
@font-face in de praktijk
@font-face {

font-family: 'MyFontFamily';

src: url('myfont-webfont.eot?') format('eot'),

    url('myfont-webfont.woff') format('woff'),

    url('myfont-webfont.ttf') format('truetype'),

    url('myfont-webfont.svg#svgFontName') format('svg');

}



Browser support: Safari 5.03, IE 6-9, Firefox 3.6-4, Chrome 8, iOS 3.2-4.2, Android
   2.2-2.3, Opera 11

Bron: http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax
NIEUWSBRIEF THEMING
Nieuwsbrieven

• 3 voornaamste mogelijkheden
  – Simplenews: eenvoudig en goedkoop, geen bounce
    handling, beperkte statistieken, problemen met
    server gemarkeerd als spamserver
  – Campaignmonitor of Mailchimp integratie: full
    bounce handling, statistieken, whitelisting, betalend
    maar Mailchimp tot 1000 abonnees gratis!
  – Civimail (onderdeel van Civicrm): mailings, bounce
    handling, goed systeem
Nieuwsbrief theming
●   http://www.campaignmonitor.com/css/
●   http://drupal.org/node/268404
●   Probleem: css moet inline voor webclients (gmail,
    yahoo, hotmail)
       – Views templates maken voor onderdelen
       – Automatisch: Emogrifier (htmlmail), Mime Mail
          CSS Compressor (mimemail)
       – Display suite
Nieuwsbrief theme

Via Themekey module: als ct nieuwsbrief of view
  nieuwsbrief => Nieuwsbrief theme gebruiken
• Nieuwsbrief theme
    – Geen html5 en andere moderne zaken, terug naar
       de nineties!
    – Sterk vereenvoudigde html.tpl.php: geen css en
        js printen
    – Sterk vereenvoudigde page.tpl.php: enkel tabel
Nieuwsbrief theme

• Views: <?php print
    views_embed_view('nieuwsbrief_items','defau
    lt'); ?>
• Reference field: <?php print
    render($content['field_nb_architectuurnieuws
    ']); ?>
• Veld: <?php print check_url($node-
    >field_nb_subfoto1_linkt['und'][0]['url']); ?>
Aanpak 2: via views

• Nodequeue: Toevoegen aan nieuwsbrief
• View: Nieuwsbrief op /nieuwsbrief
• Nieuwsbrief = page - - nieuwsbrief.tpl.php
    – Views_embed_view('eersteview');
    – views_embed_view('tweedeview');
• Nadeel: geen inleiding, archief via Mailchimp
Aanpak: Eigen inhoudstype

• CT Nieuwsbrief
    – Met velden voor foto's, tekst, links
    – Reference fields voor lijsten
Simplenews theming
●   simplenews-newsletter-body--1126.tpl.php
●   simplenews-newsletter-footer--1126.tpl.php
THEMING VANUIT DE DRUPAL INTERFACE
Theming Alternatieven: Modules
• Context: www.drupal.org/project/context
• Panels: www.drupal.org/project/panels
• Display Suite: www.drupal.org/project/ds
• Sweaver: www.drupal.org/project/sweaver
PANELS
Panels: doel en historiek

• Panels = layoutbuilder in Drupal
• Earl Miles (Views)
• Sony www.myplay.com
• Versies 1,2,3
• Toekomst: Drupal 8 misschien een eenvoudige
    panels achtige interface voor toevoegen van
    content in Drupal core
• Documentatie: http://drupal.org/node/496278
Panels: voordelen
   – Point en click Drupal theming zonder html en php, templates opstellen via de interface
   – Slechts 1 soort inhoudsobject: panel waarin blokken, menus, views, velden, ... kunnen
        weergegeven worden => alles eenvormig op dezelfde manier behandelen
   – Complexe pagina layouts mogelijk zonder voorkennis van html/css
   – Flexibeler layouts: vb zelfde blok in verschillende regios, ...
   – Makkelijker en sneller wijzigingen aanbrengen aan templates
   – Ctools: vastleggen van layouts in exportables en features => exporteerbaar dus
        hergebruikbaar en opgenomen in svn/git revisiesysteem.
   – Varianten: andere soorten layouts volgens context, vb ingelogde klanten/leden, mobiele
        website
   – Integreert heel goed met views
Panels: nadelen
• Performance: is heel grote module, wel goede caching opties

• Kan complex zijn: is systeem op zich met leercurve en heel veel checkboxen

• Werkt behoorlijk anders dan “the Drupal way” => bloksysteem en regios
    uitschakelen (vinkje)
• Alles of niets: als je panels gebruikt het voor alles gebruiken

• Moeilijker te debuggen

• Soms trage upgrade bij nieuwe versie van dr
     http://www.youtube.com/watch?v=qBGKdnUj4Ywupal core , en upgrades
     tussen v1, 2 en 3 waren niet vanzelfsprekend, maar ondertussen heel veel
     gebruikt (> 80.000 installs)
• Overladen html tenzij je eigen custom templates opstelt
Submodules en extra

• Page Manager (bij ctools): page layouts (beetje
    zoals page.tpl.php)
• Mini panels: blok layouts
• Panel nodes: node layouts


• Views content panes: views in panels


• Panels Everywhere
Layouts
• Standaardlayouts
• Bepaalde themes definiëren extra layouts zoals Adaptive
    Theme (AT) in d6
• http://drupal.org/project/panels_extra_layouts: extra
    layouts:
• Best: eigen html templates voor layout
     – Advanced help module: help/panels/plugins-layout
     – tpl.php, css, inc en png
     – Meer docs: http://drupal.org/node/495654
Variants

• Andere layout voor zelfde pagina bij andere
   voorwaarden
    – Volgens content type: basic page er anders laten uitzien dan artikels
    – Volgens toegangsrol: admin, ingelogden, leden/klanten zien iets anders
    – Volgens taal
    – Volgens trefwoord, ...
    – Mobile themes dank zij integratie met de http://drupal.org/project/mobile_tools
         module
Contexts

• Arguments
    – /taxonomy/term/%term
    – /forum/%forum
    – /music/beatles/th
• Andere contexts
    – Node auteur
    – Node reference
MOCKUPS
Mockups

Moderne software voor Mockups
   – Mockflow: http://www.mockflow.com
   – Mockingbird: https://gomockingbird.com
   – Balsamiq: http://balsamiq.com
DISPLAY SUITE
Filosofie achter Display Suite
• Centraal beheer van layout van website inhoud
• Template bestanden overbodig maken

• Focus op gebruiksvriendelijkheid
• Gebruik van PHP beperken = betere veiligheid
Layout beheer met Drupal core

• Mix van template bestanden en Field UI
• Nadelen:
    – Template bestanden zijn niet onderhoudbaar
    – Field UI is beperkt:
         • Geen UI om extra velden toe te voegen (vb. titel,
            auteur)
         • Geen UI om extra View Modes toe te voegen
         • Inconsistent: 'Search result' View Mode
         • Geen gebruik van voorgedefinieerde layouts
Layout beheer met DS
• Bouwt verder op Field UI
      – Nieuwe View Modes aanmaken
      – Voorgedefinieerde layouts aanmaken
      – Eigen velden toevoegen
• Integratie met Views en Panels
• Werkt op elke Drupal Entity (Node, gebruiker etc)
• Consistente HTML output
• Oefening 1: DS aanzetten en Node en Teaser layout wijzigen
DS layouts
• Standaard: 11 layouts + Panel layouts
• Eigen layout in theme:
    – ds_layouts folder aanmaken
    – ***.inc en ***.tpl.php bestanden verplicht
    – ***.css optioneel
    – Voorbeeld: ds.api.php lijn 356.
    – Oefening 2: Eigen layout met 3 rijen in theme
       toevoegen
Correct Css'en met DS
•   Beschikbare classes: Entity, eventueel Content Type, View mode en Groups. Voorbeeld:

<div class="node node-article view-mode-teaser">
      <div class="group-header">
        <h2>Lorem ipsum</h2>
      </div>
      <div class="group-middle">
        <p>Lorem ipsum.</p>
      </div>
    </div>

•   Zo generiek mogelijk, indien nodig specifieker:

.view-mode-teaser .group-header {}
    .node.view-mode-teaser .group-header {}
    .node-article.view-mode-teaser .group-header {}

•   Werk zoveel mogelijk op DS classes ipv HTML van andere modules

•   Oefening 3: css schrijven voor ?
Extras module
• Field templates
• Contextual links

• Regions to block
• Page title options
• Views Displays
• En veel meer!
Andere toepassingen
• Zoekresultaten
• Views slide show met meerdere content types
• Oefening 4: slideshow opzetten: custom View
   mode en voor alle content types instellen.

Mais conteúdo relacionado

Mais procurados

Drupal Cursus Hans Rossel
Drupal Cursus Hans RosselDrupal Cursus Hans Rossel
Drupal Cursus Hans RosselHans Rossel
 
Lucius Websystems Drupal Startersdag
Lucius Websystems Drupal StartersdagLucius Websystems Drupal Startersdag
Lucius Websystems Drupal StartersdagLuciuswebsystems
 
Drupal Uitgebreide Starters Training
Drupal Uitgebreide Starters TrainingDrupal Uitgebreide Starters Training
Drupal Uitgebreide Starters TrainingLuciuswebsystems
 
Lucius Drupal Development Cursus
Lucius Drupal Development CursusLucius Drupal Development Cursus
Lucius Drupal Development CursusLuciuswebsystems
 
Introductie Drupal development
Introductie Drupal developmentIntroductie Drupal development
Introductie Drupal developmentBart Hanssens
 
JCE editor optimaliseren (Joomla Den Bosc­h 2016)
JCE editor optimaliseren (Joomla Den Bosc­h 2016)JCE editor optimaliseren (Joomla Den Bosc­h 2016)
JCE editor optimaliseren (Joomla Den Bosc­h 2016)Peter Martin
 
Tablets - zijn 'publicatie' standaarden al zinvol
Tablets - zijn 'publicatie' standaarden al zinvolTablets - zijn 'publicatie' standaarden al zinvol
Tablets - zijn 'publicatie' standaarden al zinvolPeter Luit
 
Website Usability deel 3: vervolg WordPress
Website Usability deel 3: vervolg WordPressWebsite Usability deel 3: vervolg WordPress
Website Usability deel 3: vervolg WordPressPeter Luit
 
Les 3 Inct. Training WordPress
Les 3 Inct. Training WordPressLes 3 Inct. Training WordPress
Les 3 Inct. Training WordPressPeter Luit
 
How to create a Drupal theme (Dut
How to create a Drupal theme (DutHow to create a Drupal theme (Dut
How to create a Drupal theme (DutN digital studio
 
Online Usability training Hogeschool Utrecht - CCJ
Online Usability training Hogeschool Utrecht - CCJOnline Usability training Hogeschool Utrecht - CCJ
Online Usability training Hogeschool Utrecht - CCJPeter Luit
 
Best Practice: Joomla! templating
Best Practice: Joomla! templatingBest Practice: Joomla! templating
Best Practice: Joomla! templatingHans Kuijpers
 
Online usability - les 1 introductie WordPress - structuur en content
Online usability - les 1 introductie WordPress - structuur en contentOnline usability - les 1 introductie WordPress - structuur en content
Online usability - les 1 introductie WordPress - structuur en contentPeter Luit
 
Online usability - les 2 introductie WordPress
Online usability - les 2 introductie WordPressOnline usability - les 2 introductie WordPress
Online usability - les 2 introductie WordPressPeter Luit
 
Drupal6 Css Theming
Drupal6 Css ThemingDrupal6 Css Theming
Drupal6 Css ThemingRoy Scholten
 
Templates maken met helix framework Joomla User Group Utrecht 10 november 2014
Templates maken met helix framework  Joomla User Group Utrecht 10 november 2014Templates maken met helix framework  Joomla User Group Utrecht 10 november 2014
Templates maken met helix framework Joomla User Group Utrecht 10 november 2014Eric Tiggeler
 
Les 2 Inct. Training WordPress
Les 2 Inct. Training WordPressLes 2 Inct. Training WordPress
Les 2 Inct. Training WordPressPeter Luit
 
Hyperlocal Academy - deel 2: techniek
Hyperlocal Academy - deel 2: techniekHyperlocal Academy - deel 2: techniek
Hyperlocal Academy - deel 2: techniekPeter Luit
 
JD19NL - Joomla Template Overrides, Alternate Layouts en JLayouts
JD19NL - Joomla Template Overrides, Alternate Layouts en JLayoutsJD19NL - Joomla Template Overrides, Alternate Layouts en JLayouts
JD19NL - Joomla Template Overrides, Alternate Layouts en JLayoutsHans Kuijpers
 

Mais procurados (20)

Drupal Cursus Hans Rossel
Drupal Cursus Hans RosselDrupal Cursus Hans Rossel
Drupal Cursus Hans Rossel
 
Lucius Websystems Drupal Startersdag
Lucius Websystems Drupal StartersdagLucius Websystems Drupal Startersdag
Lucius Websystems Drupal Startersdag
 
Drupal Uitgebreide Starters Training
Drupal Uitgebreide Starters TrainingDrupal Uitgebreide Starters Training
Drupal Uitgebreide Starters Training
 
Lucius Drupal Development Cursus
Lucius Drupal Development CursusLucius Drupal Development Cursus
Lucius Drupal Development Cursus
 
Introductie Drupal development
Introductie Drupal developmentIntroductie Drupal development
Introductie Drupal development
 
JCE editor optimaliseren (Joomla Den Bosc­h 2016)
JCE editor optimaliseren (Joomla Den Bosc­h 2016)JCE editor optimaliseren (Joomla Den Bosc­h 2016)
JCE editor optimaliseren (Joomla Den Bosc­h 2016)
 
Tablets - zijn 'publicatie' standaarden al zinvol
Tablets - zijn 'publicatie' standaarden al zinvolTablets - zijn 'publicatie' standaarden al zinvol
Tablets - zijn 'publicatie' standaarden al zinvol
 
Website Usability deel 3: vervolg WordPress
Website Usability deel 3: vervolg WordPressWebsite Usability deel 3: vervolg WordPress
Website Usability deel 3: vervolg WordPress
 
Les 3 Inct. Training WordPress
Les 3 Inct. Training WordPressLes 3 Inct. Training WordPress
Les 3 Inct. Training WordPress
 
How to create a Drupal theme (Dut
How to create a Drupal theme (DutHow to create a Drupal theme (Dut
How to create a Drupal theme (Dut
 
Online Usability training Hogeschool Utrecht - CCJ
Online Usability training Hogeschool Utrecht - CCJOnline Usability training Hogeschool Utrecht - CCJ
Online Usability training Hogeschool Utrecht - CCJ
 
Best Practice: Joomla! templating
Best Practice: Joomla! templatingBest Practice: Joomla! templating
Best Practice: Joomla! templating
 
Online usability - les 1 introductie WordPress - structuur en content
Online usability - les 1 introductie WordPress - structuur en contentOnline usability - les 1 introductie WordPress - structuur en content
Online usability - les 1 introductie WordPress - structuur en content
 
Online usability - les 2 introductie WordPress
Online usability - les 2 introductie WordPressOnline usability - les 2 introductie WordPress
Online usability - les 2 introductie WordPress
 
Drupal6 Css Theming
Drupal6 Css ThemingDrupal6 Css Theming
Drupal6 Css Theming
 
Templates maken met helix framework Joomla User Group Utrecht 10 november 2014
Templates maken met helix framework  Joomla User Group Utrecht 10 november 2014Templates maken met helix framework  Joomla User Group Utrecht 10 november 2014
Templates maken met helix framework Joomla User Group Utrecht 10 november 2014
 
Les 2 Inct. Training WordPress
Les 2 Inct. Training WordPressLes 2 Inct. Training WordPress
Les 2 Inct. Training WordPress
 
Hyperlocal Academy - deel 2: techniek
Hyperlocal Academy - deel 2: techniekHyperlocal Academy - deel 2: techniek
Hyperlocal Academy - deel 2: techniek
 
JD19NL - Joomla Template Overrides, Alternate Layouts en JLayouts
JD19NL - Joomla Template Overrides, Alternate Layouts en JLayoutsJD19NL - Joomla Template Overrides, Alternate Layouts en JLayouts
JD19NL - Joomla Template Overrides, Alternate Layouts en JLayouts
 
Drupalgardens
DrupalgardensDrupalgardens
Drupalgardens
 

Semelhante a Drupal7 Theming

Drupal 6 Theming
Drupal 6 ThemingDrupal 6 Theming
Drupal 6 ThemingDesk02
 
Templates maken met Helix 3 framework - Presentatie Eric Tiggeler Joomladage...
Templates maken met Helix 3 framework  - Presentatie Eric Tiggeler Joomladage...Templates maken met Helix 3 framework  - Presentatie Eric Tiggeler Joomladage...
Templates maken met Helix 3 framework - Presentatie Eric Tiggeler Joomladage...Eric Tiggeler
 
Panels in Drupal: een EYE-opener
Panels in Drupal: een EYE-openerPanels in Drupal: een EYE-opener
Panels in Drupal: een EYE-openerLimoenGroen
 
General Drupal presentation in Dutch
General Drupal  presentation in DutchGeneral Drupal  presentation in Dutch
General Drupal presentation in DutchRoel Meester
 
2013 14-05 - drupal multisite - drupal jam 2013
2013 14-05 - drupal multisite - drupal jam 20132013 14-05 - drupal multisite - drupal jam 2013
2013 14-05 - drupal multisite - drupal jam 2013syneticbv
 
Zelf je Joomla! template bouwen voor beginners
Zelf je Joomla! template bouwen voor beginnersZelf je Joomla! template bouwen voor beginners
Zelf je Joomla! template bouwen voor beginnersRachel Walraven
 
Drupal introductie - GoalGorilla - Oxilion Lunch &amp; Learn
Drupal introductie - GoalGorilla - Oxilion Lunch &amp; LearnDrupal introductie - GoalGorilla - Oxilion Lunch &amp; Learn
Drupal introductie - GoalGorilla - Oxilion Lunch &amp; Learntaccie
 
Eduvision - Webinar drupal: gratis online cursus Drupal
Eduvision - Webinar drupal: gratis online cursus DrupalEduvision - Webinar drupal: gratis online cursus Drupal
Eduvision - Webinar drupal: gratis online cursus DrupalEduvision Opleidingen
 
Drupal Starter Themes (drupal 6 &amp; drupal 7)
Drupal Starter Themes (drupal 6 &amp; drupal 7)Drupal Starter Themes (drupal 6 &amp; drupal 7)
Drupal Starter Themes (drupal 6 &amp; drupal 7)Maarten De Block
 
Online usability - les 3 introductie WordPress - thema's, widgets en plugins
Online usability - les 3 introductie WordPress - thema's, widgets en pluginsOnline usability - les 3 introductie WordPress - thema's, widgets en plugins
Online usability - les 3 introductie WordPress - thema's, widgets en pluginsPeter Luit
 
Jug010 120320-templates
Jug010 120320-templatesJug010 120320-templates
Jug010 120320-templatesHerman Peeren
 
Drupal koba-nov2013
Drupal koba-nov2013Drupal koba-nov2013
Drupal koba-nov2013Hans Rossel
 
Drupal + Open Atrium bij de Vlaamse Erfgoedbibliotheek
Drupal + Open Atrium bij de Vlaamse ErfgoedbibliotheekDrupal + Open Atrium bij de Vlaamse Erfgoedbibliotheek
Drupal + Open Atrium bij de Vlaamse ErfgoedbibliotheekDavid Coppoolse
 
Magento cursus: theme opzetten & beheren
Magento cursus: theme opzetten & beherenMagento cursus: theme opzetten & beheren
Magento cursus: theme opzetten & beherenMichel Doens
 
1.7 terugblik module 1
1.7 terugblik module 11.7 terugblik module 1
1.7 terugblik module 1mvanginkel
 
Cevora opleiding drupal 7.x slides februari 2012
Cevora opleiding drupal 7.x slides februari 2012Cevora opleiding drupal 7.x slides februari 2012
Cevora opleiding drupal 7.x slides februari 2012David Hosse
 
Template overrides - Joomladagen 2010 #jd10nl
Template overrides - Joomladagen 2010 #jd10nlTemplate overrides - Joomladagen 2010 #jd10nl
Template overrides - Joomladagen 2010 #jd10nlSander Potjer
 

Semelhante a Drupal7 Theming (20)

Drupal 6 Theming
Drupal 6 ThemingDrupal 6 Theming
Drupal 6 Theming
 
Templates maken met Helix 3 framework - Presentatie Eric Tiggeler Joomladage...
Templates maken met Helix 3 framework  - Presentatie Eric Tiggeler Joomladage...Templates maken met Helix 3 framework  - Presentatie Eric Tiggeler Joomladage...
Templates maken met Helix 3 framework - Presentatie Eric Tiggeler Joomladage...
 
Panels in Drupal: een EYE-opener
Panels in Drupal: een EYE-openerPanels in Drupal: een EYE-opener
Panels in Drupal: een EYE-opener
 
General Drupal presentation in Dutch
General Drupal  presentation in DutchGeneral Drupal  presentation in Dutch
General Drupal presentation in Dutch
 
2013 14-05 - drupal multisite - drupal jam 2013
2013 14-05 - drupal multisite - drupal jam 20132013 14-05 - drupal multisite - drupal jam 2013
2013 14-05 - drupal multisite - drupal jam 2013
 
Zelf je Joomla! template bouwen voor beginners
Zelf je Joomla! template bouwen voor beginnersZelf je Joomla! template bouwen voor beginners
Zelf je Joomla! template bouwen voor beginners
 
Drupal introductie - GoalGorilla - Oxilion Lunch &amp; Learn
Drupal introductie - GoalGorilla - Oxilion Lunch &amp; LearnDrupal introductie - GoalGorilla - Oxilion Lunch &amp; Learn
Drupal introductie - GoalGorilla - Oxilion Lunch &amp; Learn
 
Drupal 7 intro
Drupal 7 introDrupal 7 intro
Drupal 7 intro
 
Eduvision - Webinar drupal: gratis online cursus Drupal
Eduvision - Webinar drupal: gratis online cursus DrupalEduvision - Webinar drupal: gratis online cursus Drupal
Eduvision - Webinar drupal: gratis online cursus Drupal
 
Drupal Starter Themes (drupal 6 &amp; drupal 7)
Drupal Starter Themes (drupal 6 &amp; drupal 7)Drupal Starter Themes (drupal 6 &amp; drupal 7)
Drupal Starter Themes (drupal 6 &amp; drupal 7)
 
Online usability - les 3 introductie WordPress - thema's, widgets en plugins
Online usability - les 3 introductie WordPress - thema's, widgets en pluginsOnline usability - les 3 introductie WordPress - thema's, widgets en plugins
Online usability - les 3 introductie WordPress - thema's, widgets en plugins
 
Jug010 120320-templates
Jug010 120320-templatesJug010 120320-templates
Jug010 120320-templates
 
Drupal koba-nov2013
Drupal koba-nov2013Drupal koba-nov2013
Drupal koba-nov2013
 
Drupal + Open Atrium bij de Vlaamse Erfgoedbibliotheek
Drupal + Open Atrium bij de Vlaamse ErfgoedbibliotheekDrupal + Open Atrium bij de Vlaamse Erfgoedbibliotheek
Drupal + Open Atrium bij de Vlaamse Erfgoedbibliotheek
 
Magento cursus: theme opzetten & beheren
Magento cursus: theme opzetten & beherenMagento cursus: theme opzetten & beheren
Magento cursus: theme opzetten & beheren
 
Een goede DEV omgeving opzetten
Een goede DEV omgeving opzettenEen goede DEV omgeving opzetten
Een goede DEV omgeving opzetten
 
1.7 terugblik module 1
1.7 terugblik module 11.7 terugblik module 1
1.7 terugblik module 1
 
Cevora opleiding drupal 7.x slides februari 2012
Cevora opleiding drupal 7.x slides februari 2012Cevora opleiding drupal 7.x slides februari 2012
Cevora opleiding drupal 7.x slides februari 2012
 
WordPress 3.5
WordPress 3.5WordPress 3.5
WordPress 3.5
 
Template overrides - Joomladagen 2010 #jd10nl
Template overrides - Joomladagen 2010 #jd10nlTemplate overrides - Joomladagen 2010 #jd10nl
Template overrides - Joomladagen 2010 #jd10nl
 

Drupal7 Theming

  • 1. Drupal Theming Krimson Hans Rossel en Jan-Yves Vanhaverbeke 17/8/2011 en 14/9/2011 Hans Rossel - hans.rossel@koba.be
  • 2. Theme Documentation • Theme guide: http://drupal.org/theme-guide/6-7 • Update modules: http://drupal.org/update/modules/6/7 • Update themes: http://drupal.org/update/theme/6/7 • Theme Forum: http://drupal.org/forum/3 • Theme layer: http://drupal.org/node/933976 • #drupal-themes on irc.freenode.net • http://lists.drupal.org/mailman/listinfo/themes
  • 3. Hulpmiddelen • Firefox: Firebug, webdeveloper toolbar, pixelperfect, xrefresh, colorzilla, webaim • Devel en devel_themer
  • 4. Voorbereiding Wireframes Photoshop design
  • 5. Schermformaten Standaard 1024x768 • Favorieten open? • Bovenmenu aftrekken • Toolbar • Laptop widescreen • Mobile, nieuwere 1152x… >500 verschillende formaten • Verschillen mac/pc • Verschillen IE en Firefox Responsive Webdesign: http://www.alistapart.com/articles/responsive-web-design/ • Oude methode: javascript styleswitcher • Nieuw: media queries
  • 6. Drupal 7 core Themes: Appearance
  • 7. Theme folder Core: /themes Contrib: /sites/all/themes Custom: /sites/default/themes (tenzij bij multisite dan idem contrib)
  • 8. Soorten themes • Core • Contrib • Custom • Starter/base • Admin • Html5
  • 9. SUBTHEME EEN THEME OP BASIS VAN EEN ANDER THEME
  • 10. Subtheme van een bestaand theme .info file: Toevoegen: base theme = garland of bartik Opgelet: Pas nooit rechtstreeks een core of ander theme aan. Voordeel om via base theme te werken is dat je updates van het base theme kunt implementeren. Starter themes zoals Zen en Fusion zijn specifiek ontwikkeld om als base theme gebruikt te worden.
  • 11. Starter Themes • http://drupal.org/project/zen • www.drupal.org/project/fusion • www.drupal.org/project/adaptivetheme (html 5) • www.drupal.org/project/omega (html 5) • http://drupal.org/project/framework Speciaal: clean html code • http://drupal.org/project/mothership: clean html • http://drupal.org/project/stark: drupal default markup
  • 12. ZEN Theme ● www.drupal.org/project/zen ● Net als Garland gebaseerd op de http://www.positioniseverything.net/articles/jello.html Jello Mold techniek: negatieve marges ● Voordelen ● Enorm goede documentatie in comments ● Extra functies (theme settings, block editing) ● Perfect full option hackable via subtheme Handleiding: http://drupal.org/node/226507
  • 14. Een Zen subtheme - #226507 1.Kopieer STARTERKIT en hernoem het 2..info: mijntheme.info + verwijzingen 3.CSS 1.layout-liquid.css of layout-fixed.css → layout.css 2.zen.css → mijntheme.css 3.Optie: html-elements.css + ;weghalen uit .info file 4.Kopieer tpl.php files indien gewenst
  • 15. CSS Framework Starter Themes css frameworks zijn erg handig om snel complexe layouts te maken die standard compliant zijn. Bekende voorbeelden zijn www.blueprintcss.org en www.960.gs. Ze bestaan uit een reset css, rapid prototyping grid css en css voor standaard elementen. Bij Drupal vind je de volgende themes die hierop gebaseerd zijn: • http://drupal.org/project/fusion + skinr (bijvoorbeeld acquia marina theme of Acquia prosper shopping cart theme) • http://drupal.org/project/blueprint • http://drupal.org/project/ninesixty • http://drupal.org/project/ninesixtyfluid
  • 16. Admin Themes Nu er erg wordt gewerkt aan het verbeteren van de User Experience en Usability van Drupal zijn er recent heel wat mooie admin themes beschikbaar. Ze zijn bedoeld als theme voor de backend van Drupal en je stelt ze in als beheertemplate. Zo krijg je een perfecte scheiding tussen backend en frontend. • http://drupal.org/project/admin (module!) – Rubik: icons: http://code.developmentseed.org/rubik – Tao base theme:http://code.developmentseed.org/tao • http://drupal.org/project/rootcandy • http://drupal.org/project/seven (backport van d7 theme)
  • 17. Ontwerp je eigen subtheme template.php: theme function overrides die voor alle themes van belang zijn Overnemen zaken van andere starter themes: • Zen theme: body classes • Zen theme: tabs en messages • Tao: css reset
  • 19.
  • 20.
  • 21.
  • 22. EEN DRUPAL 7 THEME “FROM SCRATCH”
  • 23. Theme CSS • Drupal voegt heel wat html met id's en classes toe. Probeer zoveel mogelijk met css op te lossen. De html wijzigen van Drupal is een stuk moeilijker. • Werk je html/css template niet volledig in detail af. Afwerking css van blokken, zoekbox, menu's hou je best voor nadat je de template in Drupal hebt gebracht • Name collision: Drupal voegt html toe met .menu, .content, .links, .block. Gebruik die classes niet in je eigen template anders krijg je een conflict.
  • 24. HTML/css Prototype www.styleshout.com / www.oswd.org vectorlover html/css prototype http://www.styleshout.com/free-templates.php?page=2
  • 25.
  • 26. .
  • 27.
  • 28. Theme files .info (definition file) screenshot.png Css, js, images page.tpl.php, node.tpl.php: • html met dynamische (php) stukken template.php: (geavanceerde) php code
  • 29.
  • 30. Regions regions[header] = Header regions[help] = Help (d6:$help) regions[page_top] = Page top (d6:$closure) regions[page_bottom] = Page bottom (d6:$closure) regions[highlight] = Highlighted (d6:$mission) regions[featured] = Featured regions[content] = Content (d7:main page content is block!) regions[sidebar_first] = Sidebar first (d6:left) regions[sidebar_second] = Sidebar second (d6:right) regions[footer] = Footer (d6:$footer_message) In D7: regions_hidden[] = naam van de regio die je wil verbergen in de blocks overview page (default zijn verborgen page_top en page_bottom) Blocks overview page: Demonstrate Block regions
  • 31. Theme folder Maak folder: sites/default/themes/vectorlover Voeg je index.html, css, images van je statische template toe
  • 32. .info file Maak een vectorlover.info file name = vectorlover description = A very nice theme (package nooit gebruiken: Core themes hebben hier “core” in D7 zodat de update manager ze kan herkennen) version = 1.0 core = 7.x engine = phptemplate stylesheets[all][] = css/vectorlover.css stylesheets[all][] = css/custom.css scripts[] = scripts/scripts.js
  • 33. Template files • /modules/system – html.tpl.php : Bevat DOCTYPE, <head> met RDFa, page_top en page_bottom regions en de content region waarin page.tpl.php wordt geprint. Meestal ga je html.tpl.php niet overnemen in je eigen theme. Zie ook http://api.drupal.org/api/function/template_preprocess_html/7 om variabelen hiervan aan te passen. – page.tpl.php: <body> van index.html • Hernoem index.html naar page.tpl.php en verwijder alles behalve wat tussen de <body> tags zit
  • 34. Theme activeren • screenshot.png toevoegen (294px × 219px) • Appearance tab: theme activeren • Telkens je een nieuw tpl.php bestand toevoegd aan een theme: clear theme registry – Clear cache button bij Performance settings – D7: drupal_theme_rebuild() in template.php (opgelet! Achteraf uitschakelen of serieuse problemen met performance) – Vinkje “Rebuild Theme Registry on every page” bij bepaalde themes
  • 35. Theme Registry http://drupal.org/node/173880 De theme registry moet leeggemaakt worden telkens als je een template file toevoegt (niet bij activatie theme) • Via Prestatie > Clear cache (alle cache!) • Via admin_menu of devel module link • Via drush cc (optie 2)
  • 36. Functie clear theme registry Wordt best conditioneel toegevoegd via een setting voor het theme. Performance problemen indien dit blij live site vergeten wordt uit te schakelen // Rebuild .info data. system_rebuild_theme_data(); // Rebuild theme registry. drupal_theme_rebuild();
  • 38. First sidebar (zijkolom regio) • Alle regio's die je definieert in je .info bestand moeten geprint worden in html.tpl.php en page.tpl.php om hun juiste plaats op de pagina te bekomen.
  • 39. Main menu (hoofdnavigatie) • To meet Web Content Accessibility Guidelines (WCAG) requirements, HTML headings should be used before all content sections, which includes lists of links such as menus. The headers ensure that there is a quick way for assistive technology users to browse through the content
  • 40. Variabelen • Heel wat beschikbare variabelen • Bekijken via devel of print_r($vars) in template • Definitie van de variabelen in includes/theme.inc en de respectievelijke modules
  • 42. CSS in Drupal themes • Vermijd overlapping van css classes door .content, .menu, .links, .block niet te gebruiken • Drupal heeft reeds enorm veel classes en id's voorgedefinieerd, oa body classes die al heel wat context leveren om te stylen • Via bepaalde modules kunnen extra css classes toegevoegd worden via de interface: views, ds, ...
  • 43. Css aanpassen • Stylesheet toevoegen in (sub) theme via .info file • drupal_add_css om (conditioneel) css toe te voegen via template.php of een module • hook_css_alter om css aan te passen
  • 44. Css toevoegen via .info ; Add a style sheet for all media stylesheets[all][] = theStyle.css ; Add a style sheet for screen and projection media stylesheets[screen, projection][] = theScreenProjectionStyle.css ; Add a style sheet for print media stylesheets[print][] = thePrintStyle.css
  • 45. Media queries .info file stylesheets[screen and (max-width: 600px)][] = screen-600.css In css bestand: @media screen and (max-device-width: 600px) { //aanpassingen voor kleine toestellen }
  • 47. Accessibility: Css clip Probleem: hide content except for screen-readers • display:none maakt de content onzichtbaar voor screen-readers • Negative text-indent heeft problemen met RTL talen .element-invisible { clip:rect(1px, 1px, 1px, 1px); position:absolute !important; } Achtergrond:http://adaptivethemes.com/using-css-clip-as-an-accessible-method-of-hiding-content
  • 48. drupal_add_css • http://api.drupal.org/api/drupal/includes--common.inc/function/drupal_add_css/7 • drupal_add_css(path_to_theme() . '/css/ie/ie-7.css', array('group' => CSS_THEME, 'weight' => 115, 'browsers' => array('IE' => 'lte IE 7', '!IE' => FALSE), 'preprocess' => FALSE)); • drupal_add_css(drupal_get_path('module', 'dashboard') . '/dashboard.css');
  • 49. Verwijzen naar actieve theme • In template $directory • path_to_theme() • drupal_get_path('theme', 'bartik')
  • 50. Reset css • Nodig? http://css-class.com/test/css/defaults/UA-style-sheet-defaults.htm • Reset.css + base.css • Alternatief: normalize.css, initial.css, html5 boilerplate • Dient eerst te komen drupal_add_css(path_to_theme() . '/css/reset.css', array('group' => CSS_SYSTEM - 1, 'preprocess' => FALSE));
  • 51. IE css template.php (example Bartik theme) Gebruik: functie abc_preprocess_html(&$vars)
  • 52. IE css via module • Issue: in .info file? Zie http://drupal.org/node/522006 • Via module: http://drupal.org/project/conditional_styles – stylesheets-conditional[lt IE 7][all][] = ie6-and- below.css – stylesheets-conditional[IE 9][all][] = ie9.css – stylesheets-conditional[IE][print][] = ie-print.css
  • 53. Hook_css_alter http://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_css_alter/7 <?php function abc_css_alter(&$css) { // Remove defaults.css file. unset($css[drupal_get_path('module', 'system') . '/defaults.css']); } ?>
  • 55. Remove multiple css files <?php function THEMENAME_css_alter(&$css) { $exclude = array( 'misc/vertical-tabs.css' => FALSE, 'modules/aggregator/aggregator.css' => FALSE, 'sites/all/modules/date/date_popup/themes/datepicker.1.7.css' => FALSE, 'misc/ui/jquery.ui.theme.css' => FALSE, ); $css = array_diff_key($css, $exclude); } ?>
  • 56. Override css /** * Implements hook_css_alter(). */ function seven_css_alter(&$css) { // Use Seven's vertical tabs style instead of the default one. if (isset($css['misc/vertical-tabs.css'])) { $css['misc/vertical-tabs.css']['data'] = drupal_get_path('theme', 'seven') . '/vertical-tabs.css'; } if (isset($css['misc/vertical-tabs-rtl.css'])) { $css['misc/vertical-tabs-rtl.css']['data'] = drupal_get_path('theme', 'seven') . '/vertical-tabs-rtl.css'; } // Use Seven's jQuery UI theme style instead of the default one. if (isset($css['misc/ui/jquery.ui.theme.css'])) { $css['misc/ui/jquery.ui.theme.css']['data'] = drupal_get_path('theme', 'seven') . '/jquery.ui.theme.css'; } }
  • 57. HTML Aanpassen • Via .tpl.php file: template file aanpassen of dupliceren in een template suggestion • Via theme_ functie in template.php: function override • Via preprocess en process functies in template.php: variabelen aanpassen
  • 59. HTML wijzigen Template overrides • Copieer om het even welk tpl.php bestand dat je vindt in een module naar je de map van je theme • Doe aanpassingen in de html naar wens • Maak de cache (theme registry) leeg Voorbeeld: search-result.tpl.php in /modules/search
  • 60. page.tpl.php Frontpage page--front.tpl.php Vermijd zoveel mogelijk meerdere page.tpl.php templates te hebben. Gebruik css of preprocess variabelen in template.php. Op pad (url geen alias) page--node-edit.tpl.php of page--node-add.tpl.php > page--node-1.tpl.php > page--node.tpl.php > page.tpl.php page--blog.tpl.php, page--viewpagename.tpl.php, page--admin.tpl.php, page--admin-build-block.tpl.php, page-- civicrm.tpl.php, page--googlemap.tpl.php Nieuw in D7: % integer wildcard page--user.tpl.php > page--user--%.tpl.php > page--user--1.tpl.php
  • 61. node.tpl.php Copieer de originele node.tpl.php van /modules/node Per content type node--blog.tpl.php node--forum.tpl.php node--page.tpl.php node--ccknews-content-type.tpl.php D6: Opgelet: je moet steeds een gewoon node.tpl.php bestand hebben in je theme folder als je het wil overriden. In D7 deze bug is opgelost.
  • 64. Belangrijkste andere tpl.php ● ● region.tpl.php ● maintainance-page.tpl.php ● In /modules/system ● html.tpl.php ●In /modules/node ● node.tpl.php ●In /modules/field ● field.tpl.php ●In ● comment.tpl.php /modules/comment ● In /modules/block ● Block.tpl.php
  • 65. Theme hook suggestions function abc_preprocess_page(&$vars, $hook) { print_r($vars['theme_hook_suggestions']); } Array ( [0] => page__node [1] => page__node__% [2] => page__node__1 )
  • 67. HTML wijzigen via Theme overrides Als er geen tpl.php beschikbaar is, dan zit de html in een theme_ functie • Zoek de theme_functie in je module of via api.drupal.org, api.lullabot.com of http://drupalcontrib.org (contrib) • Copieer en plak de functie in template.php en vervang theme_ met naamvanjetheme_ (niet meer phptemplate_ zoals in D6) • Pas de html aan naar wens
  • 71. Themeable functions Handige functies voor links, lijsten, … – http://api.drupal.org/api/group/themeable/6
  • 72. L functie: een link maken ● http://api.drupal.org/api/drupal/includes--common.inc/function ● Vorm: l($text, $path, $options = array()); ● Eenvoudig voorbeeld l(t('klik hier'), “node/1”); ● Voorbeeld uit blog module l(t('View recent blog entries'), "blog/$user->uid", array('attributes' => array('title' => t("Read @username's latest blog entries.", array('@username' => $user->name)))));
  • 73. theme_item_list: een lijst ● http://api.drupal.org/api/function/theme_item_list/6 ● Vorm: theme_item_list($items = array(), $title = NULL, $type = 'ul', $attributes = NULL) ● Voorbeeld <?php $items = array('jan','piet','joris'); print theme('item_list', $items, NULL, 'ul', array('class' => 'mijn-lijst', 'id' => 'de-lijst')) ?>
  • 74. theme_links ● http://api.drupal.org/api/function/theme_links/6 ● Vorm: theme_links($links, $attributes = array('class' => 'links')) ● Voorbeeld theme('links', $primary_links, array('class' => 'links primary- links', 'id' => 'primary'))
  • 77. Drupal paden, classes voor css  Standaard: node/nid  Opvragen via: http://api.drupal.org/api/drupal/includes--bootstrap.inc/  Voorbeeld  Drupal path: node/11  <?php print arg(0); ?> geeft node  <?php print arg(1); ?> geeft 11 <?php if (arg(2) == 'edit') { echo $content; }
  • 78. Node controleren function themename_preprocess_page(&$variables) { $variables['ifnode'] = ( (arg(0) == 'node') && is_numeric(arg(1)) ) && (arg(2) != 'edit' || arg(2) != 'delete'); }
  • 89. Nieuwsbrief tpl.php /* * Newsletter: make separate template files for html and page if node type is nieuwsbrief */ function vai_preprocess_page(&$variables) { if ($variables['node']->type == 'nieuwsbrief') { $variables['theme_hook_suggestions'][] = 'page__nieuwsbrief'; } }
  • 99. Theme hook suggestions voor block in hook_preprocess_block
  • 100. Block admin pagina function seven_preprocess_block_admin_display_form(&$vars) { // List of modules which are allowed on the block page $show = array( 'block', ); // Scan through each disabled block entry and remove ones that aren't needed. foreach ($vars['block_listing']['-1'] as $key => $disabled) { $type = explode('_', $key); if (!in_array($type[0], $show)) { unset($vars['block_listing']['-1'][$key]); } } }
  • 101. URL Aliassen opvragen Zie: http://api.drupal.org/api/drupal/includes--path.inc/function/drupal_get_path_alias/7 en http://www.php.net/manual/en/reserved.variables.get.php <?php // $_GET['q'] geeft node/nid en explode() splitst de string op bij '/' en plaatst de stukken in een array $path_pieces = explode('/', drupal_get_path_alias($_GET['q'])); // dus als het pad is /abc/def, $path_pieces is dan Array ( [0] => abc, [1] => def ) // Dus, $path_pieces[0] geeft 'abc' print $path_pieces[0]; ?> Mogelijkheden: • Via preprocess toevoegen aan body classes
  • 103. Render API • $page array bevat regios, blokken, ...: flexibel spelen met content via hook_page_alter() • Meer info – http://www.archive.org/details/ExplorethegloryofDrupal7simprovedren – http://www.archive.org/details/PageRenderDrillDownInDrupal7
  • 104. Render api & hook_page_alter http://api.drupal.org/api/function/hook_page_alter/7 • Naar voorbeeld van de FormAPI: meer flexibiliteit en mogelijkheid om zaken te wijzigen in regios en blokken net voor de pagina gerenderd wordt, hele page is 1 array
  • 105. Render() toepassingen • Voorbeelden – Regio's en blokken wijzigen met module • Voorbeeld: een blok dupliceren in een tweede regio • Node links in een sidebar tonen • Banner ad toevoegen aan comment listing – Volgorde van elementen wijzigen • Bekijken – Devel module: show page array – print_r($page); •
  • 109. Theme switching in settings.php theme_default: Defines the default theme for this site. - $conf['theme_default'] = 'garland'; A custom theme can be set for the offline page. - $conf['maintenance_theme'] = 'bartik';
  • 110. Theme wisselen volgens url In settings.php // if the url is an administration page if (strpos($_GET['q'], 'admin') === 0) { $conf['theme_default'] = 'garland'; }
  • 111. Mobile theme $parts = explode('.', $_SERVER['HTTP_HOST']); if ($parts[0] == 'mobile') { $GLOBALS['theme_default'] = 'mobile'; }
  • 112. IE6 theme $user_agent = $_SERVER['HTTP_USER_AGENT']; if($user_agent) { if ((strpos($user_agent, 'MSIE 6.0')) && (strpos($_GET['q'], 'user') === 0)){ $conf['theme_default'] = 'garland'; } }
  • 113. Theme Key module • Heel flexibele module voor het wisselen theme onder bepaalde voorwaarden – Tijd: speciaal theme voor bepaalde dagen – User: ander theme voor user of rol – Browser: ander theme voor IE6 – Mobile theme, Mobilekey module • http://kalki.de/en/howto/themekey-tutorials.htm
  • 114. Mobile themes • App – Titanium/phonegap via html5,css3,js • Aparte site – Multisite installatie – Mobile tools module: mobile rol, ... – Jquery mobile: touch optimized framework – Detectie: Browscap en wurfl • Responsive design: flexible images
  • 116. Theme settings • Drupal.org: http://drupal.org/node/177868 • Op admin/appearance/settings/themeName kunnen voor het theme extra settings worden voorzien • Voordeel: hergebruik in andere themes => gebruiken in base theme
  • 118. Default settings in .info file • settings[abc_breadcrumb] = yes • settings[abc_breadcrumb_separator] = ' › ' • settings[abc_rebuild_registry] = 0
  • 119. hook_form_system_theme_setti ngs_alter • Is een hook_FORM_ID_alter implementatie • Gebruikt in theme-settings.php
  • 122. Theme security • check_plain() • check_url() • check_markup() • filter_xss_admin drupal_set_title($node->title); // Incorrect drupal_set_title(check_plain($node->title)); // Correct
  • 124. Front-end performance • Css en js aggregatie • Image styles, smush.it • Css sprites • drupal_add_css en drupal_add_js: selectief css en js toevoegen • Yslow en Google PageSpeed • http://wimleers.com/article/improving-drupals-pa
  • 126. Voorbeeld: Views slideshow • http://drupal.org/project/views_slideshow • Toepassing: – Fotogalerij – Dynamic Display block
  • 127. Views templates • Basistemplates in de views module folder • Theme Information link in de view zelf geeft suggesties voor tpl.php files specifiek voor deze view • Theme developer via Devel module: bekijken suggesties live • Er zijn ook theme_ functies beschikbaar voor views, maar handiger via tpl.php
  • 128. Een view beïnvloeden 1) Met de template files views-view.tpl.php (opvragen via de “information link”) 2) Met een hook vb hook_views_admin_links_alter 3) Tijdens het embedden van de view $view- >hide_admin_links
  • 129. Views embedden met module • http://drupal.org/project/viewfield • http://drupal.org/project/insert_view
  • 130. Eenvoudig views embedden <?php echo views_embed_view('most_recent_post', 'default'); ? > <?php echo views_embed_view('nieuws', 'block_1'); ?> <?php print views_embed_view('calendar', 'calendar_block_1'); ?>
  • 131. Views embedden alternatief $view = views_get_view($view_name); $view->set_arguments(array(0 => 'all', 1 => 'typeb')); // if you have args $view->set_items_per_page(0); // Aantal resultaten print $view->execute_display(0, $args); // default view, include $args param if using
  • 132. Geavanceerd embedden via blok <?php $view = views_get_view('Publicaties'); //print '<pre>'; //print_r($view); //print '</pre>'; $view->set_display('block_1'); $view->display_handler->set_option('items_per_page', 2); $view->set_arguments(args...); $title = $view->get_title(); $output = $view->preview(); print '<h2>' . $title . '</h2>'; print $output; ?>
  • 134. Theming fields Individuele velden kunnen gethemed worden via field.tpl.php • field.tpl.php • field--field-type.tpl.php • field--field-name.tpl.php • field--content-type.tpl.php • field--field-name--content-type.tpl.php
  • 135. Theme image styles http://api.drupal.org/api/drupal/modules--image--image.module/functio print theme('image_style', array( 'path' => $field_gallery_image['de'][0]['uri'], 'style_name' => 'gallery_thumbnail'));
  • 136. Theme image styles Probleem/bug: width/height van images http://drupal.org/node/908282 http://drupal.org/node/1129642 Manueel hoogtes specifieren theme('image_style', array('style_name' => 'desthumb', 'path' => $image0path, 'getsize' => TRUE, 'attributes' => array('class' => 'thumb', 'width' => '150', 'height' => '162'))); Tijdelijke workaround: http://api.drupal.org/api/drupal/modules--image--image.module/functio
  • 138. Form theming Het themen van forms kan via hook_FORM_ID_alter() Er zijn ook enkele modules die je kunnen helpen een pak zaken zonder code te doen: Display Suite, Panels, Nodeformcolumns
  • 139. hook_FORM_ID_alter /** * Implements hook_form_ID_alter(). */ function abc_form_comment_form_alter(&$form, &$form_state) { // dpm($form); $form['notify_settings']['notify_type']['#prefix'] = '<div class="container-inline clearfix">'; $form['notify_settings']['notify_type']['#suffix'] = '</div>'; }
  • 140. hook_FORM_ID_alter /** * Implements hook_form_ID_alter(). */ function abc_form_user_login_block_alter(&$form, &$form_state) { $form['links']['#prefix'] = '<div class="login-links container-inline clearfix">'; $form['links']['#suffix'] = '</div>'; }
  • 142. Nieuwe mogelijkheden • Vereenvoudigde html (niet meer xml gebaseerd) • Nieuwe structuurelementen: <header><footer><section><article><nav><asi de> • Nieuwe formelementen: input type=email, url, date, time, month, week, number, range, search, tel, color. Voordeel: er kan een gebruiksvriendelijke widget worden voorzien
  • 143.
  • 144. Nieuwe mogelijkheden • Video: <video> • Canvas: http://canvaspaint.org • Data storage: localstorage 5MB en web sql database api • Offline: cache manifest • Drag and drop (js) • Location api (js, niet echt html5)
  • 145. CSS3 • Voor oudere versies -moz en -webkit nodig. IE soms complexe eigen filter • transition:background-color .5s; • transition:z-index .5s, opacity .5s; • border-radius:3px; • box-shadow:inset rgba(0,0,0,.75) 0px 0px 10px; • Text-shadow • Gradients: http://www.colorzilla.com/gradient-editor/
  • 146. CSS3 demos • http://www.css3generator.com/ • http://webdesignerwall.com/trends/css3-examples • http://webdesignerwall.com/trends/47-amazing-cs •
  • 147. HTML5 en CSS3 support • Browser support http://www.findmebyip.com/litmus/ •
  • 148. Drupal html5 themes • Omega • Adaptivetheme • Zen v5
  • 150. Grid systemen Probleemstelling –Gelijke en eenduidige marges –Pagina opdeelbaar in 2,3,4,5 kolommen met gelijke marges Zelf berekenen –http://gridulator.com/
  • 151. Grid systemen http://www.smashingmagazine.com/2008/05/29/applying-divine-prop CSS Frameworks •http://en.wikipedia.org/wiki/List_of_CSS_frameworks •http://960.gs: 960px met 12 of 16 kolommen en 20px margin •http://www.blueprintcss.org: 950px met 24 kolommen en 10px margin •YAML: http://www.yaml.de/en •YUI Grids: http://developer.yahoo.com/yui/grids
  • 152. Voordelen • Vertrekken van vaste basiscode (wiel niet heruitvinden) • Browser compatibiliteit: Herbruikbaarheid css en hacks voor IE6 (en zelfs IE5, maar als zelfs msn.com die niet meer respecteert...) • Professionele grid structuur • Flexibele voorgedefinieerde classes voor basiselementen: lijsten, tabellen, forms • Sneller werken, rapid prototyping (ipv wireframing) opstellen van mock-ups • Clean code • Klein <5kb • Iphone viewport is 960px
  • 153. Nadelen • Jij en iedereen die aan de site werkt moet het framework kennen • Er is code die je niet gebruikt • Beperkingen in design ◦ De xhtml layout zou moeten gebaseerd zijn op het design, niet omgekeerd ◦ Fixed width vb 960px, voor 1280px schermen wil je soms 960px + extra niet belangrijke kolom (reclame)
  • 155.
  • 156. Reset: Tripoli & compressie * {margin:0; padding:0;}: traag Eric Meyer: http://meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded Tripoli: http://devkick.com/lab/tripoli/ • Compatibel met Windows: IE5, IE5.5, IE6, IE7, IE8, Opera 8, Opera 9, Safari, Firefox 2, Firefox 3, OS X: IE5, Firefox 2, Firefox 3, Safari 2, Safari 3, Camino
  • 157. Blueprint • Framework: http://blueprintcss.org • Tools: ◦ http://kematzy.com/blueprint-generator ◦ http://code.google.com/p/blueprintcss/wiki/Tools • Plugins ◦ In core: Fancy Type, RTL (right-to-left text and column layout support), Buttons, Link Icons (bestandstypes, external, ...) ◦ Tabs:http://github.com/Montoya/blueprint-plugin---tabs/tree/master ◦ Liquid: http://github.com/Montoya/blueprint-plugin---liquidgrid/tree/master ◦ Silk icons: http://github.com/Montoya/blueprint-plugin---silksprite/tree/master Voorbeeld: http://nettuts.com/tutorials/html-css-techniques/a-closer-look-at-the-blueprint-css-framework/
  • 158. 960.gs • http://960.gs • Ook fluid: http://www.designinfluences.com/fluid960gs • En elastic http://csswizardry.com/typogridphy • Uitgewerkt voorbeeld: http://nettuts.com/tutorials/html-css-techniques/prototyping-with-the-grid-960-css-framework
  • 159. Drupal • Verschillende starter themes gebruiken 960.gs ◦ http://drupal.org/project/ninesixty ◦ http://drupal.org/project/fusion
  • 161. Responsive design • Layout aanpassen aan schermformaat • http://www.alistapart.com/articles/responsive-we • Basisprincipes – Procentueel werken (elastic layout) – Media queries – Fluid images – Aantal kolommen verminderen bij kleinere schermen
  • 162. Css3: Media queries <link rel="stylesheet" type="text/css" media="screen and (max-device-width: 480px) and (resolution: 163dpi)" href="shetland.css" /> @media screen and (max-width: 600px) { .footer { float: none; width: auto; } }
  • 163. Browser support • Safari 3+, Chrome, Firefox 3.5+, IE9 en Opera 7+ • Javascript oplossingen – http://plugins.jquery.com/project/MediaQueries – http://code.google.com/p/css3-mediaqueries-js/ – https://github.com/scottjehl/Respond
  • 164. Fluid images • Schaalbare afbeeldingen • http://www.alistapart.com/articles/fluid-images/ • Verkleinen: http://drupal.org/project/responsive_images img { max-width: 100%; }
  • 165. Responsive grid layouts • Grids hebben voor en nadelen bij responsive design • Adapt.js: http://adapt.960.gs • Rethinking css grids (toekomstige layouttechnieken): http://www.markboulton.co.uk/journal/commen
  • 166. IE en responsive design • Afbeeldingen: bicubic resize • respond.js • http://www.ie6countdown.com En http://www.theie7countdown.com • Geen IE6 support in core themes van Drupal 8
  • 168. Speciale lettertypes • Webfonts: Arial, Verdana, – Css: font-family: Arial, Helvetica, sans-serif; – Css: font-family: Times New Roman, Times, serif • Speciale fonts – Zijn niet aanwezig op elke computer – Fontbedrijven terughoudend omwille van licenties
  • 169. Webfonts – Websafe fonts Veiligste fonts • Arial / Helvetica • Times New Roman / Times • Courier New / Courier Ander cross platform • Verdana • Georgia • Comic Sans MS • Trebuchet MS • Arial Black • ImpactPalatino • Garamond • Bookman • Avant Garde
  • 170. Replacement technieken • Speciale fonts – Via een image: moet alt tekst hebben voor toegankelijkheid, niet dynamisch vanuit cms – Flash – Javascript – Css
  • 171. Flash: Sifr – Flash: Sifr • http://www.mikeindustries.com/blog/sifr • http://www.sifrgenerator.com/wizard.html • http://drupal.org/project/sifr – Opmerkingen • Toegankelijkheid is in orde vermits er in de code gewoon html <h1> etc wordt gebruikt • Browser moet Flash ondersteunen (iphone/ipad niet) • Ad-blockers kunnen de weergave blokkeren • Traag: behoorlijk wat Flash, css en js code te genereren, enkel voor titels, niet voor volle tekst • Letters niet heel zuivere randen
  • 172. Javascript: Cufon • Via javascript: Cufon – http://cufon.shoqolate.com/generate – http://drupal.org/project/cufon • Opmerkingen – Heel goed opletten met welke lettertekens je toelaat, teveel is nadelig voor performantie, te weinig laat letters met accenten niet verschijnen – Internet Explorer is traag in javascript dus traag in Cufon – Hoe meer lettertypes je gebruikt hoe meer javascript moet geladen worden per pagina – Lettertypes niet heel zuivere randen
  • 173. Css @font-face • Geïntroduceerd in 1998, pas ondersteund door alle browsers in 2010 wegens licentieproblemen. • Gratis fonts – http://www.google.com/webfonts – http://www.fontsquirrel.com – http://www.theleagueofmoveabletype.com/ • Formaten: – Ttf: True Type, standaard desktop formaat – Woff: Web Open Font Format, zou moeten de standaard worden – Eot: Embedded Open Type, ttf verpakt in DRM, enkele Microsoft – Svg: Scalable Vector Graphics, oudere iphones
  • 174. Css: gebruik Internet Explorer @font-face { font-family: MyKievit; src: url(/fonts/KievitWebPro-Medium.eot); { Firefox @font-face { font-family: MyKievit; src: url(/fonts/KievitWebPro-Medium.woff) format('woff'); { body { font-family: MyKievit, Arial, sans-serif; }
  • 175. Browser support Formaat Firefox Chrome IE 6-8 IE9 Safari IOS Android 3.6+ 6+ 3.1+ 2.2 EOT x x TTF x x x X (>4.2) x SVG x X (<4.2) WOFF x x x • Bron: http://www.webfonts.info/wiki/index.php?title=@font-face_browser_support
  • 176. @font-face kits • Bevat – Eot, woff, ttf, svg • Waar? – Gratis • www.fontsquirrel.com/fontface • www.fontsquirrel.com/fontface/generator – Betalend: • http://www.fontspring.com/fontface: als kit • www.typekit.com, www.fonts.com, www.fontslive.com, www.fontdeck.com, www.web-type.com: als abonnement, hosted service, licencing ok, eenvoudig codesnippet compatibel met alle browsers, goedkoper want enkel webdeel van font gekocht, betalen per pageviews of per font.
  • 177. @font-face in de praktijk @font-face { font-family: 'MyFontFamily'; src: url('myfont-webfont.eot?') format('eot'), url('myfont-webfont.woff') format('woff'), url('myfont-webfont.ttf') format('truetype'), url('myfont-webfont.svg#svgFontName') format('svg'); } Browser support: Safari 5.03, IE 6-9, Firefox 3.6-4, Chrome 8, iOS 3.2-4.2, Android 2.2-2.3, Opera 11 Bron: http://www.fontspring.com/blog/the-new-bulletproof-font-face-syntax
  • 179. Nieuwsbrieven • 3 voornaamste mogelijkheden – Simplenews: eenvoudig en goedkoop, geen bounce handling, beperkte statistieken, problemen met server gemarkeerd als spamserver – Campaignmonitor of Mailchimp integratie: full bounce handling, statistieken, whitelisting, betalend maar Mailchimp tot 1000 abonnees gratis! – Civimail (onderdeel van Civicrm): mailings, bounce handling, goed systeem
  • 180. Nieuwsbrief theming ● http://www.campaignmonitor.com/css/ ● http://drupal.org/node/268404 ● Probleem: css moet inline voor webclients (gmail, yahoo, hotmail) – Views templates maken voor onderdelen – Automatisch: Emogrifier (htmlmail), Mime Mail CSS Compressor (mimemail) – Display suite
  • 181. Nieuwsbrief theme Via Themekey module: als ct nieuwsbrief of view nieuwsbrief => Nieuwsbrief theme gebruiken • Nieuwsbrief theme – Geen html5 en andere moderne zaken, terug naar de nineties! – Sterk vereenvoudigde html.tpl.php: geen css en js printen – Sterk vereenvoudigde page.tpl.php: enkel tabel
  • 182. Nieuwsbrief theme • Views: <?php print views_embed_view('nieuwsbrief_items','defau lt'); ?> • Reference field: <?php print render($content['field_nb_architectuurnieuws ']); ?> • Veld: <?php print check_url($node- >field_nb_subfoto1_linkt['und'][0]['url']); ?>
  • 183. Aanpak 2: via views • Nodequeue: Toevoegen aan nieuwsbrief • View: Nieuwsbrief op /nieuwsbrief • Nieuwsbrief = page - - nieuwsbrief.tpl.php – Views_embed_view('eersteview'); – views_embed_view('tweedeview'); • Nadeel: geen inleiding, archief via Mailchimp
  • 184. Aanpak: Eigen inhoudstype • CT Nieuwsbrief – Met velden voor foto's, tekst, links – Reference fields voor lijsten
  • 185. Simplenews theming ● simplenews-newsletter-body--1126.tpl.php ● simplenews-newsletter-footer--1126.tpl.php
  • 186. THEMING VANUIT DE DRUPAL INTERFACE
  • 187. Theming Alternatieven: Modules • Context: www.drupal.org/project/context • Panels: www.drupal.org/project/panels • Display Suite: www.drupal.org/project/ds • Sweaver: www.drupal.org/project/sweaver
  • 188. PANELS
  • 189. Panels: doel en historiek • Panels = layoutbuilder in Drupal • Earl Miles (Views) • Sony www.myplay.com • Versies 1,2,3 • Toekomst: Drupal 8 misschien een eenvoudige panels achtige interface voor toevoegen van content in Drupal core • Documentatie: http://drupal.org/node/496278
  • 190. Panels: voordelen – Point en click Drupal theming zonder html en php, templates opstellen via de interface – Slechts 1 soort inhoudsobject: panel waarin blokken, menus, views, velden, ... kunnen weergegeven worden => alles eenvormig op dezelfde manier behandelen – Complexe pagina layouts mogelijk zonder voorkennis van html/css – Flexibeler layouts: vb zelfde blok in verschillende regios, ... – Makkelijker en sneller wijzigingen aanbrengen aan templates – Ctools: vastleggen van layouts in exportables en features => exporteerbaar dus hergebruikbaar en opgenomen in svn/git revisiesysteem. – Varianten: andere soorten layouts volgens context, vb ingelogde klanten/leden, mobiele website – Integreert heel goed met views
  • 191. Panels: nadelen • Performance: is heel grote module, wel goede caching opties • Kan complex zijn: is systeem op zich met leercurve en heel veel checkboxen • Werkt behoorlijk anders dan “the Drupal way” => bloksysteem en regios uitschakelen (vinkje) • Alles of niets: als je panels gebruikt het voor alles gebruiken • Moeilijker te debuggen • Soms trage upgrade bij nieuwe versie van dr http://www.youtube.com/watch?v=qBGKdnUj4Ywupal core , en upgrades tussen v1, 2 en 3 waren niet vanzelfsprekend, maar ondertussen heel veel gebruikt (> 80.000 installs) • Overladen html tenzij je eigen custom templates opstelt
  • 192. Submodules en extra • Page Manager (bij ctools): page layouts (beetje zoals page.tpl.php) • Mini panels: blok layouts • Panel nodes: node layouts • Views content panes: views in panels • Panels Everywhere
  • 193. Layouts • Standaardlayouts • Bepaalde themes definiëren extra layouts zoals Adaptive Theme (AT) in d6 • http://drupal.org/project/panels_extra_layouts: extra layouts: • Best: eigen html templates voor layout – Advanced help module: help/panels/plugins-layout – tpl.php, css, inc en png – Meer docs: http://drupal.org/node/495654
  • 194. Variants • Andere layout voor zelfde pagina bij andere voorwaarden – Volgens content type: basic page er anders laten uitzien dan artikels – Volgens toegangsrol: admin, ingelogden, leden/klanten zien iets anders – Volgens taal – Volgens trefwoord, ... – Mobile themes dank zij integratie met de http://drupal.org/project/mobile_tools module
  • 195. Contexts • Arguments – /taxonomy/term/%term – /forum/%forum – /music/beatles/th • Andere contexts – Node auteur – Node reference
  • 197. Mockups Moderne software voor Mockups – Mockflow: http://www.mockflow.com – Mockingbird: https://gomockingbird.com – Balsamiq: http://balsamiq.com
  • 199. Filosofie achter Display Suite • Centraal beheer van layout van website inhoud • Template bestanden overbodig maken • Focus op gebruiksvriendelijkheid • Gebruik van PHP beperken = betere veiligheid
  • 200. Layout beheer met Drupal core • Mix van template bestanden en Field UI • Nadelen: – Template bestanden zijn niet onderhoudbaar – Field UI is beperkt: • Geen UI om extra velden toe te voegen (vb. titel, auteur) • Geen UI om extra View Modes toe te voegen • Inconsistent: 'Search result' View Mode • Geen gebruik van voorgedefinieerde layouts
  • 201. Layout beheer met DS • Bouwt verder op Field UI – Nieuwe View Modes aanmaken – Voorgedefinieerde layouts aanmaken – Eigen velden toevoegen • Integratie met Views en Panels • Werkt op elke Drupal Entity (Node, gebruiker etc) • Consistente HTML output • Oefening 1: DS aanzetten en Node en Teaser layout wijzigen
  • 202. DS layouts • Standaard: 11 layouts + Panel layouts • Eigen layout in theme: – ds_layouts folder aanmaken – ***.inc en ***.tpl.php bestanden verplicht – ***.css optioneel – Voorbeeld: ds.api.php lijn 356. – Oefening 2: Eigen layout met 3 rijen in theme toevoegen
  • 203. Correct Css'en met DS • Beschikbare classes: Entity, eventueel Content Type, View mode en Groups. Voorbeeld: <div class="node node-article view-mode-teaser"> <div class="group-header"> <h2>Lorem ipsum</h2> </div> <div class="group-middle"> <p>Lorem ipsum.</p> </div> </div> • Zo generiek mogelijk, indien nodig specifieker: .view-mode-teaser .group-header {} .node.view-mode-teaser .group-header {} .node-article.view-mode-teaser .group-header {} • Werk zoveel mogelijk op DS classes ipv HTML van andere modules • Oefening 3: css schrijven voor ?
  • 204. Extras module • Field templates • Contextual links • Regions to block • Page title options • Views Displays • En veel meer!
  • 205. Andere toepassingen • Zoekresultaten • Views slide show met meerdere content types • Oefening 4: slideshow opzetten: custom View mode en voor alle content types instellen.