SlideShare une entreprise Scribd logo
1  sur  91
Télécharger pour lire hors ligne
Punkt.de - 4. November 2009   Inspiring people to
Fluid Templating              share
Fluid Templating
                 04.11.2009



Sebastian Kurfürst <sebastian@typo3.org>
TYPO3 v4 und v5


                   v4   v5




                             Inspiring people to
Fluid Templating             share
Inspiring people to
Fluid Templating   share
Was ist eine Template Engine?
           Daten
          Data                        Template
          Data




                   Template Engine


                   gerenderte Daten
                        Data
                        Data
                                       Inspiring people to
Fluid Templating                       share
Inspiring people to
Fluid Templating   share
Template Engines heute
Klass. TYPO3
 Templating        Smarty   PHPTAL




                             Inspiring people to
Fluid Templating             share
Template Engines heute

Klassisches TYPO3 Templating
    marker / subpart-basiert
    kein Kontrollfluss
    nicht erweiterbar
    Arbeit mit Arrays oder Objekten schwierig




                                         Inspiring people to
Fluid Templating                         share
Template Engines heute

Klassisches TYPO3 Templating

                   ###CONTENTS###

                     <h2>###TITLE###</h2>
                           Text

                   ###CONTENTS###




                                            Inspiring people to
Fluid Templating                            share
Template Engines heute

Klassisches TYPO3 Templating



      Eine Schleife implementieren
                    Text




                              Inspiring people to
Fluid Templating              share
Template Engines heute

       Klassisches TYPO3 Templating


###CONTENTS###
                           $subEl = getSubpart(“SUBELEMENT“);
  <ul>                                  Text
                           $out = ‘‘;
    ###SUBELEMENT###
                           foreach ($recordList as $record) {
      <li>###TITLE###</li>
                               $out .= substituteMarker($subEl, ‘TITLE‘, $record[‘title‘]);
    ###SUBELEMENT###
                           }
  </ul>
                           return substituteSubpart($template, ‘SUBELEMENT‘, $out);
###CONTENTS###




                                                                 Inspiring people to
       Fluid Templating                                          share
Inspiring people to
Fluid Templating   share
Template Engines heute

Smarty

   <ul>
   {foreach from=$myArray item=foo}
      <li>{$foo}</li>
   {/foreach}
   </ul>




                                      Inspiring people to
Fluid Templating                      share
Template Engines heute

Smarty
    PHP4-basiert
    eigene {...}-Syntax - keine Autocompletion
    Funktionen gehören zum Sprachumfang - keine
    Namespaces
    alle Funktionen eingebaut
    Selbstgeschriebene Funktionen können vom
    Namen her miteinander kollidieren


                                         Inspiring people to
Fluid Templating                         share
Template Engines heute

PHPTAL

<div class="item" tal:repeat="item itemsArray">
  <span tal:condition="item/hasDate" tal:replace="item/
getDate"/>
  <a href="${item/getUrl}" tal:content="item/getTitle"/>
 <p tal:content="value/getContent"/>
</div>




                                      Inspiring people to
Fluid Templating                      share
Template Engines heute

PHPTAL
    well-formed XML, but NOT VALID (no DTD /
    Schema)
    Semantik teilweise unintuitiv
    PHP im template möglich
    Keine autocompletion
    Schwer erweiterbar



                                       Inspiring people to
Fluid Templating                       share
Template Engines heute

Nachteile aktueller Engines
    Nicht vollständig objektorientiert / brechen
    objektorientierte Paradigmen an einigen Stellen
    schwer zu benutzen für nicht-HTML-Templates
    keine Autocompletion in Editoren
    nicht einfach erweiterbar




                                         Inspiring people to
Fluid Templating                         share
Inspiring people to
Fluid Templating   share
Inspiring people to
Fluid Templating   share
Einordnung - v4, v5 -
                   Transition




                                           Inspiring people to
Fluid Templating                           share
Wieso noch eine Template Engine?




                         Inspiring people to
Fluid Templating         share
Ziele von Fluid




                                     Inspiring people to
Fluid Templating                     share
The Zen of
              Templating



simpel   mächtig
                    http://www.sxc.hu/photo/821903
The Zen of
                 Templating



intuitiv   leicht erweiterbar
                        http://www.sxc.hu/photo/821903
simple, elegante
                                                    template engine




http://www.flickr.com/photos/josefstuefer/9699426/
Viele Hilfestellungen
für den Template-Autor
Einfache und
                    saubere
                Erweiterbarkeit


http://www.sxc.hu/photo/338064
Unterstützung vieler
 Ausgabe-Formate
