Fed up with TemplaVoilà? Here's a squeezed guide to get you started with creating page templates and content elements using the FluidTYPO3 family of extensions.

You can code along this post or grab a copy of @cedricziel's ft3_empty extension to copy the basic structure and required files.

Step 1: Install the required extensions

We need: flux, fluidpages, fluidcontent and vhs. Install them as usual through the extension manager, set Flux' debug mode to 1 and check the rewriting of LLL files while you are at it.

Step 2: Create a provider extension

This means a really minimalistic extension that will contain all your templates, typoscript and assets in one package. To do so come up with a short name for your extension and create a folder in typo3conf/ext/ (for simplicity go for all lowercase letters). We are really creative and name our example quickstart. Inside that folder we create a couple more and add some default files:

typo3conf/ext/quickstart
__ Configuration
____ TypoScript
______ setup.txt
__ Resources
____ Private
______ Language
________ locallang.xlf
______ Layouts
______ Partials
______ Templates
________ Content
________ Page
______ Public
__ ext_emconf.php
__ ext_icon.gif
__ ext_tables.php

setup.txt contains typoscript to configure the view by defining where our template files are located (as in any other Extbase extension):

plugin.tx_quickstart.view {
    templateRootPath = EXT:quickstart/Resources/Private/Templates/
    partialRootPath = EXT:quickstart/Resources/Private/Partials/
    layoutRootPath = EXT:quickstart/Resources/Private/Layouts/
}

Note the extension key which is a tx_ prefixed, lowercase version of the extension name. Later you will define some more settings here which will be available in your templates then.

ext_tables.php includes this very typoscript and configures Flux by registering our extension as a provider for page and content templates:

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile($_EXTKEY, 'Configuration/TypoScript', 'Quickstart: a sample extension');

\FluidTYPO3\Flux\Core::registerProviderExtensionKey($_EXTKEY, 'Page');
\FluidTYPO3\Flux\Core::registerProviderExtensionKey($_EXTKEY, 'Content');

You can copy ext_emconf.php from some other extension (like ft3_empty) and change it accordingly or use the exension builder to create a fresh one. Here's an example how it should look like:

$EM_CONF[$_EXTKEY] = array(
    'title' => 'Quickstart',
    'description' => 'This extension provides templates and custom content elements',
    'category' => 'misc',
    'author' => 'Björn Fromme',
    'author_email' => 'mail@bjo3rn.com',
    'author_company' => 'dreipunktnull',
    'shy' => '',
    'dependencies' => 'cms,extbase,fluidflux,fluidpages,fluidcontent,vhs',
    'conflicts' => '',
    'priority' => '',
    'module' => '',
    'state' => 'experimental',
    'internal' => '',
    'uploadfolder' => 1,
    'createDirs' => '',
    'modify_tables' => '',
    'clearCacheOnLoad' => 1,
    'lockType' => '',
    'version' => '0.1',
    'constraints' => array(
        'depends' => array(
            'typo3' => '6.2.0-6.2.99',
            'cms' => '',
            'extbase' => '',
            'fluid' => '',
            'flux' => '',
            'fluidpages' => '',
            'fluidcontent' => '',
            'vhs' => '',
        ),
        'conflicts' => array(
        ),
        'suggests' => array(
        ),
    ),
    'suggests' => array(
    ),
);

ext_icon.gif is a 16x16 pixel icon which will show up in the extension manager and can be copied from some this or some other extension as well.

locallang.xlf contains a skeleton XML structure for translation of labels:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<xliff version="1.0">
    <file source-language="en" datatype="plaintext" original="messages">
        <body>
        </body>
    </file>
</xliff>

You should now find your provider extension in the extension manager: Go ahead, install it, include its static typoscript in your root template and remove any PAGE objects from your root template.

That's about it for now! The next post will be about the fun part and reveal how to create page templates and content elements.

Continue reading Part 2, Part 2 and a half and Part 3.