SlideShare una empresa de Scribd logo
1 de 57
Descargar para leer sin conexión
Best Practice: Joomla
Templating
Hans Kuijpers
TIP 1 - de basis
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 2 of 56
Begin met een basis
via Joomla.org meest recente versie downloaden
installeren op hostingomgeving
handige extensies downloaden en installeren
tof template downloaden en installeren
standaard instellingen wijzigen
accounts aanmaken
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 3 of 56
Begin met een basis
via Joomla.org meest recente versie downloaden
installeren op hostingomgeving
handige extensies downloaden en installeren
tof template downloaden en installeren
standaard instellingen wijzigen
accounts aanmaken
een boel tijd verloren
en nu pas aan de slag
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 4 of 56
Begin met een goede basis
Heb ergens een basis Joomla! site staan
Rol die uit op je lokale ontwikkelomgeving
En ga aan de slag
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 5 of 56
Eenmalig eigen basis opzetten
Investeer eenmalig tijd in een goede basis
Gebruik als kickstart voor ieder template-project
Beheer basis via bijvoorbeeld een github-repo
Maak bibliotheek van overrides, JavaScript, SCSS
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 6 of 56
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 7 of 56
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 8 of 56
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 9 of 56
TIP 2 - automatiseer
waar mogelijk
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 10 of 56
Building tools
Zoveel mogelijk stappen automatiseren
Snel en eenvoudig
Performance verbeteren
Fouten minimaliseren
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 11 of 56
Welke taken?
LESS of SASS compileren naar CSS
SASS source map aanmaken
JavaScript samenvoegen
CSS of JavaScript minifyen
Git commits, pushen en pullen
Afbeeldingen comprimeren
Bestanden kopieren
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 12 of 56
Welke taken?
LESS of SASS compileren naar CSS
SASS source map aanmaken
JavaScript samenvoegen
CSS of JavaScript minifyen
Git commits, pushen en pullen
Afbeeldingen comprimeren
Bestanden kopieren
Bijvoorbeeld met Grunt
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 13 of 56
Grunt task sass compilatie
SCSS => CSS
'use strict';
//
module.exports = {
dist: {
options: {
includePaths: [
require("bourbon").includePaths,
require("bourbon-neat").includePaths,
require("node-normalize-scss").includePaths
]
},
files: {
'<%= paths.template %>/css/style.css': '<%= paths.assets %>/scss/style.scss',
'<%= paths.template %>/css/grid.css': '<%= paths.assets %>/scss/grid.scss',
'<%= paths.template %>/css/font.css': '<%= paths.assets %>/scss/font.scss'
}
}
};
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 14 of 56
TIP 3 - SCSS mixins for
the win
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 15 of 56
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 16 of 56
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 17 of 56
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 18 of 56
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 19 of 56
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 20 of 56
section/_heading.scss
.section {
@include e('heading') {
@include m('light') {
@include heading($quarter-spanish-white);
}
@include m('white') {
@include heading(white);
}
@include m('image') {
@include heading--clipart;
}
}
}
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 21 of 56
@include heading -> mixin heading
@mixin heading($bgcolor: white) {
@include heading--base;
@include arrow-bottom(2.5em, 50, transparent, $bgcolor);
}
@mixin heading--clipart {
@include heading--base;
@include arrow-bottom-clipart(50);
}
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 22 of 56
@include arrow-button -> mixin
arrow-button
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 23 of 56
Met css als resultaat
scss -> css
vendorprefix
minified
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 24 of 56
TIP 4 - de
templateHelper
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 25 of 56
Template - Protostar
126: <!DOCTYPE html>
127: <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
128: <head>
129: <meta name="viewport" content="width=device-width, initial-scale=1.0" />
130: <jdoc:include type="head" />
131: </head>
132: <body class="site <?php echo $option
133: . ' view-' . $view
134: . ($layout ? ' layout-' . $layout : ' no-layout')
135: . ($task ? ' task-' . $task : ' no-task')
136: . ($itemid ? ' itemid-' . $itemid : '')
137: . ($params->get('fluidContainer') ? ' fluid' : '');
138: echo ($this->direction === 'rtl' ? ' rtl' : '');
139:?>">
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 26 of 56
Template - Protostar
126: <!DOCTYPE html>
127: <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>">
128: <head>
129: <meta name="viewport" content="width=device-width, initial-scale=1.0" />
130: <jdoc:include type="head" />
131: </head>
132: <body class="site <?php echo $option
133: . ' view-' . $view
134: . ($layout ? ' layout-' . $layout : ' no-layout')
135: . ($task ? ' task-' . $task : ' no-task')
136: . ($itemid ? ' itemid-' . $itemid : '')
137: . ($params->get('fluidContainer') ? ' fluid' : '');
138: echo ($this->direction === 'rtl' ? ' rtl' : '');
139:?>">
Pas op regel 126 begint de HTML pagina.
Daarvoor alleen maar PHP functies
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 27 of 56
Nadelen
foutgevoelig
geen overzicht
moeilijk herbruikbaar in overrides
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 28 of 56
Nadelen
foutgevoelig
geen overzicht
moeilijk herbruikbaar in overrides
Conflicten gegarandeerd!
(en dus debug-uren)
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 29 of 56
Template - PerfectTemplate
24: <!DOCTYPE html>
25: <html class="html no-js" lang="<?php echo $this->language; ?>" dir="<?php echo $this->directi
on; ?>">
26: <head>
27: <jdoc:include type="head"/>
28: <noscript>
29: <link href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/cs
s/font.css" rel="stylesheet" type="text/css"/>
30: </noscript>
31: </head>
32: <body class="<?php echo PWTTemplateHelper::getBodySuffix(); ?>">
33: <?php echo PWTTemplateHelper::getAnalytics(2,'GTM-XXXXXX')['script']; ?>
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 30 of 56
Template - PerfectTemplate
24: <!DOCTYPE html>
25: <html class="html no-js" lang="<?php echo $this->language; ?>" dir="<?php echo $this->directi
on; ?>">
26: <head>
27: <jdoc:include type="head"/>
28: <noscript>
29: <link href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/cs
s/font.css" rel="stylesheet" type="text/css"/>
30: </noscript>
31: </head>
32: <body class="<?php echo PWTTemplateHelper::getBodySuffix(); ?>">
33: <?php echo PWTTemplateHelper::getAnalytics(2,'GTM-XXXXXX')['script']; ?>
100 regels eerder begint de HTML pagina
De PHP functies zijn verplaatst
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 31 of 56
De eerste 25 regels code
<?php
/*
* @package perfecttemplate
* @copyright Copyright (c) Perfect Web Team / perfectwebteam.nl
* @license GNU General Public License version 3 or later
*/
// No direct access.
defined('_JEXEC') or die;
// Load Perfect Template Helper
require_once JPATH_THEMES . '/' . $this->template . '/helper.php';
require_once JPATH_THEMES . '/' . $this->template . '/html/layouts/render.php';
PWTTemplateHelper::setMetadata();
PWTTemplateHelper::setFavicon();
PWTTemplateHelper::unloadCss();
PWTTemplateHelper::unloadJs();
PWTTemplateHelper::loadCss();
PWTTemplateHelper::loadJs();
PWTTemplateHelper::localstorageFont();
PWTTemplateHelper::ajaxSVG();
?>
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 32 of 56
Bij fouten makkelijk uit te schakelen
<?php
/*
* @package perfecttemplate
* @copyright Copyright (c) Perfect Web Team / perfectwebteam.nl
* @license GNU General Public License version 3 or later
*/
// No direct access.
defined('_JEXEC') or die;
// Load Perfect Template Helper
require_once JPATH_THEMES . '/' . $this->template . '/helper.php';
require_once JPATH_THEMES . '/' . $this->template . '/html/layouts/render.php';
PWTTemplateHelper::setMetadata();
PWTTemplateHelper::setFavicon();
//PWTTemplateHelper::unloadCss();
//PWTTemplateHelper::unloadJs();
//PWTTemplateHelper::loadCss();
//PWTTemplateHelper::loadJs();
//PWTTemplateHelper::localstorageFont();
//PWTTemplateHelper::ajaxSVG();
?>
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 33 of 56
Helper.php - snippet
class PWTTemplateHelper
{
static public function template()
{
return JFactory::getApplication()->getTemplate();
}
static public function loadCss()
{
JFactory::getDocument()->addStyleSheet('templates/' . self::template() .
'/css/style.css');
}
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 34 of 56
Helper.php - snippet
class PWTTemplateHelper
{
static public function template()
{
return JFactory::getApplication()->getTemplate();
}
static public function loadCss()
{
JFactory::getDocument()->addStyleSheet('templates/' . self::template() .
'/css/style.css');
}
Resulteert in
<link href="/templates/perfecttemplate/css/style.css" rel="stylesheet" type="text/css" />
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 35 of 56
Body classes die de weg wijzen
class PWTTemplateHelper
{
static public function getBodySuffix()
{
$classes = array();
$classes[] = 'option-' . self::getPageOption();
$classes[] = 'view-' . self::getPageView();
$classes[] = self::getPageLayout() ? 'layout-' . self::getPageLayout() : 'no-layout';
$classes[] = self::getPageTask() ? 'task-' . self::getPageTask() : 'no-task';
$classes[] = 'itemid-' . self::getItemId();
$classes[] = self::getPageClass();
$classes[] = self::isHome() ? 'path-home' : 'path-' . implode('-',
self::getPath('array'));
$classes[] = 'home-' . (int) self::isHome();
return implode(' ', $classes);
}
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 36 of 56
Body classes die de weg wijzen
class PWTTemplateHelper
{
static public function getBodySuffix()
{
$classes = array();
$classes[] = 'option-' . self::getPageOption();
$classes[] = 'view-' . self::getPageView();
$classes[] = self::getPageLayout() ? 'layout-' . self::getPageLayout() : 'no-layout';
$classes[] = self::getPageTask() ? 'task-' . self::getPageTask() : 'no-task';
$classes[] = 'itemid-' . self::getItemId();
$classes[] = self::getPageClass();
$classes[] = self::isHome() ? 'path-home' : 'path-' . implode('-',
self::getPath('array'));
$classes[] = 'home-' . (int) self::isHome();
return implode(' ', $classes);
}
Resulteert in
<body class="option-com-content view-category layout-blog no-task itemid-130 path-nieuws home-0">
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 37 of 56
Eigen Meta data toevoegen
functies aanmaken in helper.php
functies oproepen in index.php
frontend verversen en bekijk het resultaat
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 38 of 56
Eigen Meta data toevoegen
helper.php
class PWTTemplateHelper
{
static public function setGenerator($generator)
{
JFactory::getDocument()->setGenerator($generator);
}
static public function setMetadata()
{
$doc = JFactory::getDocument();
$doc->setCharset('utf8');
$doc->setMetaData('X-UA-Compatible', 'IE=edge', true);
$doc->setMetaData('viewport', 'width=device-width, initial-scale=1.0');
}
static public function getSitename()
{
return JFactory::getConfig()->get('sitename');
}
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 39 of 56
Eigen Meta data toevoegen
index.php
// Load Perfect Template Helper
require_once JPATH_THEMES . '/' . $this->template . '/helper.php';
PWTTemplateHelper::setMetadata();
PWTTemplateHelper::setGenerator(PWTTemplateHelper::getSitename());
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 40 of 56
Eigen Meta data toevoegen
het resultaat
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="generator" content="Custom Management" />
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 41 of 56
Eigen Meta data toevoegen
het resultaat
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="generator" content="Custom Management" />
Controle over de head
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 42 of 56
TIP 5 - gebruik
JLayout(s)
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 43 of 56
JLayout?, nog even herhalen aub.
manier om (klein stukje) weergave op te bouwen
enkel layout bestand met specifieke output
data variabel meesturen
zit in layouts/joomla
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 44 of 56
Voordelen gebruik JLayout
herbruikbaar door gehele site (template en extensies)
aanpassingen één keer doorvoeren in plaats op diverse plekken
niet langer copy/pasten van code in template overrides
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 45 of 56
Voordelen gebruik JLayout
herbruikbaar door gehele site (template en extensies)
aanpassingen één keer doorvoeren in plaats op diverse plekken
niet langer copy/pasten van code in template overrides
herbruikbaar in verschillende projecten
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 46 of 56
Eigen JLayouts functie
html/layouts/render.php
class Jlayouts
{
public static function render($type, $data = '')
{
$template = JFactory::getApplication()->getTemplate();
$jlayout = new JLayoutFile($type, JPATH_THEMES . '/' . $template . '/html/layouts/templa
te');
return $jlayout->render($data);
}
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 47 of 56
Eigen JLayouts functie
html/layouts/render.php
class Jlayouts
{
public static function render($type, $data = '')
{
$template = JFactory::getApplication()->getTemplate();
$jlayout = new JLayoutFile($type, JPATH_THEMES . '/' . $template . '/html/layouts/templa
te');
return $jlayout->render($data);
}
Zorgt er voor dat eigen JLayouts vanuit html/layouts/template/
opgeroepen kunnen worden.
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 48 of 56
Eigen JLayouts voor datum notatie
toegepast in html/categories/blog_item.php
if ($params->get('show_publish_date')) :
echo JLayoutHelper::render('template.content.create_date', array('date' => $this->item->creat
ed, 'format' => 'DATE_FORMAT_CC1'));
endif;
vraagt om html/layouts/template/content/create_date.php
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 49 of 56
Eigen JLayouts voor datum notatie
toegepast in html/categories/blog_item.php
if ($params->get('show_publish_date')) :
echo JLayoutHelper::render('template.content.create_date', array('date' => $this->item->creat
ed, 'format' => 'DATE_FORMAT_CC1'));
endif;
vraagt om html/layouts/template/content/create_date.php
Datum is taalstring
override in language/overrides/nl-NL-override.ini
DATE_FORMAT_CC1="F Y"
output: maand jaar
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 50 of 56
Eigen JLayouts - inhoud
html/layouts/template/content/create_date.php
<?php
defined('JPATH_BASE') or die;
$date = $displayData['date'];
$class = isset($displayData['class']) ? $displayData['class'] : 'content';
$format = JText::_($displayData['format']);
echo '<span class="' . $class . '__create">';
echo '<time datetime="' . JHtml::_('date', $date, 'c') . '" itemprop = "dateCreated" >';
echo JHtml::_('date', $date, $format);
echo '</time>';
echo '</span>';
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 51 of 56
Eigen JLayouts - inhoud
html/layouts/template/content/create_date.php
<?php
defined('JPATH_BASE') or die;
$date = $displayData['date'];
$class = isset($displayData['class']) ? $displayData['class'] : 'content';
$format = JText::_($displayData['format']);
echo '<span class="' . $class . '__create">';
echo '<time datetime="' . JHtml::_('date', $date, 'c') . '" itemprop = "dateCreated" >';
echo JHtml::_('date', $date, $format);
echo '</time>';
echo '</span>';
Resulteert in
<span class="content__create"><time datetime="2017-02-17T10:31:00+01:00" itemprop="dateCreated">f
ebruari 2017</time></span>
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 52 of 56
Eigen JLayouts - Google Maps
html/layouts/template/blocks/gmap.php
op te roepen via:
<?php echo Jlayouts::render('block-gmap'); ?>
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 53 of 56
Eigen JLayouts - Google Maps
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 54 of 56
Eigen JLayouts - Gmap
Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 55 of 56
Bedankt!
Hans Kuijpers
@hans2103
Best Practice: Joomla! templating

Más contenido relacionado

La actualidad más candente

Drupal Views Cck Hans Rossel
Drupal Views Cck Hans RosselDrupal Views Cck Hans Rossel
Drupal Views Cck Hans Rossel
Hans Rossel
 
Html5 jeugdwerknet
Html5 jeugdwerknetHtml5 jeugdwerknet
Html5 jeugdwerknet
Hans Rossel
 
Drupal 7 Theming
Drupal 7 ThemingDrupal 7 Theming
Drupal 7 Theming
Hans Rossel
 
Magento cursus: theme opzetten & beheren
Magento cursus: theme opzetten & beherenMagento cursus: theme opzetten & beheren
Magento cursus: theme opzetten & beheren
Michel Doens
 
Cursus Zend Framework - 1
Cursus Zend Framework - 1Cursus Zend Framework - 1
Cursus Zend Framework - 1
bartjeukendrup
 

La actualidad más candente (20)

Drupal Views Cck Hans Rossel
Drupal Views Cck Hans RosselDrupal Views Cck Hans Rossel
Drupal Views Cck Hans Rossel
 
Joomla & Bootstrap 3
Joomla & Bootstrap 3Joomla & Bootstrap 3
Joomla & Bootstrap 3
 
Joomladagen 2019 joomla advanced seo
Joomladagen 2019 joomla advanced seoJoomladagen 2019 joomla advanced seo
Joomladagen 2019 joomla advanced seo
 
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
 
Template overrides voor Joomla 3
Template overrides voor Joomla 3Template overrides voor Joomla 3
Template overrides voor Joomla 3
 
Sitemaps uit de doeken gedaan - Nico Bouwman - #jd15nl
Sitemaps uit de doeken gedaan - Nico Bouwman - #jd15nlSitemaps uit de doeken gedaan - Nico Bouwman - #jd15nl
Sitemaps uit de doeken gedaan - Nico Bouwman - #jd15nl
 
Grandma & Joomla - Make Joomla User Friendly
Grandma & Joomla - Make Joomla User FriendlyGrandma & Joomla - Make Joomla User Friendly
Grandma & Joomla - Make Joomla User Friendly
 
Html5 jeugdwerknet
Html5 jeugdwerknetHtml5 jeugdwerknet
Html5 jeugdwerknet
 
Drupal 7 Theming
Drupal 7 ThemingDrupal 7 Theming
Drupal 7 Theming
 
Document added by me on 19 may 2014
Document added by me on 19 may 2014Document added by me on 19 may 2014
Document added by me on 19 may 2014
 
Drupal7 Theming
Drupal7 ThemingDrupal7 Theming
Drupal7 Theming
 
Magento cursus: theme opzetten & beheren
Magento cursus: theme opzetten & beherenMagento cursus: theme opzetten & beheren
Magento cursus: theme opzetten & beheren
 
Les 3 Inct. Training WordPress
Les 3 Inct. Training WordPressLes 3 Inct. Training WordPress
Les 3 Inct. Training WordPress
 
Magento webwinkel starten & optimaliseren
Magento webwinkel starten & optimaliserenMagento webwinkel starten & optimaliseren
Magento webwinkel starten & optimaliseren
 
Online usability - les 2 introductie WordPress
Online usability - les 2 introductie WordPressOnline usability - les 2 introductie WordPress
Online usability - les 2 introductie WordPress
 
Social Media & SEO - Joomla SEO Expert Sessie
Social Media & SEO - Joomla SEO Expert SessieSocial Media & SEO - Joomla SEO Expert Sessie
Social Media & SEO - Joomla SEO Expert Sessie
 
JD14nl Form2content VS Zoo GJ-R
JD14nl Form2content VS Zoo GJ-RJD14nl Form2content VS Zoo GJ-R
JD14nl Form2content VS Zoo GJ-R
 
Cursus Zend Framework - 1
Cursus Zend Framework - 1Cursus Zend Framework - 1
Cursus Zend Framework - 1
 
Les 2 Inct. Training WordPress
Les 2 Inct. Training WordPressLes 2 Inct. Training WordPress
Les 2 Inct. Training WordPress
 
R2H ImageManager en slim omgaan met afbeeldingen in Joomla!
R2H ImageManager en slim omgaan met afbeeldingen in Joomla!R2H ImageManager en slim omgaan met afbeeldingen in Joomla!
R2H ImageManager en slim omgaan met afbeeldingen in Joomla!
 

Similar a Best Practice: Joomla! templating

Talk 02 html5-css3
Talk 02 html5-css3Talk 02 html5-css3
Talk 02 html5-css3
Monkeyshot
 
Lucius Drupal Development Cursus
Lucius Drupal Development CursusLucius Drupal Development Cursus
Lucius Drupal Development Cursus
Luciuswebsystems
 
Javascript Intro
Javascript IntroJavascript Intro
Javascript Intro
Hans Rossel
 
Drupal Uitgebreide Starters Training
Drupal Uitgebreide Starters TrainingDrupal Uitgebreide Starters Training
Drupal Uitgebreide Starters Training
Luciuswebsystems
 

Similar a Best Practice: Joomla! templating (20)

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
 
Front-end Performance in Drupal
Front-end Performance in DrupalFront-end Performance in Drupal
Front-end Performance in Drupal
 
Template overrides - Joomladagen 2010 #jd10nl
Template overrides - Joomladagen 2010 #jd10nlTemplate overrides - Joomladagen 2010 #jd10nl
Template overrides - Joomladagen 2010 #jd10nl
 
Installatie apache, qgis server en lizmap web client
Installatie apache, qgis server en lizmap web clientInstallatie apache, qgis server en lizmap web client
Installatie apache, qgis server en lizmap web client
 
Talk 02 html5-css3
Talk 02 html5-css3Talk 02 html5-css3
Talk 02 html5-css3
 
HTML kort & bondig
HTML kort & bondigHTML kort & bondig
HTML kort & bondig
 
Joomla! gebruiksvriendelijker. 10 tips!
Joomla! gebruiksvriendelijker. 10 tips!Joomla! gebruiksvriendelijker. 10 tips!
Joomla! gebruiksvriendelijker. 10 tips!
 
XPages Introductie
XPages IntroductieXPages Introductie
XPages Introductie
 
Presentatie drupal sass
Presentatie drupal sassPresentatie drupal sass
Presentatie drupal sass
 
Joomla core SEO - Joomla SEO Expert Sessie
Joomla core SEO - Joomla SEO Expert SessieJoomla core SEO - Joomla SEO Expert Sessie
Joomla core SEO - Joomla SEO Expert Sessie
 
WordPress Security
WordPress SecurityWordPress Security
WordPress Security
 
Content Beheer Voor De Avans Open Website
Content Beheer Voor De Avans Open WebsiteContent Beheer Voor De Avans Open Website
Content Beheer Voor De Avans Open Website
 
Drupal introductie voor NCRV-i
Drupal introductie voor NCRV-iDrupal introductie voor NCRV-i
Drupal introductie voor NCRV-i
 
Daarom Joomla! - Makkelijk content publiceren
Daarom Joomla! - Makkelijk content publicerenDaarom Joomla! - Makkelijk content publiceren
Daarom Joomla! - Makkelijk content publiceren
 
Drupal is Traag: handvatten voor een snelle site.
Drupal is Traag: handvatten voor een snelle site.Drupal is Traag: handvatten voor een snelle site.
Drupal is Traag: handvatten voor een snelle site.
 
Lucius Drupal Development Cursus
Lucius Drupal Development CursusLucius Drupal Development Cursus
Lucius Drupal Development Cursus
 
Javascript Intro
Javascript IntroJavascript Intro
Javascript Intro
 
Joomla backend-beheer vereenvoudigen - Joomladagen 2016
Joomla backend-beheer vereenvoudigen - Joomladagen 2016Joomla backend-beheer vereenvoudigen - Joomladagen 2016
Joomla backend-beheer vereenvoudigen - Joomladagen 2016
 
Drupal Uitgebreide Starters Training
Drupal Uitgebreide Starters TrainingDrupal Uitgebreide Starters Training
Drupal Uitgebreide Starters Training
 
Linux command-line-magic-jdnl15
Linux command-line-magic-jdnl15Linux command-line-magic-jdnl15
Linux command-line-magic-jdnl15
 

Más de Hans Kuijpers

Más de Hans Kuijpers (20)

RSForm!pro jug073 maart 2019
RSForm!pro  jug073 maart 2019RSForm!pro  jug073 maart 2019
RSForm!pro jug073 maart 2019
 
Joomla Website optimaliseren - jug073 augustus 2018
Joomla Website optimaliseren - jug073 augustus 2018Joomla Website optimaliseren - jug073 augustus 2018
Joomla Website optimaliseren - jug073 augustus 2018
 
Joomla Custom Fields - the next level
Joomla Custom Fields - the next level Joomla Custom Fields - the next level
Joomla Custom Fields - the next level
 
JD17NL Joomla! Overrides and alternate layouts
JD17NL Joomla! Overrides and alternate layoutsJD17NL Joomla! Overrides and alternate layouts
JD17NL Joomla! Overrides and alternate layouts
 
Maak je website geschikt voor mobiel
Maak je website geschikt voor mobielMaak je website geschikt voor mobiel
Maak je website geschikt voor mobiel
 
Bootstrap 3 in Joomla!
Bootstrap 3 in Joomla!Bootstrap 3 in Joomla!
Bootstrap 3 in Joomla!
 
Google Webmasters Tools
Google Webmasters ToolsGoogle Webmasters Tools
Google Webmasters Tools
 
Google Tag Manager #jd14nl
Google Tag Manager #jd14nlGoogle Tag Manager #jd14nl
Google Tag Manager #jd14nl
 
Social Share Buttons - #jd14nl
Social Share Buttons - #jd14nlSocial Share Buttons - #jd14nl
Social Share Buttons - #jd14nl
 
Site Performance Optimization for Joomla #jwc13
Site Performance Optimization for Joomla #jwc13Site Performance Optimization for Joomla #jwc13
Site Performance Optimization for Joomla #jwc13
 
Rich Snippets in Joomla - #JUG073
Rich Snippets in Joomla - #JUG073Rich Snippets in Joomla - #JUG073
Rich Snippets in Joomla - #JUG073
 
Rich Snippets in Magento product page - #MUG020
Rich Snippets in Magento product page - #MUG020Rich Snippets in Magento product page - #MUG020
Rich Snippets in Magento product page - #MUG020
 
Rich Snippets in Magento product page
Rich Snippets in Magento product pageRich Snippets in Magento product page
Rich Snippets in Magento product page
 
CSS with LESS for #jd13nl
CSS with LESS for #jd13nlCSS with LESS for #jd13nl
CSS with LESS for #jd13nl
 
Site Speed Optimisation for JWC2012
Site Speed Optimisation for JWC2012Site Speed Optimisation for JWC2012
Site Speed Optimisation for JWC2012
 
Form2content case for #JUG073
Form2content case for #JUG073Form2content case for #JUG073
Form2content case for #JUG073
 
Magento Theme - set the basics right - mm12nl
Magento Theme - set the basics right - mm12nlMagento Theme - set the basics right - mm12nl
Magento Theme - set the basics right - mm12nl
 
Google analytics - jd12nl met Byte Internet
Google analytics - jd12nl met Byte InternetGoogle analytics - jd12nl met Byte Internet
Google analytics - jd12nl met Byte Internet
 
Joomla extensies kiezen-jd12nl
Joomla extensies kiezen-jd12nlJoomla extensies kiezen-jd12nl
Joomla extensies kiezen-jd12nl
 
Meet magento 2011-templating
Meet magento 2011-templatingMeet magento 2011-templating
Meet magento 2011-templating
 

Best Practice: Joomla! templating

  • 2. TIP 1 - de basis Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 2 of 56
  • 3. Begin met een basis via Joomla.org meest recente versie downloaden installeren op hostingomgeving handige extensies downloaden en installeren tof template downloaden en installeren standaard instellingen wijzigen accounts aanmaken Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 3 of 56
  • 4. Begin met een basis via Joomla.org meest recente versie downloaden installeren op hostingomgeving handige extensies downloaden en installeren tof template downloaden en installeren standaard instellingen wijzigen accounts aanmaken een boel tijd verloren en nu pas aan de slag Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 4 of 56
  • 5. Begin met een goede basis Heb ergens een basis Joomla! site staan Rol die uit op je lokale ontwikkelomgeving En ga aan de slag Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 5 of 56
  • 6. Eenmalig eigen basis opzetten Investeer eenmalig tijd in een goede basis Gebruik als kickstart voor ieder template-project Beheer basis via bijvoorbeeld een github-repo Maak bibliotheek van overrides, JavaScript, SCSS Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 6 of 56
  • 7. Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 7 of 56
  • 8. Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 8 of 56
  • 9. Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 9 of 56
  • 10. TIP 2 - automatiseer waar mogelijk Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 10 of 56
  • 11. Building tools Zoveel mogelijk stappen automatiseren Snel en eenvoudig Performance verbeteren Fouten minimaliseren Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 11 of 56
  • 12. Welke taken? LESS of SASS compileren naar CSS SASS source map aanmaken JavaScript samenvoegen CSS of JavaScript minifyen Git commits, pushen en pullen Afbeeldingen comprimeren Bestanden kopieren Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 12 of 56
  • 13. Welke taken? LESS of SASS compileren naar CSS SASS source map aanmaken JavaScript samenvoegen CSS of JavaScript minifyen Git commits, pushen en pullen Afbeeldingen comprimeren Bestanden kopieren Bijvoorbeeld met Grunt Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 13 of 56
  • 14. Grunt task sass compilatie SCSS => CSS 'use strict'; // module.exports = { dist: { options: { includePaths: [ require("bourbon").includePaths, require("bourbon-neat").includePaths, require("node-normalize-scss").includePaths ] }, files: { '<%= paths.template %>/css/style.css': '<%= paths.assets %>/scss/style.scss', '<%= paths.template %>/css/grid.css': '<%= paths.assets %>/scss/grid.scss', '<%= paths.template %>/css/font.css': '<%= paths.assets %>/scss/font.scss' } } }; Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 14 of 56
  • 15. TIP 3 - SCSS mixins for the win Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 15 of 56
  • 16. Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 16 of 56
  • 17. Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 17 of 56
  • 18. Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 18 of 56
  • 19. Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 19 of 56
  • 20. Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 20 of 56
  • 21. section/_heading.scss .section { @include e('heading') { @include m('light') { @include heading($quarter-spanish-white); } @include m('white') { @include heading(white); } @include m('image') { @include heading--clipart; } } } Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 21 of 56
  • 22. @include heading -> mixin heading @mixin heading($bgcolor: white) { @include heading--base; @include arrow-bottom(2.5em, 50, transparent, $bgcolor); } @mixin heading--clipart { @include heading--base; @include arrow-bottom-clipart(50); } Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 22 of 56
  • 23. @include arrow-button -> mixin arrow-button Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 23 of 56
  • 24. Met css als resultaat scss -> css vendorprefix minified Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 24 of 56
  • 25. TIP 4 - de templateHelper Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 25 of 56
  • 26. Template - Protostar 126: <!DOCTYPE html> 127: <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> 128: <head> 129: <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 130: <jdoc:include type="head" /> 131: </head> 132: <body class="site <?php echo $option 133: . ' view-' . $view 134: . ($layout ? ' layout-' . $layout : ' no-layout') 135: . ($task ? ' task-' . $task : ' no-task') 136: . ($itemid ? ' itemid-' . $itemid : '') 137: . ($params->get('fluidContainer') ? ' fluid' : ''); 138: echo ($this->direction === 'rtl' ? ' rtl' : ''); 139:?>"> Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 26 of 56
  • 27. Template - Protostar 126: <!DOCTYPE html> 127: <html lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>"> 128: <head> 129: <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 130: <jdoc:include type="head" /> 131: </head> 132: <body class="site <?php echo $option 133: . ' view-' . $view 134: . ($layout ? ' layout-' . $layout : ' no-layout') 135: . ($task ? ' task-' . $task : ' no-task') 136: . ($itemid ? ' itemid-' . $itemid : '') 137: . ($params->get('fluidContainer') ? ' fluid' : ''); 138: echo ($this->direction === 'rtl' ? ' rtl' : ''); 139:?>"> Pas op regel 126 begint de HTML pagina. Daarvoor alleen maar PHP functies Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 27 of 56
  • 28. Nadelen foutgevoelig geen overzicht moeilijk herbruikbaar in overrides Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 28 of 56
  • 29. Nadelen foutgevoelig geen overzicht moeilijk herbruikbaar in overrides Conflicten gegarandeerd! (en dus debug-uren) Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 29 of 56
  • 30. Template - PerfectTemplate 24: <!DOCTYPE html> 25: <html class="html no-js" lang="<?php echo $this->language; ?>" dir="<?php echo $this->directi on; ?>"> 26: <head> 27: <jdoc:include type="head"/> 28: <noscript> 29: <link href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/cs s/font.css" rel="stylesheet" type="text/css"/> 30: </noscript> 31: </head> 32: <body class="<?php echo PWTTemplateHelper::getBodySuffix(); ?>"> 33: <?php echo PWTTemplateHelper::getAnalytics(2,'GTM-XXXXXX')['script']; ?> Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 30 of 56
  • 31. Template - PerfectTemplate 24: <!DOCTYPE html> 25: <html class="html no-js" lang="<?php echo $this->language; ?>" dir="<?php echo $this->directi on; ?>"> 26: <head> 27: <jdoc:include type="head"/> 28: <noscript> 29: <link href="<?php echo $this->baseurl; ?>/templates/<?php echo $this->template; ?>/cs s/font.css" rel="stylesheet" type="text/css"/> 30: </noscript> 31: </head> 32: <body class="<?php echo PWTTemplateHelper::getBodySuffix(); ?>"> 33: <?php echo PWTTemplateHelper::getAnalytics(2,'GTM-XXXXXX')['script']; ?> 100 regels eerder begint de HTML pagina De PHP functies zijn verplaatst Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 31 of 56
  • 32. De eerste 25 regels code <?php /* * @package perfecttemplate * @copyright Copyright (c) Perfect Web Team / perfectwebteam.nl * @license GNU General Public License version 3 or later */ // No direct access. defined('_JEXEC') or die; // Load Perfect Template Helper require_once JPATH_THEMES . '/' . $this->template . '/helper.php'; require_once JPATH_THEMES . '/' . $this->template . '/html/layouts/render.php'; PWTTemplateHelper::setMetadata(); PWTTemplateHelper::setFavicon(); PWTTemplateHelper::unloadCss(); PWTTemplateHelper::unloadJs(); PWTTemplateHelper::loadCss(); PWTTemplateHelper::loadJs(); PWTTemplateHelper::localstorageFont(); PWTTemplateHelper::ajaxSVG(); ?> Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 32 of 56
  • 33. Bij fouten makkelijk uit te schakelen <?php /* * @package perfecttemplate * @copyright Copyright (c) Perfect Web Team / perfectwebteam.nl * @license GNU General Public License version 3 or later */ // No direct access. defined('_JEXEC') or die; // Load Perfect Template Helper require_once JPATH_THEMES . '/' . $this->template . '/helper.php'; require_once JPATH_THEMES . '/' . $this->template . '/html/layouts/render.php'; PWTTemplateHelper::setMetadata(); PWTTemplateHelper::setFavicon(); //PWTTemplateHelper::unloadCss(); //PWTTemplateHelper::unloadJs(); //PWTTemplateHelper::loadCss(); //PWTTemplateHelper::loadJs(); //PWTTemplateHelper::localstorageFont(); //PWTTemplateHelper::ajaxSVG(); ?> Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 33 of 56
  • 34. Helper.php - snippet class PWTTemplateHelper { static public function template() { return JFactory::getApplication()->getTemplate(); } static public function loadCss() { JFactory::getDocument()->addStyleSheet('templates/' . self::template() . '/css/style.css'); } Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 34 of 56
  • 35. Helper.php - snippet class PWTTemplateHelper { static public function template() { return JFactory::getApplication()->getTemplate(); } static public function loadCss() { JFactory::getDocument()->addStyleSheet('templates/' . self::template() . '/css/style.css'); } Resulteert in <link href="/templates/perfecttemplate/css/style.css" rel="stylesheet" type="text/css" /> Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 35 of 56
  • 36. Body classes die de weg wijzen class PWTTemplateHelper { static public function getBodySuffix() { $classes = array(); $classes[] = 'option-' . self::getPageOption(); $classes[] = 'view-' . self::getPageView(); $classes[] = self::getPageLayout() ? 'layout-' . self::getPageLayout() : 'no-layout'; $classes[] = self::getPageTask() ? 'task-' . self::getPageTask() : 'no-task'; $classes[] = 'itemid-' . self::getItemId(); $classes[] = self::getPageClass(); $classes[] = self::isHome() ? 'path-home' : 'path-' . implode('-', self::getPath('array')); $classes[] = 'home-' . (int) self::isHome(); return implode(' ', $classes); } Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 36 of 56
  • 37. Body classes die de weg wijzen class PWTTemplateHelper { static public function getBodySuffix() { $classes = array(); $classes[] = 'option-' . self::getPageOption(); $classes[] = 'view-' . self::getPageView(); $classes[] = self::getPageLayout() ? 'layout-' . self::getPageLayout() : 'no-layout'; $classes[] = self::getPageTask() ? 'task-' . self::getPageTask() : 'no-task'; $classes[] = 'itemid-' . self::getItemId(); $classes[] = self::getPageClass(); $classes[] = self::isHome() ? 'path-home' : 'path-' . implode('-', self::getPath('array')); $classes[] = 'home-' . (int) self::isHome(); return implode(' ', $classes); } Resulteert in <body class="option-com-content view-category layout-blog no-task itemid-130 path-nieuws home-0"> Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 37 of 56
  • 38. Eigen Meta data toevoegen functies aanmaken in helper.php functies oproepen in index.php frontend verversen en bekijk het resultaat Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 38 of 56
  • 39. Eigen Meta data toevoegen helper.php class PWTTemplateHelper { static public function setGenerator($generator) { JFactory::getDocument()->setGenerator($generator); } static public function setMetadata() { $doc = JFactory::getDocument(); $doc->setCharset('utf8'); $doc->setMetaData('X-UA-Compatible', 'IE=edge', true); $doc->setMetaData('viewport', 'width=device-width, initial-scale=1.0'); } static public function getSitename() { return JFactory::getConfig()->get('sitename'); } Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 39 of 56
  • 40. Eigen Meta data toevoegen index.php // Load Perfect Template Helper require_once JPATH_THEMES . '/' . $this->template . '/helper.php'; PWTTemplateHelper::setMetadata(); PWTTemplateHelper::setGenerator(PWTTemplateHelper::getSitename()); Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 40 of 56
  • 41. Eigen Meta data toevoegen het resultaat <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="generator" content="Custom Management" /> Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 41 of 56
  • 42. Eigen Meta data toevoegen het resultaat <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="generator" content="Custom Management" /> Controle over de head Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 42 of 56
  • 43. TIP 5 - gebruik JLayout(s) Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 43 of 56
  • 44. JLayout?, nog even herhalen aub. manier om (klein stukje) weergave op te bouwen enkel layout bestand met specifieke output data variabel meesturen zit in layouts/joomla Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 44 of 56
  • 45. Voordelen gebruik JLayout herbruikbaar door gehele site (template en extensies) aanpassingen één keer doorvoeren in plaats op diverse plekken niet langer copy/pasten van code in template overrides Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 45 of 56
  • 46. Voordelen gebruik JLayout herbruikbaar door gehele site (template en extensies) aanpassingen één keer doorvoeren in plaats op diverse plekken niet langer copy/pasten van code in template overrides herbruikbaar in verschillende projecten Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 46 of 56
  • 47. Eigen JLayouts functie html/layouts/render.php class Jlayouts { public static function render($type, $data = '') { $template = JFactory::getApplication()->getTemplate(); $jlayout = new JLayoutFile($type, JPATH_THEMES . '/' . $template . '/html/layouts/templa te'); return $jlayout->render($data); } Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 47 of 56
  • 48. Eigen JLayouts functie html/layouts/render.php class Jlayouts { public static function render($type, $data = '') { $template = JFactory::getApplication()->getTemplate(); $jlayout = new JLayoutFile($type, JPATH_THEMES . '/' . $template . '/html/layouts/templa te'); return $jlayout->render($data); } Zorgt er voor dat eigen JLayouts vanuit html/layouts/template/ opgeroepen kunnen worden. Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 48 of 56
  • 49. Eigen JLayouts voor datum notatie toegepast in html/categories/blog_item.php if ($params->get('show_publish_date')) : echo JLayoutHelper::render('template.content.create_date', array('date' => $this->item->creat ed, 'format' => 'DATE_FORMAT_CC1')); endif; vraagt om html/layouts/template/content/create_date.php Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 49 of 56
  • 50. Eigen JLayouts voor datum notatie toegepast in html/categories/blog_item.php if ($params->get('show_publish_date')) : echo JLayoutHelper::render('template.content.create_date', array('date' => $this->item->creat ed, 'format' => 'DATE_FORMAT_CC1')); endif; vraagt om html/layouts/template/content/create_date.php Datum is taalstring override in language/overrides/nl-NL-override.ini DATE_FORMAT_CC1="F Y" output: maand jaar Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 50 of 56
  • 51. Eigen JLayouts - inhoud html/layouts/template/content/create_date.php <?php defined('JPATH_BASE') or die; $date = $displayData['date']; $class = isset($displayData['class']) ? $displayData['class'] : 'content'; $format = JText::_($displayData['format']); echo '<span class="' . $class . '__create">'; echo '<time datetime="' . JHtml::_('date', $date, 'c') . '" itemprop = "dateCreated" >'; echo JHtml::_('date', $date, $format); echo '</time>'; echo '</span>'; Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 51 of 56
  • 52. Eigen JLayouts - inhoud html/layouts/template/content/create_date.php <?php defined('JPATH_BASE') or die; $date = $displayData['date']; $class = isset($displayData['class']) ? $displayData['class'] : 'content'; $format = JText::_($displayData['format']); echo '<span class="' . $class . '__create">'; echo '<time datetime="' . JHtml::_('date', $date, 'c') . '" itemprop = "dateCreated" >'; echo JHtml::_('date', $date, $format); echo '</time>'; echo '</span>'; Resulteert in <span class="content__create"><time datetime="2017-02-17T10:31:00+01:00" itemprop="dateCreated">f ebruari 2017</time></span> Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 52 of 56
  • 53. Eigen JLayouts - Google Maps html/layouts/template/blocks/gmap.php op te roepen via: <?php echo Jlayouts::render('block-gmap'); ?> Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 53 of 56
  • 54. Eigen JLayouts - Google Maps Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 54 of 56
  • 55. Eigen JLayouts - Gmap Best Practise: Joomla! templating - Hans Kuijpers - Joomla!dagen 2017 - 55 of 56