Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

Theme+

CSS und JavaScript extrem! …und noch ein bisschen mehr…

Contao Konferenz 2012 InfinitySoft

Vorwort

Diese Präsentation bezieht sich auf Theme+ Version 3.

Die meisten Angaben sind jedoch ebenso für
Theme+ Version 2 gültig.

Diese Präsentation kann jederzeit online unter
www.themeplus.de angeschaut werden.

Diese Präsentation wurde auf der
Contao Konferenz 2012 vorgetragen.

Creative Commons Lizenzvertrag
Diese Präsentation von InfinitySoft steht unter einer Creative Commons Namensnennung-Weitergabe unter gleichen Bedingungen 3.0 Deutschland Lizenz.

Impressum

Diese Präsentation ist Teil des Online Angebots von

InfinitySoft

Alle Details finden Sie hier: www.infinitysoft.de/impressum.html

Diese Präsentation wurde ursprünglich mit impress.js erstellt und später auf jmpress.js portiert.

Inhaltsverzeichnis

  1. Über Theme+
    • Was ist Theme+ • Idee & Geschichte
    • Was kann Theme+ • Funktionen
  2. Theme+ im Einsatz
    • Installation
    • Variablen
    • Dateien
    • Zuweisen von Dateien
    • Minimierung und Komprimierung
    • LessCSS Support
    • Bilder in CSS einbetten
    • Was man noch wissen sollte?!
  3. Theme+ für Template Entwickler
    • Insert-Tags
    • Dateien und Snippets im Template definieren
    • Zusätzliche globale Variablen
  4. Optimierung
    • Automatische gzip Komprimierung
    • Framework Wrapper
    • JavaScript Load Blocking verhindern
    • JavaScript Execution Blocking verhindern
  5. API für Entwickler
    • Die Klassen
    • Dateien und Snipptes im Template einbinden
    • Verfügbare HOOKs

Über Theme+

Was ist Theme+?

2

Über Theme+

Was ist Theme+?

Über Theme+

Die Idee

4

Über Theme+

Die Idee

Über Theme+

Die Entstehungsgeschichte

6

Über Theme+

Die Entstehungsgeschichte

Theme+ ist der Nachfolger von layout_additional_sources.

Historie

Über Theme+

Funktionen

8

Über Theme+

Funktionen

9

Über Theme+

Funktionen

10

Über Theme+

Funktionen

11

Über Theme+

Funktionen

Theme+ im Einsatz

Installation

13

Theme+ im Einsatz

Installation

14
15

Theme+ im Einsatz

Variablen

17

Theme+ im Einsatz

Variablen

18

Theme+ im Einsatz

Dateien

20

Theme+ im Einsatz

Dateien

21
22
23
24
25
26

Theme+ im Einsatz

Zuweisen von Dateien

28

Theme+ im Einsatz

Zuweisen von Dateien

29
30
31
32
33
34
35

Theme+ im Einsatz

Minimierung und Komprimierung

37

Theme+ im Einsatz

Minimierung und Komprimierung

38

Theme+ im Einsatz

LessCSS Support

40

Theme+ im Einsatz

LessCSS Support

41

Theme+ im Einsatz

LessCSS Syntax (Details siehe lesscss.org)

section {
  background: #000;
  padding: 20px;
  border-radius: 10px;

  article {
    background: #fff;

    .blue {
      color: #00f;
    }
  }
}
42
43

Theme+ im Einsatz

LessCSS Support

Die Erweiterung phpless-extension erweitert die Funktion des phpless Compiler um automatisches hinzufügen von Browser Prefixen und fügt eine Hilfsfunktionen hinzu, z.B.:

.verlauf {
  gradient: #000000 10% #ffffff 90%;
}

Theme+ im Einsatz

Bilder in CSS einbetten

45

Theme+ im Einsatz

Bilder in CSS einbetten

46

Theme+ im Einsatz

Was man noch wissen sollte?!

48

Theme+ im Einsatz

Theme+ kompiliert alle Dateien!

49

Theme+ im Einsatz

Bekannte Probleme

50

Theme+ im Einsatz

Entwicklermodus!

51
52
53
54

Theme+ für Template Entwickler

56

Theme+ für Template Entwickler

Insert-Tags

{{include_theme_file::ID}}

Bindet die Datei mit der ID als externe Referenz ein (link/script Tag).