Inspiring people to
Fluid Templating   share
Kern-
                                 konzepte

http://www.sxc.hu/photo/816749
Kernkonzepte

Variablen
$this->view->assign(‘blogTitle’,
$blog->getTitle());


<h1>The name of the blog is:
{blogTitle}</h1>

                           Inspiring people to
Fluid Templating           share
Kernkonzepte

Object Accessors
$this->view->assign(‘blog’, $blog);
<h1>The name of the blog is:
         {blog.title}</h1>
Author: {blog.author}
                     $blog->getAuthor();


                            Inspiring people to
Fluid Templating            share
Kernkonzepte

     ViewHelpers                 Namespace-
                                 Deklaration
     {namespace f=F3FluidViewHelpers}
v5


     <f:link.action action=“someAction“>
        Administration           ViewHelper
     </f:link>                      Aufruf



                                   Inspiring people to
     Fluid Templating              share
Kernkonzepte

     ViewHelpers                 Namespace-
                                 Deklaration
     {namespace f=Tx_Fluid_ViewHelpers}
v4


     <f:link.action action=“someAction“>
        Administration           ViewHelper
     </f:link>                      Aufruf



                                   Inspiring people to
     Fluid Templating              share
Fluid Core enthält keine Ausgabelogik,
     und keine Kontrollstrukturen!
<f:...>

Jeder Tag ist eine
     Klasse!
v4



     {namespace f=Tx_Fluid_ViewHelpers}
             <f:for>...</f:for>
 Tx_Fluid_ViewHelpers_ForViewHelper
v5



      {namespace f=F3FluidViewHelpers}
              <f:for>...</f:for>
     F3FluidViewHelpersForViewHelper
v5



     {namespace f=F3FluidViewHelpers}
     <f:link.action>...</f:link.action>
F3FluidViewHelpersLinkActionViewHelper
Kernkonzepte

Arrays
<f:link.action action=“show“
  arguments=“{blog: blog, name:
‘Hello’}“>
  show posting
</f:link>


                         Inspiring people to
Fluid Templating         share
Kernkonzepte

Grundbestandteile
    Object accessors: {blog.title}
    ViewHelpers: <f:for each=“{blog.posts}“
    as=“post“>...</f:for>
    Arrays




                                         Inspiring people to
Fluid Templating                         share
simple loop




Fortgeschrittene
       Konzepte
Formulare



                   v4           v5




                                     Inspiring people to
Fluid Templating                     share
Fortgeschrittene Konzepte

 Formulare
/**
 * Displays a form for creating a new blog
 *
 * @param F3BlogDomainModelBlog $newBlog A fresh blog object taken as a basis for the rendering
 * @return string An HTML form for creating a new blog
 * @dontvalidate $newBlog
 */
public function newAction(F3BlogDomainModelBlog $newBlog = NULL) {
       $this->view->assign('newBlog', $newBlog);
}

/**
 * Creates a new blog
 *
 * @param F3BlogDomainModelBlog $newBlog A fresh Blog object which has not yet been added to the repository
 * @return void
 */
public function createAction(F3BlogDomainModelBlog $newBlog) {
       $this->blogRepository->add($newBlog);
       $this->pushFlashMessage('Your new blog was created.');
       $this->redirect('index');
}


                                                                                Inspiring people to
 Fluid Templating                                                              share
Fortgeschrittene Konzepte

     Formulare
     <f:form method="post" action="create" object="{newBlog}" name="newBlog">
          <label for="identifier">Identifier<br />
          <f:form.textbox property="identifier" id="identifier" />
          <br />
          <label for="name">Title</label><br />
          <f:form.textbox property="title" id="title" />
          <br />
          <label for="description">Description</label><br />
          <f:form.textarea property="description" rows="2" cols="40"
id="description" />
          <br />
          <f:form.submit value="Create blog" />
     </f:form>
</f:section>

                                                        Inspiring people to
     Fluid Templating                                   share
Fortgeschrittene Konzepte




Code Text




                            Inspiring people to
Fluid Templating            share
Fortgeschrittene Konzepte

 Formulare
/**
 * Displays a form for creating a new blog
 *
 * @param F3BlogDomainModelBlog $newBlog A fresh blog object taken as a basis for the rendering
 * @return string An HTML form for creating a new blog
 * @dontvalidate $newBlog
 */
public function newAction(F3BlogDomainModelBlog $newBlog = NULL) {
       $this->view->assign('newBlog', $newBlog);
}

/**
 * Creates a new blog
 *
 * @param F3BlogDomainModelBlog $newBlog A fresh Blog object which has not yet been added to the repository
 * @return void
 */
