1. Extension

First of all we have to understand what an extension is, in the context of TYPO3 CMS.

1.1. What is an extension?

See Extension Architecture in TYPO3 Core API Reference.

TYPO3 is built only with extensions, there is no framework below. All features are assigned to a specific extension. This way it’s possible to build the TYPO3 that fits the project needs.

An extension is something like frontend or backend, which provides the TYPO3 frontend or backend. It can also be extbase which works as an Framework to build further extensions or fluid an template engine.

Nowadays most installations also have a site_ or sitepackage extensions, which encapsulates the systems configuration and resources like assets and templates. Thus an TYPO3 extension is the same as an composer package.

In this workshop we will concentrate on a “typical” extension that will provide a plugin and custom record types. This can be installed into any compatible TYPO3 installation. A new record type will be added, which can be edited in the TYPO3 backend. Also a new plugin will be added which can be added as a content element and displayed in frontend.

1.2. Structure of an extension

extension_key
├── Classes
│   ├── Command
│   │   └── ExampleCommandController.php
│   ├── Controller
│   │   └── ExampleController.php
│   └── Domain
│       └── Model
│           └── Example.php
├── composer.json
├── Configuration
│   ├── TCA
│   │   └── Overrides
│   │       └── tt_content.php
│   └── TypoScript
│       ├── constants.typoscript
│       └── setup.typoscript
├── Documentation
├── ext_conf_template.txt
├── ext_emconf.php
├── ext_localconf.php
├── ext_tables.php
├── readme.rst
└── Resources
    └── Private
        └── Templates
            └── Search
                └── Search.html

See Files and locations in TYPO3 Core API Reference.