{{include_theme_file::path/to/file.css|js}}

Bindet die Datei path/to/file.css|js als externe Referenz ein (link/script Tag).

Ursprünglich in LAS:

{{insert_additional_sources::*}}
57

Theme+ für Template Entwickler

Insert-Tags

{{embed_theme_file::ID}}

Bettet die Datei mit der ID in die Seite ein (style/script Tag).

{{embed_theme_file::path/to/file.css|js}}

Bettet die Datei path/to/file.css|js in die Seite ein (style/script Tag).

Ursprünglich in LAS:

{{include_additional_sources::*}}
58

Theme+ für Template Entwickler

Dateien und Snippets im Template definieren

<?php
$objFile = new CssCode('body {
  font-family: Verdana, sans;
}', 'BodyFont');

$GLOBALS['TL_CSS'][] = $objFile;
?>

Das funktioniert auch Analog mit den anderen Klassen (sie API für Entwickler).

59

Theme+ für Template Entwickler

Zusätzliche globale Variablen

$GLOBALS['TL_JAVASCRIPT_BODY'], JavaScripts die geziehlt im <body> anstatt im <head> eingefügt werden sollen.

<?php
$objFile = new LocalJavaScriptFile('tl_files/scripts/script.js');

$GLOBALS['TL_JAVASCRIPT_BODY'][] = $objFile;
?>
60

Theme+ für Template Entwickler

Zusätzliche globale Variablen

$GLOBALS['TL_JAVASCRIPT_CODE_BODY'], JavaScript Code der geziehlt im <body> anstatt im <head> eingefügt werden sollen.

<?php
$GLOBALS['TL_JAVASCRIPT_CODE_BODY'][] = 'alert("Happy new year?!");';
?>

Optimierung

62

Optimierung

63

Optimierung

Automatische gzip Komprimierung

Ladezeit von CSS und JavaScript Dateien ohne höhere Systemlast.

Contao 2.10+ setzt auf mod_deflate.

64
65
66

Optimierung

Automatische gzip Komprimierung

Benötigt Anpassung der .htaccess Datei.

##
# If you cannot use mod_deflate, uncomment the
# following lines to load a compressed .gz version
# of the bigger Contao JavaScript and CSS files.
##
AddEncoding gzip .gz
<FilesMatch "\.js\.gz$">
  AddType "text/javascript" .gz
</FilesMatch>
<FilesMatch "\.css\.gz$">
  AddType "text/css" .gz
</FilesMatch>
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{REQUEST_FILENAME} \.(js|css)$
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz [QSA,L]
67

Optimierung

Framework Wrapper

Ermöglicht den (nahezu) konfliktlosen Einsatz mehrerer Frameworks parallel.

68
69

Optimierung

Framework Wrapper

MooTools

(function($, $$){
	// Original file content
})(document.id, document.search);

jQuery

(function($) {
	// Original file content
})(jQuery);
70

Optimierung

JavaScript Load Blocking verhindern

JavaScripts vom HEAD an das Ende der Seite verschieben.

Verhindert Blockieren des Seitenaufbaus beim laden der JavaScript Dateien.

71
72
73

Optimierung

Position im HEAD

<html>
  <head>
    …
    <script src="script.js">
      </script>
  </head>
  <body>
    …
  </body>
</html>
74

Optimierung

Position am Ende des BODY

<html>
  <head>
    …
  </head>
  <body>
    …
    <script src="script.js">
      </script>
  </body>
</html>
75

Optimierung

JavaScript Execution Blocking verhindern

JavaScripts werden asynchron nachgeladen.

Verhindert Blockieren des Seitenaufbaus beim ausführen der JavaScript Dateien.

76
77
78
79

API für Entwickler

81

API für Entwickler

82

API für Entwickler

Klassenhierarchie

83

API für Entwickler

Klassen für lokale Dateien

84

API für Entwickler

LocalThemePlusFile

abstract class LocalThemePlusFile
    extends ThemePlusFile {
  public function __construct($strFile);

  public function getOriginFile();
  public function getFile();

  public function setAggregation($strAggregation);
  public function getAggregation();

  public function setAggregationScope($strAggregationScope);
  public function getAggregationScope();

  public function setTheme(Database_Result $objTheme);
  public function getTheme();

  public function isAggregateable();

  public function setCc($strCc);
  public function getCc();

  public function getEmbeddedHtml($blnLazy = false);
  public function getIncludeHtml($blnLazy = false);
}
85