public function createAction(F3BlogDomainModelBlog $newBlog) {
       $this->blogRepository->add($newBlog);
       $this->pushFlashMessage('Your new blog was created.');
       $this->redirect('index');
}


                                                                                Inspiring people to
 Fluid Templating                                                              share
Fortgeschrittene Konzepte

 Formulare
/**
 * Displays a form for creating a new blog
 *
 * @param F3BlogDomainModelBlog $newBlog A fresh blog object taken as a basis for the rendering
 * @return string An HTML form for creating a new blog
 * @dontvalidate $newBlog
 */
public function newAction(F3BlogDomainModelBlog $newBlog = NULL) {
       $this->view->assign('newBlog', $newBlog);
}

/**
 * Creates a new blog
 *
 * @param F3BlogDomainModelBlog $newBlog A fresh Blog object which has not yet been added to the repository
 * @return void
 */
public function createAction(F3BlogDomainModelBlog $newBlog) {
       $this->blogRepository->add($newBlog);
       $this->pushFlashMessage('Your new blog was created.');
       $this->redirect('index');
}


                                                                                Inspiring people to
 Fluid Templating                                                              share
Inspiring people to
Fluid Templating   share
Layouts und Partials



                   v4      v5




                                Inspiring people to
Fluid Templating                share
Inspiring people to
Fluid Templating   share
Fortgeschrittene Konzepte

Layouts
<f:layout name="master" />
<f:section name="main">
  <h1> My content</h1>
</f:section>




                            Inspiring people to
Fluid Templating            share
Fortgeschrittene Konzepte

Layouts
<html> ...
<body>
  <f:render section="main" />
</body>




                            Inspiring people to
Fluid Templating            share
Fortgeschrittene Konzepte

Partials
<f:render partial="list"
arguments="{settings: settings}"/>




                            Inspiring people to
Fluid Templating            share
Inspiring people to
Fluid Templating   share
Fortgeschrittene Konzepte

Inline-Notation
<link rel="stylesheet"
href="<f:uri.resource
path='myCss.css' />" />




                            Inspiring people to
Fluid Templating            share
Fortgeschrittene Konzepte

Inline-Notation
<link rel="stylesheet"
href="{f:uri.resource(path:
'myCss.css')}" />




                              Inspiring people to
Fluid Templating              share
Fortgeschrittene Konzepte

Inline-Notation


<f:format.date format="Y-m-d">
{post.date}</f:format.date>
      Kein
   Leerzeichen
     erlaubt!



                            Inspiring people to
Fluid Templating            share
Fortgeschrittene Konzepte

Inline-Notation
<f:format.padding padLength="40">
<f:format.date format="Y-m-d">
{post.date}</f:format.date>
</f:format.padding>


                            Inspiring people to
Fluid Templating            share
Inspiring people to
Fluid Templating   share
Fortgeschrittene Konzepte

Inline-Notation
{post.date
-> f:format.date(format:'Y-m-d')
-> f:format.padding(padLength:40)}




                            Inspiring people to
Fluid Templating            share
XSS-Vorbeugung




                                    Inspiring people to
Fluid Templating                    share
Fortgeschrittene Konzepte

Cross Site Scripting
<h2><?= $post->getTitle() ?></h2>
<p><?= $post->getContents() ?></p>

                            !!!

                                  Inspiring people to
Fluid Templating                  share
Fortgeschrittene Konzepte

Cross Site Scripting
Ruby:
<%= h(...) %>



 Explizit!
                            Inspiring people to
Fluid Templating            share
Fortgeschrittene Konzepte

Cross Site Scripting
<h2>{post.title}</h2>
<p>{post.contents}</p>
                            automatisch
                              escaped




 Implizit!
Fluid Templating                          Inspiring people to
                                          share
Fortgeschrittene Konzepte

Automatische XSS-Vorbeugung
    alle ObjectAccessors, welche nicht in
    Argumenten stehen, werden escaped
    <f:..... foo="{bar}">{something}</f:...>

                         nicht    escaped
                        escaped




                                               Inspiring people to
Fluid Templating                               share
Boolesche Werte




                                     Inspiring people to
Fluid Templating                     share
Fortgeschrittene Konzepte

Conditions
<f:if condition="CONDITION">
</f:if>



{f:if(condition:"CONDITION", then:'...')}


                              Inspiring people to
Fluid Templating              share
Fortgeschrittene Konzepte

Conditions
<f:if condition="CONDITION">
 <f:then>...</f:then>
 <f:else>...</f:else>
</f:if>
{f:if(condition:"CONDITION", then:'...',
else: '...')}
                              Inspiring people to
