# 3. Struktur

## 3.1. Dateisystem

Beispielaufbau bei Setup via Composer mit `helhum/typo3-secure-web`:

    .
    ├── composer.json
    ├── composer.lock
    ├── typo3
    │   ├── fileadmin
    │   │   ├── _temp_
    │   │   └── user_upload
    │   ├── index.php
    │   ├── typo3
    │   │   ├── index.php
    │   │   ├── install.php
    │   │   └── sysext
    │   ├── typo3conf
    │   │   ├── ENABLE_INSTALL_TOOL
    │   │   ├── ext
    │   │   ├── l10n
    │   │   ├── AdditionalConfiguration.php
    │   │   ├── LocalConfiguration.php
    │   │   └── PackageStates.php
    │   ├── typo3temp
    │   │   ├── assets
    │   │   ├── index.html
    │   │   └── var
    │   └── uploads
    │       ├── index.html
    │       └── media
    ├── vendor
    │   ├── autoload.php
    │   ├── bin
    │   │   ├── ...
    │   │   ├── fluid -> ../typo3fluid/fluid/bin/fluid
    │   │   ├── phpunit -> ../phpunit/phpunit/phpunit
    │   │   ├── typo3 -> ../typo3/cms-cli/typo3
    │   │   └── typo3cms -> ../helhum/typo3-console/Scripts/typo3cms
    │   ├── cogpowered
    │   │   └── finediff
    │   ├── composer
    │   │   ├── autoload_ ...
    │   │   └── ClassLoader.php
    │   ├── cweagans
    │   │   └── composer-patches
    │   ├── doctrine
    │   │   ├── ...
    │   │   └── lexer
    │   ├── helhum
    │   │   ├── console-autoload-include.php
    │   │   ├── typo3-composer-setup
    │   │   ├── typo3-console
    │   │   ├── typo3-console-plugin
    │   │   └── typo3-secure-web
    │   ├── symfony
    │   │   ├── console
    │   │   ├── debug
    │   │   ├── finder
    │   │   ├── polyfill-mbstring
    │   │   ├── process
    │   │   └── yaml
    │   ├── ...
    │   ├── typo3
    │   │   ├── autoload-include.php
    │   │   ├── class-alias-loader
    │   │   ├── cms-cli
    │   │   └── cms-composer-installers
    │   ├── typo3-console
    │   │   └── composer-auto-setup
    │   └── typo3fluid
    │       └── fluid
    └── web
        ├── fileadmin -> ../typo3/fileadmin
        ├── index.php
        ├── typo3
        │   ├── index.php
        │   ├── install.php
        │   └── sysext
        └── typo3temp
            └── assets -> ../../typo3/typo3temp/assets

    111 directories, 34 files

## 3.2. Extensions

Extensions erweitern die Funktionalität von TYPO3 und bestehen aus einem Ordner mit weiteren Dateien. Sie können PHP und andere Dateien wie CSS und JS enthalten.

### 3.2.1. Core Extensions

TYPO3 selbst besteht schon ausschließlich aus Extensions, diese befinden sich unter `typo3/sysext`. Der Ordner steht für “Systemextensions”.

### 3.2.2. Extensions / Sitepackage

Eigene Extensions werden unterhalb von `typo3conf/ext/` abgelegt.

Früher wurden Konfigurationen für die Installation noch im `fileadmin` abgelegt, mittlerweile hat sich hier die Verwendung von sogenannten Sitepackages durchgesetzt. Dies sind Extensions welche keine besondere Funktionalität, wie z.B. Mailversand, mitbringen, sondern das System als solches konfigurieren.

## 3.3. Pakete / Composer

Weitere Abhängigkeiten die mittels `composer` installiert werden liegen im `vendor` Ordner.

## 3.4. Datenbank (-Tabellen)

TYPO3 verwendet eine eigene Datenbank und keine Prefixe um sich von anderer Software abzugrenzen, wie manch anderes System. Dafür werden Prefixe bei Tabellen verwendet. So z.B. `cf_` für das Caching-Framework, `be` für Backend, `fe` für Frontend und `sys` für System.

TYPO3 kennt grundlegend 2 Tabellen-Arten, einmal normale Tabellen die Daten vorhalten, und `mm`-Tabellen für Relationen.

Letztere sollten immer mit einem Suffix `sys_category_record_mm` kenntlich gemacht werden und idealerweise im Namen beinhalten welche Tabellen verknüpft werden. Im Beispiel `sys_category` mit anderen records wie `tt_content`.

Tabellen sollten immer über eine Spalte `uid` und `pid` verfügen. Zudem gibt es einige weitere Konventionen die in der TCA-Reference nachgelesen werden können. Auch die Relationen haben gewisse Konventionen was die Spalten betrifft, so gibt es dort `uid_local` und `uid_foreign`.