API für Entwickler

LocalCssFile

class LocalCssFile
    extends LocalThemePlusFile
    implements CssFile {
  public function setMedia($strMedia);
  public function getMedia();

  public function setAbsolutizePage($objAbsolutizePage);
  public function getAbsolutizePage();
}
86

API für Entwickler

LocalJavaScriptFile

class LocalJavaScriptFile
    extends LocalThemePlusFile
    implements JavaScriptFile {
  const JQUERY = 'jquery';
  const MOOTOOLS = 'mootools';

  public function setPosition($strPosition);
  public function getPosition();

  public function setFrameworkContext($strFrameworkContext);
  public function getFrameworkContext();
}
87

API für Entwickler

Klassen für externe Dateien

88

API für Entwickler

ExternalThemePlusFile

abstract class ExternalThemePlusFile
    extends ThemePlusFile {
  public function __construct($strUrl);

  public function getUrl()

  public function setCc($strCc);
  public function getCc();

  public function getEmbeddedHtml($blnLazy = false);
  public function getIncludeHtml($blnLazy = false);
}
89

API für Entwickler

ExternalCssFile

class ExternalCssFile
    extends ExternalThemePlusFile
    implements CssFile {
  public function setMedia($strMedia);
  public function getMedia();
}
90

API für Entwickler

ExternalJavaScriptFile

class ExternalJavaScriptFile
    extends ExternalThemePlusFile
    implements JavaScriptFile {
  public function setPosition($strPosition);
  public function getPosition();
}
91

API für Entwickler

Klassen für Code Snippets

92

API für Entwickler

CssCode

class CssCode
    extends LocalCssFile {
  public function __construct($strCode, $strReference = 'undefined');

  public function getCode();
}
93

API für Entwickler

JavaScriptCode

class JavaScriptCode
    extends LocalJavaScriptFile {
  public function __construct($strCode, $strReference = 'undefined');

  public function getCode();
}
94

API für Entwickler

Klassen für Aggregation

95

API für Entwickler

FileAggregator

abstract class FileAggregator
    extends LocalThemePlusFile {
  public function __construct();
}
96

API für Entwickler

CssFileAggregator

class CssFileAggregator
    extends FileAggregator {
  public function add(LocalCssFile $objFile);
}
97

API für Entwickler

JavaScriptFileAggregator

class JavaScriptFileAggregator
    extends FileAggregator {
  public function add(LocalJavaScriptFile $objFile);
}
98

API für Entwickler

HOOK $GLOBALS['TL_HOOKS']['generateFrameworkCss']

Kann zum Generieren des Framework CSS Codes genutzt werden (Definition von linker/rechter Spalte).

<?php
$GLOBALS['TL_HOOKS']['generateFrameworkCss'][] =
    array('MyClass', 'hookGenerateFrameworkCss');

class MyClass
{
  public function hookGenerateFrameworkCss($objPage, $objLayout, $objPageRegular)
  {
    // generate a new css or return false
    return false;
  }
}
?>
99

API für Entwickler

HOOK $GLOBALS['TL_HOOKS']['renderVariable']

Rendert eine Variable und gibt den Code zurück mit dem die Variable ersetzt wird.

<?php
$GLOBALS['TL_HOOKS']['renderVariable'][] =
    array('MyClass', 'hookRenderVariable');

class MyClass
{
  public function hookRenderVariable($arrRow, $strPath)
  {
    // generate a new code or return false
    return false;
  }
}
?>
100

API für Entwickler

HOOK $GLOBALS['TL_HOOKS']['replaceUndefinedVariable']

Wird aufgerufen wenn eine Variable nicht gefunden wurde.

<?php
$GLOBALS['TL_HOOKS']['replaceUndefinedVariable'][] =
    array('MyClass', 'hookReplaceUndefinedVariable');

class MyClass
{
  public function hookReplaceUndefinedVariable($strName)
  {
    // return the missing variable content or false
    return false;
  }
}
?>

Das wars…

Irgendwann hat alles mal ein Ende und so auch diese Präsentation.

;-)

Für mehr Infos, schaut doch mal auf unserer Website vorbei und folgt uns auf Google+, Facebook oder Twitter. Oder schaut in das Forum zu Theme+.

Fork me on GitHub