Fluid Templating              share
Fortgeschrittene Konzepte

Conditions
{booleanValue}
{someValue} == {otherValue}
{someNumber} % 2
{someValue} == {f:viewHelper()}
NICHT: {someValue} == 'String'
                            Inspiring people to
Fluid Templating            share
Fortgeschrittene Konzepte

Conditions
    Boolesche Werte haben immer die Form
    XX Operator YY
    XX / YY ist Object Accessor, Inline Notation, Zahl,
    aber KEIN String.
    Operator ist z.B. >, >=, <, <=, %, !=, ==
    Dies ist immer möglich, wenn Argument vom
    Typ boolean registriert ist



                                            Inspiring people to
Fluid Templating                            share
Fortgeschrittene Konzepte

Standard-ViewHelper
    Kontrollstrukturen
    Formular-Helper
    Format-ViewHelper




                            Inspiring people to
Fluid Templating            share
Fortgeschrittene Konzepte

<f:cObject>
<!-- im Template -->
<f:cObject typoscriptObjectPath="lib.myCounter">{posts.count}</f:cObject>
<!-- oder -->
<f:cObject typoscriptObjectPath="lib.myCounter" data=“{posts.count}“ />
<!-- oder -->
{posts.count->f:cObject(typoScriptObjectPath: 'lib.myCounter')}

<!-- im TypoScript Setup -->
lib.myCounter = TEXT
lib.myCounter {
  current = 1
  wrap = <strong> | </strong>
}


                                                     Inspiring people to
Fluid Templating                                     share
Fortgeschrittene Konzepte

<f:cObject>
<!-- im Template -->
<f:cObject typoscriptObjectPath="lib.myCounter">{post}</f:cObject>
<!-- oder -->
<f:cObject typoscriptObjectPath=“lib.myCounter“ data=“{post}“ />
<!-- oder -->
{post -> f:cObject(typoscriptObjectPath: 'lib.myCounter')}

 <!-- im TypoScript Setup -->
 lib.myCounter = COA
 lib.myCounter {
  10 = TEXT
  10.field = title
  20 = TEXT
  20.field = author
  wrap = <strong> | </strong>
                                                     Inspiring people to
 }
Fluid Templating                                     share
Fortgeschrittene Konzepte

<f:translate>
<f:translate key=“name“ default="Standard" />

{f:translate(key: 'name', default: 'My Name')}

<f:translate key="foo" arguments="{0:post.name,
1:post.author}" />
in der locallang.xml: "%1$s (by %0$s)"




                                           Inspiring people to
Fluid Templating                           share
Fortgeschrittene Konzepte

Zusammenfassung
    Formulare
    Layouts und Partials
    Inline-Notation und Chaining von VHs
    XSS-Vorbeugung
    intuitive Syntax für boolesche Werte
    mächtige Standard-ViewHelper Library



                                           Inspiring people to
Fluid Templating                           share
Eigene ViewHelper




                                  Inspiring people to
Fluid Templating                  share
Eigene ViewHelper

v4   Aufgabe: Gravatar ViewHelper
         soll eine E-Mail-Adresse bekommen, und den
         Gravatar-ViewHelper ausgeben, falls vorhanden.
         Erwartete Ausgabe:
         <img src=“http://www.gravatar.com/avatar/md5
         ($email).jpg“ />




                                             Inspiring people to
     Fluid Templating                        share
Eigene ViewHelper

v4   Aufgabe: Gravatar ViewHelper
         Erwartete Verwendung:

         {namespace blog=Tx_Blog_ViewHelpers}
         <blog:gravatar email=“sebastian@typo3.org“ />




                                            Inspiring people to
     Fluid Templating                       share
Eigene ViewHelper

v4   1. ViewHelper-Skelett anlegen
     class Tx_Blog_ViewHelpers_GravatarViewHelper
       extends Tx_Fluid_Core_AbstractViewHelper {
        public function render() {
           return ‘Hello World‘;
        }
     }




                                           Inspiring people to
     Fluid Templating                      share
Eigene ViewHelper

v4     2. Implementieren!
                                 PHPDoc
                           muss für Validierung
     /**                       existieren.
      * @param string $email The email to render as gravatar
      */
     public function render($email) {
        return ‘http://www.gravatar.com/gravatar/‘ . md5($email);
     }
                                           Alle Methodenparameter
                                       werden automatisch ViewHelper-
                                                 Argumente.




                                                           Inspiring people to
       Fluid Templating                                    share
Inspiring people to
Fluid Templating   share
Fluid intern

                       TemplateView        View Helpers (Tags)
