SlideShare a Scribd company logo
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.

More Related Content

What's hot

Drupal 8 theming deep dive
Drupal 8 theming deep diveDrupal 8 theming deep dive
Drupal 8 theming deep dive
Romain Jarraud
 
One Man Band - Drupal Lightning Talks
One Man Band - Drupal Lightning TalksOne Man Band - Drupal Lightning Talks
One Man Band - Drupal Lightning Talks
Mark Jarrell
 
Creating Your First WordPress Plugin
Creating Your First WordPress PluginCreating Your First WordPress Plugin
Creating Your First WordPress Plugin
Brad Williams
 
Rebrand WordPress Admin
Rebrand WordPress AdminRebrand WordPress Admin
Rebrand WordPress Admin
Chandra Prakash Thapa
 
Introduction to Drupal (7) Theming
Introduction to Drupal (7) ThemingIntroduction to Drupal (7) Theming
Introduction to Drupal (7) Theming
Robert Carr
 
The Way to Theme Enlightenment 2017
The Way to Theme Enlightenment 2017The Way to Theme Enlightenment 2017
The Way to Theme Enlightenment 2017
Amanda Giles
 
WordPress Structure and Best Practices
WordPress Structure and Best PracticesWordPress Structure and Best Practices
WordPress Structure and Best Practices
markparolisi
 
Drupal Theme Development
Drupal Theme DevelopmentDrupal Theme Development
Drupal Theme Development
Web Development Montreal
 
Introduction to WordPress Theme Development
Introduction to WordPress Theme DevelopmentIntroduction to WordPress Theme Development
Introduction to WordPress Theme Development
Sitdhibong Laokok
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin
Justin 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 Drupal
webbywe
 
WordPress Developers Israel Meetup #1
WordPress Developers Israel Meetup #1WordPress Developers Israel Meetup #1
WordPress Developers Israel Meetup #1
Yoav 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 Theme
Adam 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 Nepal
Chandra Prakash Thapa
 
<Head> Presentation: Plugging Into Wordpress
<Head> Presentation: Plugging Into Wordpress<Head> Presentation: Plugging Into Wordpress
<Head> Presentation: Plugging Into Wordpress
Matt 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 2011
Dave 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 beyond
David Glick
 
Childthemes ottawa-word camp-1919
Childthemes ottawa-word camp-1919Childthemes ottawa-word camp-1919
Childthemes ottawa-word camp-1919
Paul 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 SOLR
Exove
 

What's hot (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
 

Viewers also liked

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
KB ELECTRIC
 
13208268 pss7
13208268 pss713208268 pss7
13208268 pss7
13208268
 
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
 

