fluid - templating for professionals - t3con09

65
Inspiring people to share Fluid - Templating made easy T3CON09 Frankfurt - 12 September 2009

Upload: sebastian-kurfuerst

Post on 13-May-2015

3.802 views

Category:

Technology


1 download

DESCRIPTION

Fluid is a next-generation templating engine in PHP developed for FLOW3 and TYPO3 in general. After showing the basics, this presentation outlines the advanced features Fluid has.

TRANSCRIPT

Page 1: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

T3CON09 Frankfurt - 12 September 2009

Page 2: Fluid - Templating for professionals - T3CON09

Fluid - Templating made easy

Sebastian Kurfürst <[email protected]>

12.09.2009

Page 3: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

TYPO3addict

Page 4: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

TYPO3 v4 and v5

v4 v5

Page 5: Fluid - Templating for professionals - T3CON09
Page 6: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

Einordnung - v4, v5 - Transition

Page 7: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

Why are good frameworksimportant?

Page 8: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

No!

We need onlyEnd-Userfeatures

Page 9: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

We needEnd-Userfeatures

Page 10: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

We needDeveloper

features,too!

Page 11: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

Developing should be fun!

Page 12: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

Productivity will increase

Page 13: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

Page 14: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

What is a Template Engine?

DataDataData Template

Template Engine

DataDatarendered data

Page 15: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

Page 16: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

Why another template engine?

Page 17: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

Page 18: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

Goals of Fluid

Page 19: Fluid - Templating for professionals - T3CON09

The Zen of Templating

http://www.sxc.hu/photo/821903

simple powerful

Page 20: Fluid - Templating for professionals - T3CON09

The Zen of Templating

http://www.sxc.hu/photo/821903

intuitive easily extensible

Page 21: Fluid - Templating for professionals - T3CON09

http://www.flickr.com/photos/josefstuefer/9699426/

simple, eleganttemplate engine

Page 22: Fluid - Templating for professionals - T3CON09

Help the template writerin many ways

Page 23: Fluid - Templating for professionals - T3CON09

Easy and cleanextensibility

http://www.sxc.hu/photo/338064

Page 24: Fluid - Templating for professionals - T3CON09

Support for different output formats

Page 25: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

Goals of Fluid

Simple, elegant template engine

support for the template writer in many ways

simple and clean extensibility

different output formats possible

Page 26: Fluid - Templating for professionals - T3CON09

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

CoreConcepts

Page 27: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

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

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

Core Concepts

Fluid - Templating made easy

Variables

Page 28: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

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

<h1>The name of the blog is: {blog.title}</h1>Author: {blog.author}

Core Concepts

Fluid - Templating made easy

Object Accessors

$blog->getAuthor();

Page 29: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

{namespace f=F3\Fluid\ViewHelpers}

<f:link.action action=“someAction“>

Administration</f:link>

Core Concepts

Fluid - Templating made easy

ViewHelpers namespace declaration

ViewHelper invocation

v5

Page 30: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

{namespace f=Tx_Fluid_ViewHelpers}

<f:link.action action=“someAction“>

Administration</f:link>

Core Concepts

Fluid - Templating made easy

ViewHelpers namespace declaration

ViewHelper invocation

v4

Page 31: Fluid - Templating for professionals - T3CON09

Fluid Core does not contain any output logic, and no control structures!

Page 32: Fluid - Templating for professionals - T3CON09

<f:...>

Every tag is a class!

Page 33: Fluid - Templating for professionals - T3CON09

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

Tx_Fluid_ViewHelpers_ForViewHelper

v4

Page 34: Fluid - Templating for professionals - T3CON09

{namespace f=F3\Fluid\ViewHelpers}<f:for>...</f:for>

F3\Fluid\ViewHelpers\ForViewHelper

v5

Page 35: Fluid - Templating for professionals - T3CON09

{namespace f=F3\Fluid\ViewHelpers}<f:link.action>...</f:link.action>

F3\Fluid\ViewHelpers\Link\ActionViewHelper

v5

Page 36: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

<f:link.action action=“show“ arguments=“{blog: blog, name:

‘Hello’}“> show posting</f:link>