v5           v4     TemplateView       View Helpers (Tags)


     v5 v4                        Fluid Core




                                                Inspiring people to
 Fluid Templating                               share
http://www.sxc.hu/photo/1132907
Autocompletion
Balance
Ressourcen
    Forge-Projekte "Fluid" und "MVC Framework"
    (und dazugehöriger SVN)
    https://svn.typo3.org/TYPO3v4/CoreProjects/
    MVC/ -> Extbase, Fluid (v4), Blog Example,
    Viewhelpertest




                                         Inspiring people to
Fluid Templating                         share
????
   ??
   ??
    ?
 ??
  ?
 ?
inspiring people to share.

Contenu connexe

Tendances

Drupal 8 theming deep dive
Drupal 8 theming deep diveDrupal 8 theming deep dive
Drupal 8 theming deep diveRomain Jarraud
 
One Man Band - Drupal Lightning Talks
One Man Band - Drupal Lightning TalksOne Man Band - Drupal Lightning Talks
One Man Band - Drupal Lightning TalksMark Jarrell
 
Creating Your First WordPress Plugin
Creating Your First WordPress PluginCreating Your First WordPress Plugin
Creating Your First WordPress PluginBrad Williams
 
Introduction to Drupal (7) Theming
Introduction to Drupal (7) ThemingIntroduction to Drupal (7) Theming
Introduction to Drupal (7) ThemingRobert Carr
 
The Way to Theme Enlightenment 2017
The Way to Theme Enlightenment 2017The Way to Theme Enlightenment 2017
The Way to Theme Enlightenment 2017Amanda Giles
 
WordPress Structure and Best Practices
WordPress Structure and Best PracticesWordPress Structure and Best Practices
WordPress Structure and Best Practicesmarkparolisi
 
Introduction to WordPress Theme Development
Introduction to WordPress Theme DevelopmentIntroduction to WordPress Theme Development
Introduction to WordPress Theme DevelopmentSitdhibong Laokok
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third PluginJustin Ryan
 
Twig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC DrupalTwig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC Drupalwebbywe
 
WordPress Developers Israel Meetup #1
WordPress Developers Israel Meetup #1WordPress Developers Israel Meetup #1
WordPress Developers Israel Meetup #1Yoav Farhi
 
NewBCamp09: Turning your design into a WordPress Theme
NewBCamp09: Turning your design into a WordPress ThemeNewBCamp09: Turning your design into a WordPress Theme
NewBCamp09: Turning your design into a WordPress ThemeAdam Darowski
 
WordPress theme development from scratch : ICT MeetUp 2013 Nepal
WordPress theme development from scratch : ICT MeetUp 2013 NepalWordPress theme development from scratch : ICT MeetUp 2013 Nepal
WordPress theme development from scratch : ICT MeetUp 2013 NepalChandra Prakash Thapa
 
<Head> Presentation: Plugging Into Wordpress
<Head> Presentation: Plugging Into Wordpress<Head> Presentation: Plugging Into Wordpress
<Head> Presentation: Plugging Into WordpressMatt Harris
 
Introduction to Module Development (Drupal 7)
Introduction to Module Development (Drupal 7)Introduction to Module Development (Drupal 7)
Introduction to Module Development (Drupal 7)April Sides
 
Cms & wordpress theme development 2011
Cms & wordpress theme development 2011Cms & wordpress theme development 2011
Cms & wordpress theme development 2011Dave Wallace
 
PloneNG: What's new in Plone 4.2, 4.3, and beyond
PloneNG: What's new in Plone 4.2, 4.3, and beyondPloneNG: What's new in Plone 4.2, 4.3, and beyond
PloneNG: What's new in Plone 4.2, 4.3, and beyondDavid Glick
 
Childthemes ottawa-word camp-1919
Childthemes ottawa-word camp-1919Childthemes ottawa-word camp-1919
Childthemes ottawa-word camp-1919Paul Bearne
 
Making your Drupal fly with Apache SOLR
Making your Drupal fly with Apache SOLRMaking your Drupal fly with Apache SOLR
Making your Drupal fly with Apache SOLRExove
 

Tendances (20)

Drupal 8 theming deep dive
Drupal 8 theming deep diveDrupal 8 theming deep dive
Drupal 8 theming deep dive
 
One Man Band - Drupal Lightning Talks
One Man Band - Drupal Lightning TalksOne Man Band - Drupal Lightning Talks
One Man Band - Drupal Lightning Talks
 
Creating Your First WordPress Plugin
Creating Your First WordPress PluginCreating Your First WordPress Plugin
Creating Your First WordPress Plugin
 
Rebrand WordPress Admin
Rebrand WordPress AdminRebrand WordPress Admin
Rebrand WordPress Admin
 