Viewers also liked (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
 

Similar to Schulung Fluid Templating

Fluid - Templating for professionals - T3CON09
Fluid - Templating for professionals - T3CON09Fluid - Templating for professionals - T3CON09
Fluid - Templating for professionals - T3CON09
Sebastian Kurfürst
 
Fluid - The Zen of Templating
Fluid - The Zen of TemplatingFluid - The Zen of Templating
Fluid - The Zen of Templating
Sebastian Kurfürst
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Fluent Development with FLOW3
Fluent Development with FLOW3Fluent Development with FLOW3
Fluent Development with FLOW3
Robert 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 Templates
FortySeven Media
 
Kickass
KickassKickass
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 Pecoraro
Christopher Pecoraro
 
Web Development with Sinatra
Web Development with SinatraWeb Development with Sinatra
Web Development with Sinatra
Bob Nadler, Jr.
 
An Introduction to Tornado
An Introduction to TornadoAn Introduction to Tornado
An Introduction to Tornado
Gavin Roy
 
Django Introduction & Tutorial
Django Introduction & TutorialDjango Introduction & Tutorial
Django Introduction & Tutorial
之宇 趙
 
Atomic design
Atomic designAtomic design
Atomic design
Brad Frost
 
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
Sebastian Kurfürst
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC Framework
Bo-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 Development
Claroline
 
Remixing Confluence with Speakeasy - AtlasCamp 2011
Remixing Confluence with Speakeasy - AtlasCamp 2011Remixing Confluence with Speakeasy - AtlasCamp 2011
Remixing Confluence with Speakeasy - AtlasCamp 2011
Atlassian
 
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
Erich 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 Drupal
Erich Beyrent
 
Migrate yourself. code -> module -> mind
Migrate yourself. code -> module -> mindMigrate yourself. code -> module -> mind
Migrate yourself. code -> module -> mind
Valentine Matsveiko
 
Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...
Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...
Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...
LEDC 2016
 

Similar to 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
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
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
 
Migrate yourself. code -> module -> mind
Migrate yourself. code -> module -> mindMigrate yourself. code -> module -> mind
Migrate yourself. code -> module -> mind
 
Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...
Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...
Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module...
 

More from 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 -- T3CON11
Sebastian Kurfürst
 
FLOW3 Goes Semantic
FLOW3 Goes SemanticFLOW3 Goes Semantic
FLOW3 Goes Semantic
Sebastian Kurfürst
 
Advanced Fluid
Advanced FluidAdvanced Fluid
Advanced Fluid
Sebastian Kurfürst
 
Fluid for Designers
Fluid for DesignersFluid for Designers
Fluid for Designers
Sebastian 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 Fluid
Sebastian 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 Dresden
Sebastian Kurfürst
 
Continuous Integration at T3CON08
Continuous Integration at T3CON08Continuous Integration at T3CON08
Continuous Integration at T3CON08
Sebastian Kurfürst
 

More from 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
 

Recently uploaded

Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptxPRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
christinelarrosa
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
Neo4j
 
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance PanelsNorthern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving
 
Essentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation ParametersEssentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation Parameters
Safe Software
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Neo4j
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
christinelarrosa
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
Ivo Velitchkov
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
c5vrf27qcz
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
Fwdays
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
Mydbops
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
DanBrown980551
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
Alex Pruden
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
Jason Yip
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
AstuteBusiness
 
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
DanBrown980551
 
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
saastr
 

Recently uploaded (20)

Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptxPRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
PRODUCT LISTING OPTIMIZATION PRESENTATION.pptx
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge GraphGraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
GraphRAG for LifeSciences Hands-On with the Clinical Knowledge Graph
 
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance PanelsNorthern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
Northern Engraving | Modern Metal Trim, Nameplates and Appliance Panels
 
Essentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation ParametersEssentials of Automations: Exploring Attributes & Automation Parameters
Essentials of Automations: Exploring Attributes & Automation Parameters
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and BioinformaticiansBiomedical Knowledge Graphs for Data Scientists and Bioinformaticians
Biomedical Knowledge Graphs for Data Scientists and Bioinformaticians
 
Christine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptxChristine's Product Research Presentation.pptx
Christine's Product Research Presentation.pptx
 
Apps Break Data
Apps Break DataApps Break Data
Apps Break Data
 
Y-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PPY-Combinator seed pitch deck template PP
Y-Combinator seed pitch deck template PP
 
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk"Frontline Battles with DDoS: Best practices and Lessons Learned",  Igor Ivaniuk
"Frontline Battles with DDoS: Best practices and Lessons Learned", Igor Ivaniuk
 
Must Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during MigrationMust Know Postgres Extension for DBA and Developer during Migration
Must Know Postgres Extension for DBA and Developer during Migration
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
 
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...
 
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
[OReilly Superstream] Occupy the Space: A grassroots guide to engineering (an...
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |Astute Business Solutions | Oracle Cloud Partner |
Astute Business Solutions | Oracle Cloud Partner |
 
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
LF Energy Webinar: Carbon Data Specifications: Mechanisms to Improve Data Acc...
 
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
9 CEO's who hit $100m ARR Share Their Top Growth Tactics Nathan Latka, Founde...
 

Schulung Fluid Templating