Core Concepts

Fluid - Templating made easy

Arrays

Page 37: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

Core Concepts

Fluid - Templating made easy

Basic Ingredients

Object accessors: {blog.title}

ViewHelpers: <f:for each=“{blog.posts}“ as=“post“>...</f:for>

Arrays

Page 38: Fluid - Templating for professionals - T3CON09

simple loop

Fluid for professionals

Page 39: Fluid - Templating for professionals - T3CON09

v4 v5

Forms

Page 40: Fluid - Templating for professionals - T3CON09
Page 41: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

/** * Displays a form for creating a new blog * * @param F3\Blog\Domain\Model\Blog $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(\F3\Blog\Domain\Model\Blog $newBlog = NULL) { $this->view->assign('newBlog', $newBlog); }

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

Fluid for professionals

Fluid - Templating made easy

Forms

Page 42: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

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

Fluid for professionals

Fluid - Templating made easy

Forms

Page 43: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

Code Text

Fluid for professionals

Fluid - Templating made easy

Page 44: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

/** * Displays a form for creating a new blog * * @param F3\Blog\Domain\Model\Blog $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(\F3\Blog\Domain\Model\Blog $newBlog = NULL) { $this->view->assign('newBlog', $newBlog); }

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

Fluid for professionals

Fluid - Templating made easy

Forms

Page 45: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

/** * Displays a form for creating a new blog * * @param F3\Blog\Domain\Model\Blog $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(\F3\Blog\Domain\Model\Blog $newBlog = NULL) { $this->view->assign('newBlog', $newBlog); }

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

Fluid for professionals

Fluid - Templating made easy

Forms

Page 46: Fluid - Templating for professionals - T3CON09
Page 47: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

Layouts

Page 48: Fluid - Templating for professionals - T3CON09

Layouts

v4 v5

Page 49: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

<f:layout name="master" /><f:section name="main">

<h1> My content</h1></f:section>

Fluid for professionals

Fluid - Templating made easy

Layouts

Page 50: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

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

Fluid for professionals

Fluid - Templating made easy

Layouts

Page 51: Fluid - Templating for professionals - T3CON09
Page 52: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

Custom ViewHelpers

Page 53: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

Custom ViewHelpers

Fluid - Templating made easy

Task: Gravatar ViewHelper

should take an e-mail address and output the gravatar image, if any.

Expected output:<img src=“http://www.gravatar.com/avatar/md5($email).jpg“ />

v4

Page 54: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

Custom ViewHelpers

Fluid - Templating made easy

Task: Gravatar ViewHelper

Expected usage:

{namespace blog=Tx_Blog_ViewHelpers}<blog:gravatar email=“[email protected]“ />

v4

Page 55: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

class Tx_Blog_ViewHelpers_GravatarViewHelper extends Tx_Fluid_Core_AbstractViewHelper { public function render() { return ‘Hello World‘; }}

Custom ViewHelpers

Fluid - Templating made easy

1. Create a ViewHelper skeletonv4

Page 56: Fluid - Templating for professionals - T3CON09

Inspiring people toshare

/** * @param string $email The email to render as gravatar */public function render($email) { return ‘http://www.gravatar.com/gravatar/‘ . md5($email);}

Custom ViewHelpers

Fluid - Templating made easy

Implement the ViewHelper!

The PHPDoc must exist (for validation)

All method parameters will be ViewHelper arguments

automatically

v4

Page 57: Fluid - Templating for professionals - T3CON09
Page 58: Fluid - Templating for professionals - T3CON09

Inspiring people toshareFluid - Templating made easy

Fluid Corev4v5

TemplateViewv5 View Helpers (Tags)v4

View Helpers (Tags)TemplateView

Fluid internals

Page 60: Fluid - Templating for professionals - T3CON09

Autocompletion

Page 61: Fluid - Templating for professionals - T3CON09
Page 62: Fluid - Templating for professionals - T3CON09

Balance

Page 63: Fluid - Templating for professionals - T3CON09
Page 64: Fluid - Templating for professionals - T3CON09

?????????????

Page 65: Fluid - Templating for professionals - T3CON09

inspiring people to share.