Introduction to Drupal (7) Theming
Introduction to Drupal (7) ThemingIntroduction to Drupal (7) Theming
Introduction to Drupal (7) Theming
 
The Way to Theme Enlightenment 2017
The Way to Theme Enlightenment 2017The Way to Theme Enlightenment 2017
The Way to Theme Enlightenment 2017
 
WordPress Structure and Best Practices
WordPress Structure and Best PracticesWordPress Structure and Best Practices
WordPress Structure and Best Practices
 
Drupal Theme Development
Drupal Theme DevelopmentDrupal Theme Development
Drupal Theme Development
 
Introduction to WordPress Theme Development
Introduction to WordPress Theme DevelopmentIntroduction to WordPress Theme Development
Introduction to WordPress Theme Development
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin
 
Twig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC DrupalTwig for Drupal 8 and PHP | Presented at OC Drupal
Twig for Drupal 8 and PHP | Presented at OC Drupal
 
WordPress Developers Israel Meetup #1
WordPress Developers Israel Meetup #1WordPress Developers Israel Meetup #1
WordPress Developers Israel Meetup #1
 
NewBCamp09: Turning your design into a WordPress Theme
NewBCamp09: Turning your design into a WordPress ThemeNewBCamp09: Turning your design into a WordPress Theme
NewBCamp09: Turning your design into a WordPress Theme
 
WordPress theme development from scratch : ICT MeetUp 2013 Nepal
WordPress theme development from scratch : ICT MeetUp 2013 NepalWordPress theme development from scratch : ICT MeetUp 2013 Nepal
WordPress theme development from scratch : ICT MeetUp 2013 Nepal
 
<Head> Presentation: Plugging Into Wordpress
<Head> Presentation: Plugging Into Wordpress<Head> Presentation: Plugging Into Wordpress
<Head> Presentation: Plugging Into Wordpress
 
Introduction to Module Development (Drupal 7)
Introduction to Module Development (Drupal 7)Introduction to Module Development (Drupal 7)
Introduction to Module Development (Drupal 7)
 
Cms & wordpress theme development 2011
Cms & wordpress theme development 2011Cms & wordpress theme development 2011
Cms & wordpress theme development 2011
 
PloneNG: What's new in Plone 4.2, 4.3, and beyond
PloneNG: What's new in Plone 4.2, 4.3, and beyondPloneNG: What's new in Plone 4.2, 4.3, and beyond
PloneNG: What's new in Plone 4.2, 4.3, and beyond
 
Childthemes ottawa-word camp-1919
Childthemes ottawa-word camp-1919Childthemes ottawa-word camp-1919
Childthemes ottawa-word camp-1919
 
Making your Drupal fly with Apache SOLR
Making your Drupal fly with Apache SOLRMaking your Drupal fly with Apache SOLR
Making your Drupal fly with Apache SOLR
 

En vedette

MED312 Introduction and twitter signup - What Is Web2Point0
MED312 Introduction and twitter signup - What Is Web2Point0MED312 Introduction and twitter signup - What Is Web2Point0
MED312 Introduction and twitter signup - What Is Web2Point0_
 
MED316 - Introduction and Twitter signup
MED316 - Introduction and Twitter signupMED316 - Introduction and Twitter signup
MED316 - Introduction and Twitter signup_
 
MED316 - Mobile Phone As Camera And Screen - Viral Videos
MED316 - Mobile Phone As Camera And Screen - Viral VideosMED316 - Mobile Phone As Camera And Screen - Viral Videos
MED316 - Mobile Phone As Camera And Screen - Viral Videos_
 
Taya - Day cap dien so 1 Taiwan
Taya - Day cap dien so 1 TaiwanTaya - Day cap dien so 1 Taiwan
Taya - Day cap dien so 1 TaiwanKB ELECTRIC
 
13208268 pss7
13208268 pss713208268 pss7
13208268 pss713208268
 
MED306 introduction
MED306 introductionMED306 introduction
MED306 introduction_
 
MED306 Transmedia Narratives
MED306 Transmedia NarrativesMED306 Transmedia Narratives
MED306 Transmedia Narratives_
 
091516 new media cafe
091516 new media cafe091516 new media cafe
091516 new media cafeNPLUS
 

En vedette (8)

MED312 Introduction and twitter signup - What Is Web2Point0
MED312 Introduction and twitter signup - What Is Web2Point0MED312 Introduction and twitter signup - What Is Web2Point0
MED312 Introduction and twitter signup - What Is Web2Point0
 
