The concept of the project_base and project_theme extensions

Basic principles of organizing TYPO3 setups at sgalinski Internet Services

website_base - Kickstarting projects

The website_base is a boilerplate for kickstarting new projects. It contains a set of preselected, commonly used extensions, the latest project_base version and boilerplate for the theme extensions. The theme extension boilerplate will also contain the latest set of our commonly used frontend modules. The theme, which means the CSS / JS structure and the provided content-elements, are entirely based on Bootstrap 3.

Basic structure

The code that represents a specific website, is split up into three extensions. The project_base contains code that is shared across all installations. It provides all basic TYPO3 configuration. The theme extension (project_theme) contains all code that is vital for the look and feel and functionality of the website. The theme extension uses project_base to compose that code.

The project_theme extension also contains all configuration that is needed for a specific website (like root path, website name, etc.). It may override configurations introduced in project_base.

The website-base is composed by three extensions, each of them prefixed with project-.

project_base

This extension contains configuration (mostly TypoScript) that is common for all projects. It basically represents the "idea of how we do TYPO3". None of these settings are project specific, the purpose of this extension is to deliver a common ground to start TYPO3 projects from, with all rubbish removed, clean structure established and ready to set the real project implementation on top of it. The project_base will never contain anything that is related to the Frontend (CSS / JavaScript / Fluid), as these things tend to get project specific very quickly.

project_theme

This extension is the implementation of the look and feel and the orchestration of the websites functionality. It includes the Aggregate provided by the project_base (which contains the whole project_base config) and builds the actual configuration on top of it. The project_theme also contains all assets that are frontend related (CSS / JS / Images).

Templating-Model

The websites markup gets composed of a Layout, a Template and several Partials and Decorators.

All project-* extensions follow the same basic structure. There are a number of entities which are wrapped inside each other, like the layers of an onion. Going from the smallest to the largest entity, there are:

An Aggregate represents the largest entity and is basically a collection of the whole configuration of a website, reachable by one domain (and its aliases).

Adjustments to each templating-layer can be made on each technical layer of the website-base. Those technical layers split into:

  • Configuration: The TypoScript Layer -> project_*/Configuration/
  • Templating: The Fluid Layer -> project_*/Resources/Private/
  • Frontend: The CSS / JS Layer -> project_*/Resources/Public/