Más contenido relacionado La actualidad más candente (20) Similar a FLOW3, Extbase & Fluid cook book (20) FLOW3, Extbase & Fluid cook book14. 1. Put your site in an Extension/Package
In Phoenix: „MyWebsiteCom“
Protect private folders
with .htaccess files:
deny from all
15. 2. Use Fluid for your site template
page = PAGE
page {
typeNum = 0
10 = FLUIDTEMPLATE
10.file = EXT:my_website_com/Resources/Private/Templates/Site.html
10 {
} file = EXT:my_website_com/Resources/Private/Templates/Site.html
extbase.controllerExtensionName = MyWebsiteCom
}
}
Specify extension name/package key
for localisation & resources
Phoenix:
page = TYPO3.TYPO3:Page
page.body.templatePath = 'resource://MyWebsiteCom/Private/Templates/Site.html'
17. 3. Layouts
Solution 1: different templates
page {
…
10 = FLUIDTEMPLATE
10 {
…
file = CASE
file {
key.data = levelfield:-1,backend_layout_next_level,slide
key.override.field = backend_layout
default = TEXT
default.value = EXT:my_website_com/…/Default.html
2 = TEXT
2.value = EXT:my_website_com/…/Wide.html
}
}
18. 3. Layouts
Solution 2: CSS
page {
…
bodyTagCObject = CASE
bodyTagCObject {
key.data = levelfield:-1,backend_layout_next_level,slide
key.override.field = backend_layout
default = TEXT
default.value = <body>
2 = TEXT
2.value = <body class="wide">
}
}
Very clean, but not always possible
19. 3. Layouts
Solution 3: Partials
10 {
…
variables {
…
layout = CASE
layout {
key.data = levelfield:-1,backend_layout_next_level,slide
key.override.field = backend_layout
default = TEXT
default.value = Default
2 = TEXT
2.value = Wide
}
}
}
Site.html
<f:render partial="Content{layout}" />
22. 4. Continuously enhance model
Templates/Paper.html
<f:if condition="{paper.status} == 'accepted'">
<p>{paper.title} is accepted</p>
</f:if> This will will not work!
String comparison will be possible in Fluid!
But it‘s mostly not needed.
23. 4. Continuously enhance model
Model/Paper.php
/**
* @return boolean
*/
public function isAccepted() {
return $this->status === self::STATUS_ACCEPTED;
}
Templates/Paper.html
<f:if condition="{paper.accepted} ">
<p>{paper.title} is accepted</p>
</f:if>
25. 5. Encapsulate your hacks
Controller/BookController.php
public function tagCloudAction() {
$books = $this->bookRepository->findAll();
$tags = array();
foreach ($books as $book) {
foreach ($book->getTags() as $tag) {
$tagCount = 1;
if (isset($tags[$tag->getTitle()])) {
$tagCount ++;
$tags[$tag->getTitle()] = $tagCount;
}
}
$this->view->assign(tags, $tags);
}
26. 5. Encapsulate your hacks
Controller/BookController.php
public function tagCloudAction() {
$tags = $this->tagCloudService->createTagCloud());
$this->view->assign('tags', $tags);
}
TagCloudService interacts with Database directly
Book/TagCloud.html
<f:for each="{tags}" as="tag">
<span class="tag popularity-{tag.popularity}">
{tag.name}
</span>
</f:for>