MED316 - Introduction and Twitter signup
MED316 - Introduction and Twitter signupMED316 - Introduction and Twitter signup
MED316 - Introduction and Twitter signup
 
MED316 - Mobile Phone As Camera And Screen - Viral Videos
MED316 - Mobile Phone As Camera And Screen - Viral VideosMED316 - Mobile Phone As Camera And Screen - Viral Videos
MED316 - Mobile Phone As Camera And Screen - Viral Videos
 
Taya - Day cap dien so 1 Taiwan
Taya - Day cap dien so 1 TaiwanTaya - Day cap dien so 1 Taiwan
Taya - Day cap dien so 1 Taiwan
 
13208268 pss7
13208268 pss713208268 pss7
13208268 pss7
 
MED306 introduction
MED306 introductionMED306 introduction
MED306 introduction
 
MED306 Transmedia Narratives
MED306 Transmedia NarrativesMED306 Transmedia Narratives
MED306 Transmedia Narratives
 
091516 new media cafe
091516 new media cafe091516 new media cafe
091516 new media cafe
 

Similaire à Schulung Fluid Templating

Fluid - Templating for professionals - T3CON09
Fluid - Templating for professionals - T3CON09Fluid - Templating for professionals - T3CON09
Fluid - Templating for professionals - T3CON09Sebastian Kurfürst
 
Fluent Development with FLOW3
Fluent Development with FLOW3Fluent Development with FLOW3
Fluent Development with FLOW3Robert Lemke
 
EECI 2010 - The Power of ExpressionEngine's Dynamic Templates
EECI 2010 - The Power of ExpressionEngine's Dynamic TemplatesEECI 2010 - The Power of ExpressionEngine's Dynamic Templates
EECI 2010 - The Power of ExpressionEngine's Dynamic TemplatesFortySeven Media
 
T3CON11 - Extreme Fluid - Patrick Lobacher typovision
T3CON11 - Extreme Fluid - Patrick Lobacher typovision T3CON11 - Extreme Fluid - Patrick Lobacher typovision
T3CON11 - Extreme Fluid - Patrick Lobacher typovision die.agilen GmbH
 
RESTful API development in Laravel 4 - Christopher Pecoraro
RESTful API development in Laravel 4 - Christopher PecoraroRESTful API development in Laravel 4 - Christopher Pecoraro
RESTful API development in Laravel 4 - Christopher PecoraroChristopher Pecoraro
 
Web Development with Sinatra
Web Development with SinatraWeb Development with Sinatra
Web Development with SinatraBob Nadler, Jr.
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to TornadoGavin Roy
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial之宇 趙
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkBo-Yi Wu
 
Zen and the Art of Claroline Module Development
Zen and the Art of Claroline Module DevelopmentZen and the Art of Claroline Module Development
Zen and the Art of Claroline Module DevelopmentClaroline
 
Remixing Confluence with Speakeasy - AtlasCamp 2011
Remixing Confluence with Speakeasy - AtlasCamp 2011Remixing Confluence with Speakeasy - AtlasCamp 2011
Remixing Confluence with Speakeasy - AtlasCamp 2011Atlassian
 
Staging Drupal: Change Management Strategies for Drupal
Staging Drupal: Change Management Strategies for DrupalStaging Drupal: Change Management Strategies for Drupal
Staging Drupal: Change Management Strategies for DrupalErich Beyrent
 
Staging Drupal: Change Management Strategies for Drupal
Staging Drupal: Change Management Strategies for DrupalStaging Drupal: Change Management Strategies for Drupal
Staging Drupal: Change Management Strategies for DrupalErich Beyrent
 
Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...
Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...
Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...LEDC 2016
 
Migrate yourself. code -> module -> mind
Migrate yourself. code -> module -> mindMigrate yourself. code -> module -> mind
Migrate yourself. code -> module -> mindValentine Matsveiko
 
Expression Engine Designer
Expression Engine   DesignerExpression Engine   Designer
Expression Engine DesignerMatias
 

Similaire à Schulung Fluid Templating (20)

Fluid - Templating for professionals - T3CON09
Fluid - Templating for professionals - T3CON09Fluid - Templating for professionals - T3CON09
Fluid - Templating for professionals - T3CON09
 
Fluid - The Zen of Templating
Fluid - The Zen of TemplatingFluid - The Zen of Templating
Fluid - The Zen of Templating
 
Fluent Development with FLOW3
Fluent Development with FLOW3Fluent Development with FLOW3
Fluent Development with FLOW3
 
EECI 2010 - The Power of ExpressionEngine's Dynamic Templates
EECI 2010 - The Power of ExpressionEngine's Dynamic TemplatesEECI 2010 - The Power of ExpressionEngine's Dynamic Templates
EECI 2010 - The Power of ExpressionEngine's Dynamic Templates
 
Kickass
KickassKickass
Kickass
 
T3CON11 - Extreme Fluid - Patrick Lobacher typovision
T3CON11 - Extreme Fluid - Patrick Lobacher typovision T3CON11 - Extreme Fluid - Patrick Lobacher typovision
T3CON11 - Extreme Fluid - Patrick Lobacher typovision
 
RESTful API development in Laravel 4 - Christopher Pecoraro
RESTful API development in Laravel 4 - Christopher PecoraroRESTful API development in Laravel 4 - Christopher Pecoraro
RESTful API development in Laravel 4 - Christopher Pecoraro
 
Web Development with Sinatra
Web Development with SinatraWeb Development with Sinatra
Web Development with Sinatra
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to Tornado
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
 
Atomic design
Atomic designAtomic design
Atomic design
 
MVC for TYPO3 4.3 with extbase
MVC for TYPO3 4.3 with extbaseMVC for TYPO3 4.3 with extbase
MVC for TYPO3 4.3 with extbase
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC Framework
 
Zen and the Art of Claroline Module Development
Zen and the Art of Claroline Module DevelopmentZen and the Art of Claroline Module Development
Zen and the Art of Claroline Module Development
 
Remixing Confluence with Speakeasy - AtlasCamp 2011
Remixing Confluence with Speakeasy - AtlasCamp 2011Remixing Confluence with Speakeasy - AtlasCamp 2011
Remixing Confluence with Speakeasy - AtlasCamp 2011
 
Staging Drupal: Change Management Strategies for Drupal
Staging Drupal: Change Management Strategies for DrupalStaging Drupal: Change Management Strategies for Drupal
Staging Drupal: Change Management Strategies for Drupal
 
Staging Drupal: Change Management Strategies for Drupal
Staging Drupal: Change Management Strategies for DrupalStaging Drupal: Change Management Strategies for Drupal
Staging Drupal: Change Management Strategies for Drupal
 
Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...
Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...
Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...
 
Migrate yourself. code -> module -> mind
Migrate yourself. code -> module -> mindMigrate yourself. code -> module -> mind
Migrate yourself. code -> module -> mind
 
Expression Engine Designer
Expression Engine   DesignerExpression Engine   Designer
Expression Engine Designer
 

Plus de Sebastian Kurfürst

The Current State of TYPO3 Phoenix -- T3CON11
The Current State of TYPO3 Phoenix -- T3CON11The Current State of TYPO3 Phoenix -- T3CON11
The Current State of TYPO3 Phoenix -- T3CON11Sebastian Kurfürst
 
Workshop Extension-Entwicklung mit Extbase und Fluid
Workshop Extension-Entwicklung mit Extbase und FluidWorkshop Extension-Entwicklung mit Extbase und Fluid
Workshop Extension-Entwicklung mit Extbase und FluidSebastian Kurfürst
 
FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
FLOW3 - der aktuelle Stand. TYPO3 Usergroup DresdenFLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
FLOW3 - der aktuelle Stand. TYPO3 Usergroup DresdenSebastian Kurfürst
 
Continuous Integration at T3CON08
Continuous Integration at T3CON08Continuous Integration at T3CON08
Continuous Integration at T3CON08Sebastian Kurfürst
 

Plus de Sebastian Kurfürst (7)

The Current State of TYPO3 Phoenix -- T3CON11
The Current State of TYPO3 Phoenix -- T3CON11The Current State of TYPO3 Phoenix -- T3CON11
The Current State of TYPO3 Phoenix -- T3CON11
 
FLOW3 Goes Semantic
FLOW3 Goes SemanticFLOW3 Goes Semantic
FLOW3 Goes Semantic
 
Advanced Fluid
Advanced FluidAdvanced Fluid
Advanced Fluid
 
Fluid for Designers
Fluid for DesignersFluid for Designers
Fluid for Designers
 
Workshop Extension-Entwicklung mit Extbase und Fluid
Workshop Extension-Entwicklung mit Extbase und FluidWorkshop Extension-Entwicklung mit Extbase und Fluid
Workshop Extension-Entwicklung mit Extbase und Fluid
 
FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
FLOW3 - der aktuelle Stand. TYPO3 Usergroup DresdenFLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
FLOW3 - der aktuelle Stand. TYPO3 Usergroup Dresden
 
Continuous Integration at T3CON08
Continuous Integration at T3CON08Continuous Integration at T3CON08
Continuous Integration at T3CON08
 

Dernier

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 

Dernier (20)

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 

Schulung Fluid Templating